launch.yml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. ---
  2. - name: Launch instance(s)
  3. hosts: localhost
  4. connection: local
  5. gather_facts: no
  6. vars_files:
  7. - vars.yml
  8. tasks:
  9. - fail:
  10. msg: "Deployment type not supported for OpenStack provider yet"
  11. when: deployment_type == 'online'
  12. # TODO: Write an Ansible module for dealing with HEAT stacks
  13. # Dealing with the outputs is currently terrible
  14. - name: Check OpenStack stack
  15. command: 'heat stack-show openshift-ansible-{{ cluster_id }}-stack'
  16. register: stack_show_result
  17. changed_when: false
  18. failed_when: stack_show_result.rc != 0 and 'Stack not found' not in stack_show_result.stderr
  19. - name: Create OpenStack Stack
  20. command: 'heat stack-create -f {{ openstack_infra_heat_stack }}
  21. -P key_pair={{ openstack_ssh_keypair }}
  22. -P cluster_id={{ cluster_id }}
  23. -P dns_nameservers={{ openstack_network_dns | join(",") }}
  24. -P cidr={{ openstack_network_cidr }}
  25. -P ssh_incoming={{ openstack_ssh_access_from }}
  26. -P num_masters={{ num_masters }}
  27. -P num_nodes={{ num_nodes }}
  28. -P num_infra={{ num_infra }}
  29. -P master_image={{ deployment_vars[deployment_type].image }}
  30. -P node_image={{ deployment_vars[deployment_type].image }}
  31. -P infra_image={{ deployment_vars[deployment_type].image }}
  32. -P master_flavor={{ openstack_flavor["master"] }}
  33. -P node_flavor={{ openstack_flavor["node"] }}
  34. -P infra_flavor={{ openstack_flavor["infra"] }}
  35. -P ssh_public_key="{{ openstack_ssh_public_key }}"
  36. openshift-ansible-{{ cluster_id }}-stack'
  37. when: stack_show_result.rc == 1
  38. - set_fact:
  39. heat_stack_action: 'stack-update'
  40. when: stack_show_result.rc == 0
  41. - name: Update OpenStack Stack
  42. command: 'heat stack-update -f {{ openstack_infra_heat_stack }}
  43. -P key_pair={{ openstack_ssh_keypair }}
  44. -P cluster_id={{ cluster_id }}
  45. -P cidr={{ openstack_network_cidr }}
  46. -P dns_nameservers={{ openstack_network_dns | join(",") }}
  47. -P external_net={{ openstack_network_external_net }}
  48. -P floating_ip_pool={{ openstack_floating_ip_pool }}
  49. -P ssh_public_key="{{ openstack_ssh_public_key }}"
  50. -P ssh_incoming={{ openstack_ssh_access_from }}
  51. -P num_masters={{ num_masters }}
  52. -P num_nodes={{ num_nodes }}
  53. -P num_infra={{ num_infra }}
  54. -P master_image={{ deployment_vars[deployment_type].image }}
  55. -P node_image={{ deployment_vars[deployment_type].image }}
  56. -P infra_image={{ deployment_vars[deployment_type].image }}
  57. -P master_flavor={{ openstack_flavor["master"] }}
  58. -P node_flavor={{ openstack_flavor["node"] }}
  59. -P infra_flavor={{ openstack_flavor["infra"] }}
  60. openshift-ansible-{{ cluster_id }}-stack'
  61. - name: Wait for OpenStack Stack readiness
  62. shell: 'heat stack-show openshift-ansible-{{ cluster_id }}-stack | awk ''$2 == "stack_status" {print $4}'''
  63. register: stack_show_status_result
  64. until: stack_show_status_result.stdout not in ['CREATE_IN_PROGRESS', 'UPDATE_IN_PROGRESS']
  65. retries: 300
  66. delay: 1
  67. failed_when: stack_show_status_result.stdout not in ['CREATE_COMPLETE', 'UPDATE_COMPLETE']
  68. - name: Read OpenStack Stack outputs
  69. command: 'heat stack-show openshift-ansible-{{ cluster_id }}-stack'
  70. register: stack_show_result
  71. - set_fact:
  72. parsed_outputs: "{{ stack_show_result | oo_parse_heat_stack_outputs }}"
  73. - name: Add new master instances groups and variables
  74. add_host:
  75. hostname: '{{ item[0] }}'
  76. ansible_ssh_host: '{{ item[2] }}'
  77. ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}"
  78. ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
  79. groups: 'tag_env_{{ cluster_id }}, tag_host-type_master, tag_env-host-type_{{ cluster_id }}-openshift-master, tag_sub-host-type_default'
  80. with_together:
  81. - parsed_outputs.master_names
  82. - parsed_outputs.master_ips
  83. - parsed_outputs.master_floating_ips
  84. - name: Add new node instances groups and variables
  85. add_host:
  86. hostname: '{{ item[0] }}'
  87. ansible_ssh_host: '{{ item[2] }}'
  88. ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}"
  89. ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
  90. groups: 'tag_env_{{ cluster_id }}, tag_host-type_node, tag_env-host-type_{{ cluster_id }}-openshift-node, tag_sub-host-type_compute'
  91. with_together:
  92. - parsed_outputs.node_names
  93. - parsed_outputs.node_ips
  94. - parsed_outputs.node_floating_ips
  95. - name: Add new infra instances groups and variables
  96. add_host:
  97. hostname: '{{ item[0] }}'
  98. ansible_ssh_host: '{{ item[2] }}'
  99. ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}"
  100. ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
  101. groups: 'tag_env_{{ cluster_id }}, tag_host-type_node, tag_env-host-type_{{ cluster_id }}-openshift-node, tag_sub-host-type_infra'
  102. with_together:
  103. - parsed_outputs.infra_names
  104. - parsed_outputs.infra_ips
  105. - parsed_outputs.infra_floating_ips
  106. - name: Wait for ssh
  107. wait_for:
  108. host: '{{ item }}'
  109. port: 22
  110. with_flattened:
  111. - parsed_outputs.master_floating_ips
  112. - parsed_outputs.node_floating_ips
  113. - parsed_outputs.infra_floating_ips
  114. - name: Wait for user setup
  115. command: 'ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null {{ deployment_vars[deployment_type].ssh_user }}@{{ item }} echo {{ deployment_vars[deployment_type].ssh_user }} user is setup'
  116. register: result
  117. until: result.rc == 0
  118. retries: 30
  119. delay: 1
  120. with_flattened:
  121. - parsed_outputs.master_floating_ips
  122. - parsed_outputs.node_floating_ips
  123. - parsed_outputs.infra_floating_ips
  124. - include: update.yml
  125. # Fix icmp reject iptables rules
  126. # It should be solved in openshift-sdn but unfortunately it's not the case
  127. # Mysterious
  128. - name: Configuring Nodes for RBox
  129. hosts: oo_nodes_to_config
  130. roles:
  131. - rbox-node
  132. - include: list.yml