> There's also unanswered questions like: How should we keep track of > state? How do we reconfigure already deployed machines? How do we shut > down a deployment and unprovision the resources it used? Basically, how > many hooks does the <platform> record type need to cover everything?
The current 'deploy' basically generates a machine from scratch - there is some similar funtionality in Nix. I read the code and it is pretty simplistic for now which is possible when you generate a machine once. What I would like to have is a state-machine that can be rerun within an installed deploy in the vein of Puppet/Chef/cfengine but without the complicated setup of a client/server model (the server 'model' should simply be a git repository with branches). That means that after 'deploy' we can run the state and it checks/updates files that may have been changed. I use something like that to run my hosts.allow configuration (for example). When I want to add an IP address, I change the state and rerun 'deploy'. In the past I used to run cfengine. Later I wrote cfruby/cfenjin which I still run today for deployment and updates. For me it is time to write something that plays well with GNU Guix. Are you envisaging something like that? Something that reruns state and updates? It is a lot more complicated because you need a way to define state, modify files, allow for transaction and roll-back. Ideally the system should execute in parallel (for speed) and be ordered (i.e. if two methods change the same file the order matters). BTW cfruby lacks transactions and parallel execution, we could start without. The first step is to define state by creating 'classes' of machines. One class could be deploy 'sshd with IP restriction'. That would be a good use case. Pj.