160 lines
6.6 KiB
ReStructuredText
160 lines
6.6 KiB
ReStructuredText
Ansible Openstack LXC Playbook
|
|
##############################
|
|
:date: 2013-09-05 09:51
|
|
:tags: rackspace, lxc, openstack, cloud, ansible
|
|
:category: \*nix
|
|
|
|
Deploy Openstack in Containers
|
|
==============================
|
|
|
|
First Pass at Ansible playbook for LXC (openstack) Containers.
|
|
Make sure that you have the custom Ansible module installed on
|
|
your local system prior to running the playbook.
|
|
|
|
Expect bugs and general unexplainable issues and the ever so popular
|
|
API change due to general messing about with bits.
|
|
|
|
|
|
Playbook Support
|
|
----------------
|
|
|
|
OpenStack:
|
|
* keystone
|
|
* glance-api
|
|
* glance-registry
|
|
* cinder-api
|
|
* cinder-scheduler
|
|
* cinder-volume
|
|
* nova-api
|
|
* nova-api-ec2
|
|
* nova-api-metadata
|
|
* nova-api-os-compute
|
|
* nova-compute
|
|
* nova-conductor
|
|
* nova-scheduler
|
|
* heat-api
|
|
* heat-api-cfn
|
|
* heat-api-cloudwatch
|
|
* heat-engine
|
|
* horizon
|
|
* neutron-server
|
|
* neutron-dhcp-agent
|
|
* neutron-metadata-agent
|
|
* neutron-linuxbridge-agent
|
|
|
|
|
|
Infra:
|
|
* haproxy
|
|
* galara
|
|
* rabbitmq
|
|
* Deploy-Containers
|
|
* Destroy-Containers
|
|
* Clone-Container
|
|
* Archive-Container
|
|
* Archive-all-containers
|
|
* Deploy-archived-container
|
|
|
|
|
|
Assumptions
|
|
-----------
|
|
|
|
This repo assumes that you have setup the host server that will be running the Openstack Infrastructure with three
|
|
bridged network devices named: ``br-mgmt``, ``br-vmnet``, ``br-ext``. Through these bridges will be used throughout
|
|
the Openstack infrastructure.
|
|
|
|
The repo also relies on configuration files found in the `/etc` directory of this repo.
|
|
If you are running ansible from an "Un-privileged" host, you can place the contents of the /etc/ directory in your
|
|
home folder; this would be in a directory similar to `/home/kevin/rpc_deploy/`. Once you have the file in place, you
|
|
will have to input the details of your environment in the `rpc_user_config.yml` file; please see the file for how
|
|
this should look. After you have a bridged network and the files/directory in place, continue on to _`Base Usage`.
|
|
|
|
|
|
Base Usage
|
|
----------
|
|
|
|
All commands must be executed from the `rpc_deployment` directory. From this directory you will have access to all
|
|
of the playbooks, roles, and variables. It is recommended that you create an override file to contain any and all
|
|
variables that you wish to override for the deployment. While the override file is is not required it will make life
|
|
a bit easier.
|
|
|
|
All of the variables that you may wish to update are in the `vars/` directory, however you should also be aware that
|
|
services will pull in base group variables as found in `inventory/group_vars`.
|
|
|
|
All playbooks exist in the ``playbooks/`` directory and are grouped in different sub-directories.
|
|
|
|
All of the keys, tokens, and passwords are in the `user_variables.yml` file. This file contains no
|
|
preset passwords. To setup your keys, passwords, and tokens you will need to either edit this file
|
|
manually or use the script ``pw-token-gen.py``. Example:
|
|
|
|
.. code-block::
|
|
|
|
# Generate the tokens
|
|
scripts/pw-token-gen.py --file /etc/rpc_deploy/user_variables.yml
|
|
|
|
|
|
Example usage from the `rpc_deployment` directory in the `ansible-rpc-lxc` repository
|
|
|
|
.. code-block:: bash
|
|
|
|
# Run setup on all hosts:
|
|
ansible-playbook -e @vars/user_variables.yml playbooks/setup/host-setup.yml
|
|
|
|
# Run infrastructure on all hosts
|
|
ansible-playbook -e @vars/user_variables.yml playbooks/infrastructure/infrastructure-setup.yml
|
|
|
|
# Setup and configure openstack within your spec'd containers
|
|
ansible-playbook -e @vars/user_variables.yml playbooks/openstack/openstack-setup.yml
|
|
|
|
|
|
About Inventory
|
|
---------------
|
|
|
|
In ansible all things that ansible cares about are located in inventory. In the Rackspace Private Cloud all
|
|
inventory is dynamically generated using the previously mentioned configuration files. While this is a dynamically
|
|
generated inventory it is not 100% generated on every run. The inventory is saved in a file named,
|
|
`rpc_inventory.json` and is located in the directory where you've located your user configuration files. On every
|
|
run a backup of the inventory json file is created in both the current working directory as well as the location where
|
|
the user configuration files exist. The inventory json file is a living document and is intended to grow as the environment
|
|
scales in infrastructure. This means that the inventory file will be appended to as you add more nodes and or change the
|
|
container affinity from within the `rpc_user_config.yml` file. It is recommended that the base inventory file be backed
|
|
up to a safe location upon the completion of a deployment operation. While the dynamic inventory processor has guards in it
|
|
to ensure that the built inventory is not adversely effected by programatic operations this does not guard against user error
|
|
and or catastrophic failure.
|
|
|
|
|
|
Scaling
|
|
-------
|
|
|
|
If you are scaling the environment using the dynamically generated inventory you should know that the inventory was designed to
|
|
generate new entries in inventory and not remove entries from inventory. These playbooks will build an environment to spec so if
|
|
container affinity is changed and or a node is added or removed from an environment the user configuration file will need to be
|
|
modified as well as the inventory json. For this reason it is recommended that should a physical node need replacing it should be
|
|
renamed the same as the previous one. This will make things easier when rebuilding the environment. Additionally if a container
|
|
is needing to be replaced it is better to simply remove the misbehaving container and rebuild it using the existing inventory.
|
|
The reasons that bursting up and down in openstack is less than idea when talking about the infrastructure nodes is outside the
|
|
scope of this document though its safe to say that the sheer volume of moving parts within openstack make this a precarious process.
|
|
|
|
|
|
Notes
|
|
-----
|
|
|
|
* Library has an experimental `Keystone` module which adds ``keystone:`` support to ansible.
|
|
* Library has an experimental `Swift` module which adds ``swift:`` support to ansible.
|
|
* Library has an experimental `LXC` module which adds ``lxc:`` support to ansible.
|
|
|
|
License
|
|
-------
|
|
Copyright 2014, Rackspace US, Inc.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at:
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|