The first cut of the Ansible deployment playbook for deploying Eucalyptus private clouds is ready. I’ve merged the first “release” into the master branch here: https://github.com/lwade/eucalyptus-playbook. Feedback and contributions are very welcome, please file issues against the project.
This playbook allows a user to deploy a single front-end cloud (i.e. all component on a single system) and as many NC’s as they want. Although admittedly I’ve only tested with one so far. I’ve followed, to a certain degree, the best practices described here: http://ansible.cc/docs/bestpractices.html
Overall I’m pretty happy with it, there are some areas which I’d like to re-write and improve but the groundwork is there. It was all very fluid to start with and doing something multi-tier has been enjoyable. I’ve also learnt what its like to automate a deployment of Eucalyptus and there are probably a number of things we should improve to make it easier in this regard. Like getting rid of the euca_conf requirement to register systems, doing it via config file would be better :)
For those familiar with Ansible you will (hopefully) see that I’ve started to split common tasks out to encourage their reuse. I’m certainly not finished here but I think what I have lays the groundwork for task re-use to then enable different topologies.
Fundamentally, to deploy a cloud with a specific topology the master playbook is called which then references a particular collection of tasks to achieve the desired results. After all, a playbook is just a list of tasks, right? So currently there is only one playbook for the single front-end topology: cloud-deploy-sfe.yml. By looking at this, you’ll be able to see what tasks are referenced to build the cloud platform. The next topology I plan to create is one for a non-HA split front-end topology (where all Eucalyptus cloud and cluster tier components are on separate hosts). After that, I’ll look to address a couple of HA topologies. These are the kind of topologies folks are putting into production use.
The directory hierarchy looks like this:
|-- cloud |-- cloud-deploy-distrib-nonha.yml |-- cloud-deploy-sfe.yml |-- cluster | |-- handlers | | `-- cluster.yml | `-- tasks | |-- node-key-fetch.yml | `-- node-registration.yml |-- common | |-- files | |-- handlers | | |-- initialization.yml | | `-- services.yml | |-- tasks | | |-- component-registration.yml | | |-- creds.yml | | |-- initialization.yml | | |-- packages.yml | | |-- preconfig.yml | | |-- refresh-facts.yml | | |-- storage.yml | | `-- template-configuration.yml | `-- templates | `-- eucalyptus.conf.j2 |-- group_vars | |-- all | |-- clustercontroller | |-- nodecontroller | `-- storagecontroller |-- hosts |-- host_vars |-- node | |-- handlers | | `-- node-preconfig.yml | |-- tasks | | |-- node-key-copy.yml | | `-- node-preconfig.yml | `-- templates | |-- ifconfig_bridge_interface.j2 | `-- ifconfig_bridge.j2 |-- readme `-- vars |-- cloudcontroller.yml |-- clustercontroller.yml |-- nodecontroller-net.yml |-- nodecontroller.yml |-- storagecontroller.yml `-- walrus.yml
It’s probably worth explaining the structure (I’ll be updating the readme soon) ….
|-- cloud |-- cloud-deploy-distrib-nonha.yml |-- cloud-deploy-sfe.yml |-- cluster |-- common |-- group_vars |-- hosts |-- host_vars |-- node |-- readme `-- vars
Note: structure may change, there are already some tasks which should really be moved into their tiered component hierarchies.
- cloud – this directory holds any specific task includes, handlers, files and templates for the cloud controller tier (CLC + Walrus)
- cloud-deploy* files – these are the top-level playbooks which pull in the tasks for the platform tiers. From a users perspective, these will be the playbooks they choose to run to deploy a certain topology and configuration.
- cluster – this directory holds specific tasks includes, handlers, files and templates for the cluster layer (CC + SC)
- common – all common tasks, handlers, files and templates are found in this directory. Tasks which are shared across all tiers and components should end up in here.
- group_vars – these are variables which apply to host groups.
- hosts – the inventory file, put your hosts into here, based on group (role).
- host_vars – host specific variables, of which there are none (at the moment).
- node – this directory holds specific tasks includes, handlers, files and templates for the node controllers in a cluster.
- readme – the readme which needs expanding ;)
- vars – this holds variable include files which cannot be used across groups or that need to be set statically for whatever reason.
Please take it for a spin and file issues against the project in GitHub. If we get enough traction, I’m likely to split this out into a separate repo entirely.