# OpenStack Provisioning This repository contains playbooks and Heat templates to provision OpenStack resources (servers, networking, volumes, security groups, etc.). The result is an environment ready for openshift-ansible. ## Dependencies * [Ansible 2.3](https://pypi.python.org/pypi/ansible) * [shade](https://pypi.python.org/pypi/shade) ## What does it do * Create Nova servers with floating IP addresses attached * Assigns Cinder volumes to the servers * Set up an `openshift` user with sudo privileges * Optionally attach Red Hat subscriptions * Set up a bind-based DNS server * When deploying more than one master, set up a HAproxy server ## Set up ### Copy the sample inventory cp openshift-ansible-contrib/playbooks/provisioning/openstack/sample-inventory inventory ### Copy clouds.yaml cp openshift-ansible-contrib/playbooks/provisioning/openstack/sample-inventory/clouds.yaml clouds.yaml ### Update `inventory/group_vars/all.yml` Pay special attention to the values in the first paragraph -- these will depend on your OpenStack environment. The `env_id` and `openstack_dns_domain` will form the DNS domain all your servers will be under. With the default values, this will be `openshift.example.com`. `openstack_nameservers` is a list of DNS servers accessible from all the created Nova servers. These will be serve as your DNS forwarders. `openstack_ssh_key` is a Nova keypair -- you can see your keypairs with `openstack keypair list`. `openstack_default_image_name` is the name of the Glance image the servers will use. You can see your images with `openstack image list`. `openstack_default_flavor` is the Nova flavor the servers will use. You can see your flavors with `openstack flavor list`. `openstack_external_network_name` is the name of the Neutron network providing external connectivity. It is often called `public`, `external` or `ext-net`. You can see your networks with `openstack network list`. The `openstack_num_masters`, `openstack_num_infra` and `openstack_num_nodes` values specify the number of Master, Infra and App nodes to create. ### Update the DNS names in `inventory/hosts` The different server groups are currently grouped by the domain name, so if you end up using a different domain than `openshift.example.com`, you will need to update the `inventory/hosts` file. For example, if your final domain is `my.cloud.com`, you can run this command to fix update the `hosts` file: sed -i 's/openshift.example.com/my.cloud.com/' inventory/hosts ### Configure the OpenShift parameters Finally, you need to update the DNS entry in `inventory/group_vars/OSEv3.yml` (look at `openshift_master_default_subdomain`). In addition, this is the place where you can customise your OpenShift installation for example by specifying the authentication. The full list of options is available in this sample inventory: https://github.com/openshift/openshift-ansible/blob/master/inventory/byo/hosts.ose.example ## Deployment ### Run the playbook Assuming your OpenStack (Keystone) credentials are in the `keystonerc` file, this is how you stat the provisioning process: . keystonerc ansible-playbook -i inventory --private-key ~/.ssh/openshift openshift-ansible-contrib/playbooks/provisioning/openstack/provision.yaml ### Install OpenShift Once it succeeds, you can install openshift by running: ansible-playbook --become --user openshift --private-key ~/.ssh/openshift -i inventory/ openshift-ansible/playbooks/byo/config.yml ## License As the rest of the openshift-ansible-contrib repository, the code here is licensed under Apache 2. However, the openstack.py file under `sample-inventory` is GPLv3+. See the INVENTORY-LICENSE.txt file for the full text of the license.