--- - no_log: true block: - name: fetch all nodes from openstack shade dynamic inventory command: shade-inventory --list register: registered_nodes_output when: refresh_inventory|bool - name: set fact for openstack inventory cluster nodes set_fact: registered_nodes: "{{ (registered_nodes_output.stdout | from_json) | json_query(q) }}" vars: q: "[] | [?metadata.clusterid=='{{stack_name}}']" when: - refresh_inventory|bool - name: set_fact for openstack inventory nodes set_fact: registered_bastion_nodes: "{{ (registered_nodes_output.stdout | from_json) | json_query(q) }}" registered_nodes_floating: "{{ (registered_nodes_output.stdout | from_json) | json_query(q2) }}" vars: q: "[] | [?metadata.group=='infra.{{stack_name}}']" q2: "[] | [?metadata.clusterid=='{{stack_name}}'] | [?public_v4!='']" when: - refresh_inventory|bool - name: set_fact for openstack inventory nodes with provider network set_fact: registered_nodes_floating: "{{ (registered_nodes_output.stdout | from_json) | json_query(q) }}" vars: q: "[] | [?metadata.clusterid=='{{stack_name}}'] | [?public_v4=='']" when: - refresh_inventory|bool - openstack_provider_network_name|default(None) - name: Add cluster nodes w/o floating IPs to inventory with_items: "{{ registered_nodes|difference(registered_nodes_floating) }}" add_host: name: '{{ item.name }}' groups: '{{ item.metadata.group }}' ansible_host: >- {% if use_bastion|bool -%} {{ item.name }} {%- else -%} {%- set node = registered_nodes | json_query("[?name=='" + item.name + "']") -%} {{ node[0].addresses[openstack_private_network|quote][0].addr }} {%- endif %} ansible_fqdn: '{{ item.name }}' ansible_user: '{{ ssh_user }}' ansible_private_key_file: '{{ private_ssh_key }}' ansible_ssh_extra_args: '-F {{ ssh_config_path }}' private_v4: >- {% set node = registered_nodes | json_query("[?name=='" + item.name + "']") -%} {{ node[0].addresses[openstack_private_network|quote][0].addr }} - name: Add cluster nodes with floating IPs to inventory with_items: "{{ registered_nodes_floating }}" add_host: name: '{{ item.name }}' groups: '{{ item.metadata.group }}' ansible_host: >- {% if use_bastion|bool -%} {{ item.name }} {%- elif openstack_provider_network_name|default(None) -%} {{ item.private_v4 }} {%- else -%} {{ item.public_v4 }} {%- endif %} ansible_fqdn: '{{ item.name }}' ansible_user: '{{ ssh_user }}' ansible_private_key_file: '{{ private_ssh_key }}' ansible_ssh_extra_args: '-F {{ ssh_config_path }}' private_v4: >- {% set node = registered_nodes | json_query("[?name=='" + item.name + "']") -%} {{ node[0].addresses[openstack_private_network|quote][0].addr }} public_v4: >- {% if openstack_provider_network_name|default(None) -%} {{ item.private_v4 }} {%- else -%} {{ item.public_v4 }} {%- endif %} - name: Add bastion node to inventory add_host: name: bastion groups: bastions ansible_host: '{{ registered_bastion_nodes[0].public_v4 }}' ansible_fqdn: '{{ registered_bastion_nodes[0].name }}' ansible_user: '{{ ssh_user }}' ansible_private_key_file: '{{ private_ssh_key }}' ansible_ssh_extra_args: '-F {{ ssh_config_path }}' private_v4: >- {% set node = registered_nodes | json_query("[?name=='" + registered_bastion_nodes[0].name + "']") -%} {{ node[0].addresses[openstack_private_network|quote][0].addr }} public_v4: '{{ registered_bastion_nodes[0].public_v4 }}' when: - registered_bastion_nodes is defined - use_bastion|bool