From d154d4062c893621e91ea19da50076fe656276e1 Mon Sep 17 00:00:00 2001
From: Guillaume Coré <guillaume.core@gmail.com>
Date: Mon, 13 Jan 2020 16:11:00 +0100
Subject: [PATCH] Osp migration bp (#982)

---
 ansible/roles/infra-osp-create-inventory/tasks/main.yml |   71 ++++++++++++++++++-----------------
 1 files changed, 36 insertions(+), 35 deletions(-)

diff --git a/ansible/roles/infra-osp-create-inventory/tasks/main.yml b/ansible/roles/infra-osp-create-inventory/tasks/main.yml
index 4acb9c2..d9c5a55 100644
--- a/ansible/roles/infra-osp-create-inventory/tasks/main.yml
+++ b/ansible/roles/infra-osp-create-inventory/tasks/main.yml
@@ -1,5 +1,8 @@
 ---
 - set_fact:
+    _name_selector: name
+
+- set_fact:
     stack_tag: "{{env_type | replace('-', '_')}}_{{guid}}"
   tags:
     - create_inventory
@@ -8,87 +11,85 @@
 # Find the bastion
 - name: Find the bastion in this batch of host
   set_fact:
-    local_bastion: "{{ host.name }}"
+    local_bastion: "{{ server | json_query(_name_selector) | default(server.name) }}"
   when:
-    - host.status != 'terminated'
-    - '"bastions" in host.metadata.AnsibleGroup'
+    - server.status != 'terminated'
+    - '"bastions" in server.metadata.AnsibleGroup | default("")'
   loop: "{{ r_osp_facts.ansible_facts.openstack_servers }}"
   loop_control:
-    label: "{{ host.name | default(host.name) }}"
-    loop_var: host
+    label: "{{ server | json_query(_name_selector) | default(server.name) }}"
+    loop_var: server
   ignore_errors: yes
   tags:
     - create_inventory
     - must
 
-- when: host.status != 'terminated'
+- when: server.status != 'terminated'
   block:
     - name: Add hosts to inventory
       add_host:
-        name: "{{ host.name }}"
+        name: "{{ server | json_query(_name_selector) | default(server.name) }}"
+        original_name: "{{ server.name }}"
         groups:
           #TODO: remove thos tag_*
           - "tag_Project_{{stack_tag}}"
           - "tag_{{ stack_tag}} | default('unknowns') }}"
-          - "{{ host.metadata.ostype | default('unknowns') }}"
+          - "{{ server.metadata.ostype | default('unknowns') }}"
         ansible_user: "{{ ansible_user }}"
         remote_user: "{{ remote_user }}"
         # ansible_ssh_private_key_file: "{{item['key_name']}}"
         # key_name: "{{item['key_name']}}"
-        state: "{{ host.status }}"
-        instance_id: "{{ host.id }}"
-        isolated: "{{ host.metadata.isolated | default(false) }}"
+        state: "{{ server.status }}"
+        instance_id: "{{ server.id }}"
+        isolated: "{{ server.metadata.isolated | default(false) }}"
         # private_dns_name: "{{item['private_dns_name']}}"
-        private_ip_address: "{{ host.private_v4 }}"
-        public_ip_address: "{{ host.public_v4 | default('') }}"
-        image_id: "{{ host.image.id | default('') }}"
+        private_ip_address: "{{ server.private_v4 }}"
+        public_ip_address: "{{ server.public_v4 | default('') }}"
+        image_id: "{{ server.image.id | default('') }}"
         ansible_ssh_extra_args: "-o StrictHostKeyChecking=no"
         bastion: "{{ local_bastion | default('') }}"
       loop: "{{ r_osp_facts.ansible_facts.openstack_servers }}"
       loop_control:
-        label: "{{ host.name }}"
-        loop_var: host
+        label: "{{ server | json_query(_name_selector) | default(server.name) }}"
+        loop_var: server
       tags:
         - create_inventory
         - must
 
     - add_host:
-        name: "{{ host.name }}"
-        groups: "{{ host.metadata.AnsibleGroup }}"
+        name: "{{ server | json_query(_name_selector) | default(server.name) }}"
+        groups: "{{ server.metadata.AnsibleGroup }}"
       loop: "{{ r_osp_facts.ansible_facts.openstack_servers }}"
       loop_control:
-        label: "{{ host.name }}"
-        loop_var: host
+        label: "{{ server | json_query(_name_selector) | default(server.name) }}"
+        loop_var: server
+      when: server.metadata.AnsibleGroup | default('') != ''
       tags:
         - create_inventory
         - must
 
-    - name: Make sure bastion has public DNS name defined
-      add_host:
-        name: "{{ host.name }}"
-        public_dns_name: "{{ host.name }}.{{ guid }}.{{osp_cluster_dns_zone}}"
-      loop: "{{ r_osp_facts.ansible_facts.openstack_servers }}"
-      loop_control:
-        label: "{{ host.name }}"
-        loop_var: host
-      when:
-        - host.name in groups['bastions']
-        - host.public_v4 != ''
+- name: Make sure bastion has public DNS name defined
+  add_host:
+    name: "{{ host }}"
+    public_dns_name: "{{ host }}.{{ guid }}.{{osp_cluster_dns_zone}}"
+  loop: "{{ groups['bastions'] }}"
+  loop_control:
+    loop_var: host
+  when: hostvars[host].public_ip_address != ''
 
 - debug:
     var: hostvars[local_bastion].public_ip_address
 
 - debug:
-    msg: "bastion IP is {{ lookup('dig',local_bastion ~ '.' ~ guid ~ '.' ~ osp_cluster_dns_zone) }}"
+    msg: >-
+      bastion IP is {{ lookup('dig', hostvars[local_bastion].public_dns_name) }}
   ignore_errors: true
 
 - name: Verify that DNS matches bastion host_var
   assert:
     that:
     # Requires dnspython library
-    - lookup('dig', bastion_lookup) == hostvars[local_bastion].public_ip_address
-  vars:
-    bastion_lookup: "{{ local_bastion ~ '.' ~ guid ~ '.' ~ osp_cluster_dns_zone }}"
+    - lookup('dig', hostvars[local_bastion].public_dns_name) == hostvars[local_bastion].public_ip_address
 
 - name: debug hostvars
   debug:

--
Gitblit v1.9.3