openstack.yml 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. ---
  2. - no_log: true
  3. block:
  4. - name: fetch all nodes from openstack shade dynamic inventory
  5. command: shade-inventory --list
  6. register: registered_nodes_output
  7. when: refresh_inventory|bool
  8. - name: set fact for openstack inventory cluster nodes
  9. set_fact:
  10. registered_nodes: "{{ (registered_nodes_output.stdout | from_json) | json_query(q) }}"
  11. vars:
  12. q: "[] | [?metadata.clusterid=='{{stack_name}}']"
  13. when:
  14. - refresh_inventory|bool
  15. - name: set_fact for openstack inventory nodes
  16. set_fact:
  17. registered_bastion_nodes: "{{ (registered_nodes_output.stdout | from_json) | json_query(q) }}"
  18. registered_nodes_floating: "{{ (registered_nodes_output.stdout | from_json) | json_query(q2) }}"
  19. vars:
  20. q: "[] | [?metadata.group=='infra.{{stack_name}}']"
  21. q2: "[] | [?metadata.clusterid=='{{stack_name}}'] | [?public_v4!='']"
  22. when:
  23. - refresh_inventory|bool
  24. - name: Add cluster nodes w/o floating IPs to inventory
  25. with_items: "{{ registered_nodes|difference(registered_nodes_floating) }}"
  26. add_host:
  27. name: '{{ item.name }}'
  28. groups: '{{ item.metadata.group }}'
  29. ansible_host: "{% if use_bastion|bool %}{{ item.name }}{% else %}{{ item.private_v4 }}{% endif %}"
  30. ansible_fqdn: '{{ item.name }}'
  31. ansible_user: '{{ ssh_user }}'
  32. ansible_private_key_file: '{{ private_ssh_key }}'
  33. ansible_ssh_extra_args: '-F {{ ssh_config_path }}'
  34. private_v4: '{{ item.private_v4 }}'
  35. - name: Add cluster nodes with floating IPs to inventory
  36. with_items: "{{ registered_nodes_floating }}"
  37. add_host:
  38. name: '{{ item.name }}'
  39. groups: '{{ item.metadata.group }}'
  40. ansible_host: "{% if use_bastion|bool %}{{ item.name }}{% else %}{{ item.public_v4 }}{% endif %}"
  41. ansible_fqdn: '{{ item.name }}'
  42. ansible_user: '{{ ssh_user }}'
  43. ansible_private_key_file: '{{ private_ssh_key }}'
  44. ansible_ssh_extra_args: '-F {{ ssh_config_path }}'
  45. private_v4: '{{ item.private_v4 }}'
  46. public_v4: '{{ item.public_v4 }}'
  47. - name: Add bastion node to inventory
  48. add_host:
  49. name: bastion
  50. groups: bastions
  51. ansible_host: '{{ registered_bastion_nodes[0].public_v4 }}'
  52. ansible_fqdn: '{{ registered_bastion_nodes[0].name }}'
  53. ansible_user: '{{ ssh_user }}'
  54. ansible_private_key_file: '{{ private_ssh_key }}'
  55. ansible_ssh_extra_args: '-F {{ ssh_config_path }}'
  56. private_v4: '{{ registered_bastion_nodes[0].private_v4 }}'
  57. public_v4: '{{ registered_bastion_nodes[0].public_v4 }}'
  58. when:
  59. - registered_bastion_nodes is defined
  60. - use_bastion|bool