Search code examples
ansibleopenstack

Usage of variable and role in openstack-ansible


I am a newbie to Ansible and I started to study deploying Openstack with Ansible recently.

Here is the git of openstack-ansible:

https://github.com/openstack/openstack-ansible

From the tutorial:

https://docs.openstack.org/project-deploy-guide/openstack-ansible/newton/run-playbooks.html

there is one command running playbook:

openstack-ansible setup-hosts.yml

I read this playbook, it includes another playbook at line 16:

include: openstack-hosts-setup.yml

Then I read the included openstack-hosts-setup.yml and following is the snippet from it:

- name: Basic host setup
  hosts: "{{ openstack_host_group|default('hosts') }}"
  gather_facts: "{{ gather_facts | default(True) }}"
  max_fail_percentage: 20
  user: root
  pre_tasks:
   - name: Check for a supported Operating System
     assert:
      that:
        - (ansible_distribution == 'Ubuntu' and ansible_distribution_release == 'xenial') or
          (ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7')
      msg: "The only supported platforms for this release are Ubuntu 16.04 LTS (Xenial) and CentOS 7 (WIP)"
  roles:
   - role: "openstack_hosts"
  tags:
   - openstack-hosts

I was confused about roles here

roles:
   - role: "openstack_hosts"

As far as I know, there should be directory structure when using roles like:

roles/
   openstack_hosts/
     files/
     templates/
     tasks/
     handlers/
     vars/
     defaults/
     meta/

However, I can't find this structure in this openstack-ansible project. So I have no idea where is the role(openstack_hosts) in this playbook.

When running this playbook , an error occurred just expected:

ERROR! the role 'openstack_hosts' was not found in /opt/openstack-ansible/playbooks/roles:/root/ansible/roles:/opt/openstack-ansible/playbooks

Also, I was wondering where the variablescome from:

hosts: "{{ openstack_host_group|default('hosts') }}"

I thought the variable will be found from the directory vars or defaults under roles directory. Since there is no such directory, I have no idea where this variable comes from.

Could any tell me where should I find the variable openstack_host_group and explain how the role is used here? Or did I miss something or I was wrong with some concepts about Ansible?

Thanks!!

By the way, this is the first time I ask question. If the question is not clear enough or something not proper, please let me know :). Thanks again.


Solution

  • I guess you didn't complete bootstrap-ansible.sh from this guide. So you don't have required roles installed.

    As for openstack_host_group, it seems that it is optional variable, so you can override default host pattern (which is hosts) if you want with extra variable (like -e openstack_host_group=my_other_group).