From 563123d788ac6f53ad04520646305d9f52efe623 Mon Sep 17 00:00:00 2001 From: Ricardo Carrillo Cruz Date: Mon, 6 Jun 2016 12:18:24 +0000 Subject: [PATCH] Add generate infra dynamic inventory playbook/role Some clouds may not have metadata enabled, or even have it but is not reliable. Force the user to define in infra_config.yml the services that make up the OpenStack Infra cloud. This will be in a dict named 'services', which will contain an entry for each OpenStack Infra service (puppetmaster, zuul, nodepool, etc). Change-Id: I9e3fe34684cd31bf1750ad8cf72e7e9090bfe087 --- generate_infra_dynamic_groups.yml | 6 ++++ infra_config.yml.sample | 10 ++++++ .../defaults/main.yml | 3 ++ .../tasks/main.yml | 36 +++++++++++++++++++ roles/set_hostnames/tasks/main.yml | 22 +----------- roles/set_hostnames/templates/hosts.j2 | 7 ++++ site.yml | 1 + 7 files changed, 64 insertions(+), 21 deletions(-) create mode 100644 generate_infra_dynamic_groups.yml create mode 100644 infra_config.yml.sample create mode 100644 roles/generate_infra_dynamic_groups/defaults/main.yml create mode 100644 roles/generate_infra_dynamic_groups/tasks/main.yml create mode 100644 roles/set_hostnames/templates/hosts.j2 diff --git a/generate_infra_dynamic_groups.yml b/generate_infra_dynamic_groups.yml new file mode 100644 index 0000000..8eede8f --- /dev/null +++ b/generate_infra_dynamic_groups.yml @@ -0,0 +1,6 @@ +--- +# file: generate_infra_dynamic_groups.yml +- hosts: localhost + connection: local + roles: + - { role: generate_infra_dynamic_groups } diff --git a/infra_config.yml.sample b/infra_config.yml.sample new file mode 100644 index 0000000..2660430 --- /dev/null +++ b/infra_config.yml.sample @@ -0,0 +1,10 @@ +--- +services: + puppetmaster: + - name: puppetmaster.infra.test + gerrit: + - name: gerrit.infra.test + zuul: + - name: zuul.infra.test + nodepool: + - name: nodepool.infra.test diff --git a/roles/generate_infra_dynamic_groups/defaults/main.yml b/roles/generate_infra_dynamic_groups/defaults/main.yml new file mode 100644 index 0000000..f1b2456 --- /dev/null +++ b/roles/generate_infra_dynamic_groups/defaults/main.yml @@ -0,0 +1,3 @@ +--- +generate_static_inventory: no +generate_static_inventory_path: ~/inventory diff --git a/roles/generate_infra_dynamic_groups/tasks/main.yml b/roles/generate_infra_dynamic_groups/tasks/main.yml new file mode 100644 index 0000000..68f01ae --- /dev/null +++ b/roles/generate_infra_dynamic_groups/tasks/main.yml @@ -0,0 +1,36 @@ +--- +- name: Get Puppetmaster server name from infra config + set_fact: puppetmaster_name={{ services['puppetmaster'][0]['name'] }} +- name: Get Puppetmaster server UUID from dynamic inventory + set_fact: puppetmaster_uuid={{ groups[puppetmaster_name][0] }} +- name: Get Puppetmaster server IP + set_fact: puppetmaster_ip={{ hostvars[puppetmaster_uuid]['openstack']['public_v4'] }} +- name: Add "{{ puppetmaster_name }}" to infra and puppetmaster groups and set inventory IP + add_host: name={{ puppetmaster_name }} ansible_ssh_host={{ puppetmaster_ip }} groups=infra,puppetmaster + +- name: Get Gerrit server name from infra config + set_fact: gerrit_name={{ services['gerrit'][0]['name'] }} +- name: Get Gerrit server UUID from dynamic inventory + set_fact: gerrit_uuid={{ groups[gerrit_name][0] }} +- name: Get Gerrit server IP + set_fact: gerrit_ip={{ hostvars[gerrit_uuid]['openstack']['public_v4'] }} +- name: Add "{{ gerrit_name }}" to infra and gerrit groups and set inventory IP + add_host: name={{ gerrit_name }} ansible_ssh_host={{ gerrit_ip }} groups=infra,gerrit + +- name: Get Zuul server name from infra config + set_fact: zuul_name={{ services['zuul'][0]['name'] }} +- name: Get Zuul server UUID from dynamic inventory + set_fact: zuul_uuid={{ groups[zuul_name][0] }} +- name: Get Zuul server IP + set_fact: zuul_ip={{ hostvars[zuul_uuid]['openstack']['public_v4'] }} +- name: Add "{{ zuul_name }}" to infra and zuul groups and set inventory IP + add_host: name={{ zuul_name }} ansible_ssh_host={{ zuul_ip }} groups=infra,zuul + +- name: Get Jenkins server name from infra config + set_fact: jenkins_name={{ services['jenkins'][0]['name'] }} +- name: Get Jenkins server UUID from dynamic inventory + set_fact: jenkins_uuid={{ groups[jenkins_name][0] }} +- name: Get Jenkins server IP + set_fact: jenkins_ip={{ hostvars[jenkins_uuid]['openstack']['public_v4'] }} +- name: Add "{{ jenkins_name }}" to infra and jenkins groups and set inventory IP + add_host: name={{ jenkins_name }} ansible_ssh_host={{ jenkins_ip }} groups=infra,jenkins diff --git a/roles/set_hostnames/tasks/main.yml b/roles/set_hostnames/tasks/main.yml index 24cba00..ef4a447 100644 --- a/roles/set_hostnames/tasks/main.yml +++ b/roles/set_hostnames/tasks/main.yml @@ -1,22 +1,2 @@ --- -- name: Get hostname from server name - set_fact: server_hostname={{ inventory_hostname.partition('.')[0] }} -- name: Get server UUID from dynamic inventory - set_fact: server_uuid={{ groups[inventory_hostname][0] }} -- name: Get server IP - set_fact: server_ip={{ hostvars[server_uuid]['openstack']['public_v4'] }} -# Set hostname and /etc/hosts -# Inspired by: -# https://github.com/ansible/ansible/pull/8482) -# https://gist.github.com/rothgar/8793800 -- name: Set /etc/hostname - hostname: name="{{ server_hostname }}" - -# " lovely lonely double-quote for fixing vim highlighting - -- name: Add all infra hosts to /etc/hosts - lineinfile: dest=/etc/hosts - line='{{ server_ip }} {{ item }} {{ server_hostname }}' - insertafter='^127\.0\.0\.1' - state=present - with_items: "{{ groups['infra'] }}" +- template: src=hosts.j2 dest=/etc/hosts owner=root group=root mode=0644 diff --git a/roles/set_hostnames/templates/hosts.j2 b/roles/set_hostnames/templates/hosts.j2 new file mode 100644 index 0000000..2cb165f --- /dev/null +++ b/roles/set_hostnames/templates/hosts.j2 @@ -0,0 +1,7 @@ +127.0.0.1 localhost +{% for host in groups['infra'] %} +{% set server_hostname = host.partition('.')[0] %} +{% set server_uuid = groups[host][0] %} +{% set server_ip = hostvars[server_uuid]['openstack']['public_v4'] %} +{{ server_ip }} {{ host }} {{ server_hostname }} +{% endfor %} diff --git a/site.yml b/site.yml index 3608157..30bb760 100644 --- a/site.yml +++ b/site.yml @@ -1,5 +1,6 @@ --- # file: site.yml +- include: generate_infra_dynamic_groups.yml - include: common.yml - include: set_hostnames.yml - include: bootstrap_puppetmaster.yml