################################################################################ The documentation here is a mess. This project is basically a scratch-pad for my thoughts on host deployment. The end-goal is to have an IRC/Jabber bot that can deploy vmware, linode, or ec2 instances for me based on a yaml file or on the contents of an LDAP directory. ################################################################################ Let's talk about deployments for a minute. There are a lot of frameworks out there that will help you create an instance of a host. Some are template driven; Others will allow you to "kickstart" your own. But none of them are "code complete" What I mean is they'll deploy the host just fine, but the majority of the work in maintaining an infrastructure isn't spinning up a host at all. Here's a typical re-deployment on a linode (http://linode.com) * [???] Determine if the node is in production * [???] If so, migrate production services to another node, update pointers to the service * [???] Supress montoring of the host * [API] Power off the node * [API] Delete the node from disk * [???] Create a new root password and/or get your keypair ready * [API] Deploy a new linode from a template * [API] Get the IP of the new node * [???] Wait until SSH comes up, get the new ssh fingerprints * [???] Update DNS with the new SSFP / A records * [???] Perform any filesystem mounts that the node needs (and update /etc/fstab) * [???] Upgrade the kernel (if needed) * [API] Set the kernel to boot pv_grub on the next boot (if kernel upgraded) * [???] Generate a ssh-keypair for root * [???] Update ou=Hosts in LDAP (or whatever you use for a CMDB) with the new host information * [???] Update the root's key in gitosis or github (for app deployments) * [???] Install puppet/chef/whatever you use for actual config management * [???] Run your configuration management system * [???] Re-enable monitoring for the host Things most APIs do well are noted with the [API] tag. Things that are done manually (or are not done at all) are given the [???] tag. For new deployments, you can just start at the sixth step. There are still a great many holes to fill. (twss) Filling those holes is what I'm trying to achieve. ################################################################################ Why POE? Why Perl? Why not the new hotness I like instead? Why do you suck so bad? Well, I already have a lot of investment in POE IRC/Jabber bots, and all these people who tell me that their way is the "one true way" never seem to have a functioning example of what the "better way" looks like. To quote Linus Torvalds, "Talk is cheap, show me the code." Get me a functional example and we'll talk. ################################################################################ I wanted a non-blocking way to order work, where the work progress could be queried along the way. The general concept would be you put the "design" of the system somewhere, say, in LDAP or in YAML in a gist. cat<{$module}->$task($heap->{'clipboard'}); so the tasks "linode:deploy" and "dnswizard:update_host" and "ldapworker:update_host_ou" could all be in the task list, each corresponding to 3 separate worker modules. (Think: how do I deploy clusters in a coordinated fashion across EC2/Linode/ESX in one pass?) ################################################################################ Now all of this is completely separate from configuration management on the host. We use puppet for that.