TOSCA OpenStack Profile Examples

For OpenStack Puccini can generate Ansible playbooks that rely on the Ansible OpenStack collection. Custom operation artifacts, if included, are deployed to the virtual machines and executed.

Effectively, the combination of TOSCA + Ansible provides an equivalent set of features to Heat/Mistral. However, Ansible is a general-purpose orchestrator that can do a lot more than Heat. The generated playbooks comprise roles that can be imported and used in other playbooks, allowing for custom orchestration integrations.

Note that though Puccini can compile HOT directly, we recommend TOSCA because of its much richer grammar and features. See the HOT examples.

If you have Ansible installed and configured then you can run something like this to deploy the example:

puccini-tosca compile examples/openstack/hello-world.yaml --exec=openstack.generate --output=dist/openstack
cd dist/openstack
ansible-playbook install.yaml

When run for the first time it will provision keys for your deployment. The public and private keys will be under the keys subdirectory. Note that the private key cannot be retrieved after creation, so make sure not to lose it!

You can now use the private key to login to servers, e.g.:

ssh -i keys/topology -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.237.176.164

(Note the ssh options to avoid storing certificates for the IP address. It’s good practice because IP addresses in the cloud may be reused.)

You can run the playbook multiple times. If the servers are already running, they will not be recreated.

Installing Ansible

Many operating systems have Ansible as a package, but you can install a specific version manually in a Python virtual environment. Here’s our example script.

Configuring for Your OpenStack

The openstack.generate scriptlet will generate a template clouds.yaml skeleton for you if the file does not exist. You will need to edit it with the proper credentials for accessing your OpenStack instance. See the documentation.

Testing with Rackspace

Rackspace provides a public OpenStack cloud.

You will also need to install Rackspace’s authentication plugin:

pip install rackspaceauth

Edit your clouds.yaml to look something like this:

clouds:
  rackspace:
    region_name: ORD
    auth_type: rackspace_apikey
    auth:
      username: USERNAME
      api_key: API_KEY
      auth_url: https://identity.api.rackspacecloud.com/v2.0/

Rackspace uses non-standard image and flavor names, so you will need to provide inputs to change the defaults:

puccini-tosca compile examples/openstack/hello-world.yaml -i image_id="CentOS 7 (PVHVM)" -i flavor="512MB Standard Instance"