blueboxgroup / ursula

Ansible playbooks for operating OpenStack - Powering Blue Box Cloud.
https://www.blueboxcloud.com
205 stars 5 forks source link
Ursula

Ursula provides a series of Ansible playbooks for installing, managing, and maintaining OpenStack powered clouds. Ursula was originally created by a team at [Blue Box](https://www.blueboxcloud.com) and is released under the MIT License (MIT). The `ceph-monitor`, and `ceph-osd` roles were originally taken from [ceph/ceph-ansible](https://github.com/ceph/ceph-ansible), but have since been modified. `ceph/ceph-ansible` is released under the Apache License. # Installation ## System Dependencies The following system packages ( or their equivalents for your OS ) are required to run `ursula`: * python-pip * python-dev * libxml2-dev * libxslt-dev * libffi-dev * libssl-dev #### Mac OS X specific notes non installing dependencies If you have already installed python via brew, you'll need to remove it so you can force the devel headers to be installed AND usable by your libraries. ```bash brew uninstall python ``` Next, install python and pip if not already installed. ```bash brew install --devel --framework python pip install -U pip ``` If you've already attempted or installed libxml2 and/or libxslt unlink and uninstall those first. ```bash brew unlink libxml2 brew unlink libxslt brew uninstall libxml2 brew uninstall libxslt ``` Now, install libxml2 and force static dependencies to enabled linking to the installed devel headers. ```bash brew install --with-python libxml2 STATIC_DEPS=true sudo pip install -U lxml ``` Install libxslt and relink the newly installed libraries. As we already forced libxml2 to link the headers libxslt should do so as well without further steps. ```bash brew install --with-python libxslt brew link libxml2 --force brew link libxslt --force ``` Install the remaining needed libraries. ```bash brew install libffi brew install openssl ``` ## Python Environment We recommend using [virtualenv](http://virtualenv.readthedocs.org/en/latest/) or [virtualenvwrapper](https://virtualenvwrapper.readthedocs.org/en/latest/) to isolate your Python environment. If you're new to python, the following will install `virtualenvwrapper` and set up a `virtualenv` for ursula: ```bash $ pip install virtualenvwrapper $ source /usr/local/bin/virtualenvwrapper.sh $ mkvirtualenv ursula ``` Note: If you're using OSX El Capitan (version 10.11) or newer, you need to use `pip install --ignore-installed six virtualenvwrapper` to get pip to not attempt to uninstall the existing version of six which the system will not allow. You will want to add `source /usr/local/bin/virtualenvwrapper.sh` to your shell startup file, changing the path to virtualenvwrapper.sh depending on where it was installed by pip. For bash users on MaC OS X, use .bash_profile; if, like me, you've moved to Zsh, use .zshrc instead. ```bash echo " " >> .bash_profile echo "#sourcing statement for virtualenvwrapper" >> .bash_profile echo "source /usr/local/bin/virtualenvwrapper.sh" >> .bash_profile ``` From now on to work with ursula you can run `$ workon ursula` to enter the `virtualenv` ## Install ursula and dependencies: Now that your python environment is ready, you can clone ursula and install its prerequisites. You'll need a modern version of pip, so if you're using a version <7, run: ``` $ pip install -U pip ``` Now you can continue cloning and installing ursula: ```bash $ cd ~/development $ git clone git@github.com:blueboxgroup/ursula.git $ cd ursula $ pip install -r requirements.txt ``` These steps will have installed `ursula-cli`, the various openstack clients, and our patched fork of `Ansible`. # ursula-cli Ursula was designed by [Blue Box](https://www.bluebox.net) to manage a large number of OpenStack deployments. In order to do this efficiently we've made some changes to how `ansible` works. As part of these changes we have a wrapper tool called `ursula-cli` which was installed during the `pip install -r requirements.txt` above. Make sure `ursula-cli` is installed in your environment: ``` ursula -h usage: ursula [-h] [--ursula-forward] [--ursula-test] [--ursula-debug] environment playbook A CLI wrapper for ansible ... ... ``` There are two mandatory fields required by `ursula-cli`. The first is `environment` which will require some further explanation. The second is `playbook` which will almost always be `site.yml`. ## openstack-envs One of the modifications that we have made to `Ansible` is the ability to have a seperate path that includes all of the configuration options for your OpenStack deployment(s). An example of this can be found in `/envs/example` If you look in the `/envs/example` path, you'll see a `defaults.yml` file and a series of directories each representing a different OpenStack deployment. We then utilize the standard `Ansible` features by having `group_vars`, `host_vars`, and a `hosts` file. There are also some `vagrant.yml` files scattered around. These are helper files to make using `Vagrant` even easier with `ursula` to test your environments in VMs. ### allinone The simplest example deployment is `allinone` which is a single server deployment that acts as both a `controller` and a `compute` node. Whether or not you're using `Vagrant` if you look in the `envs/example/allinone/vagrant.yml` file it will give you some hints on what your server should look like. If you do not wish to use `Vagrant` then you should install Ubuntu 12.04 on a server and configure its networking as described in the `vagrant.yml` file. Next, look in the `hosts` file. It's very simple in this case due to the fact we have only a single server. This file combined with the `site.yml` playbook tells Ansible what roles to apply to which servers. Finally, we have the `group_vars/all.yml` file. This contains values that will override the `defaults.yml` in the parent directory. For example, we're disabling Percona replication by setting `percona.replication: False`. ## Performing a deployment: For the sake of simplicity, I recommend using `Vagrant` rather than `Manual` for your first install. If you want to install manually, do not use `envs/examples/*` without modifications as it contains several circuit breakers such as invalid certificates and your installs will fail. ### Manually If you're not running `Vagrant` and have installed ubuntu onto a server and configured the networking then we need to tell our system how to talk to this new server. The easiest way is via an entry in your ssh config file in `~/.ssh/config`. ``` Host allinone HostName 172.16.0.100 User ubuntu IdentityFile ~/.ssh/private_key ``` ```bash $ ursula envs/example/allinone site.yml ``` ### Vagrant If you're running `Vagrant`, we have a wrapper script that stands up the appropriate vagrant environment, saves it as an ssh config, and then calls `ursula` for you. To deploy your `allinone` environment via `Vagrant` simply run: ```bash $ ursula --provisioner=vagrant envs/example/allinone site.yml ``` Note: The default OS for ursula is Ubuntu Trusty. If you want Precise, set the env var `URSULA_BOX_NAME` to the name of your precise vagrant box before running vagrant. # Contributing Contributions in the form of pull requests or issues are very welcome. We ask that you review [Code Guidelines](./coding.md). # More Docs See the [/doc](https://github.com/blueboxgroup/ursula/tree/master/doc) directory of this repo.