launch_instances.yml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. ---
  2. - set_fact:
  3. created_by: "{{ lookup('env', 'LOGNAME')|default(cluster, true) }}"
  4. docker_vol_ephemeral: "{{ lookup('env', 'os_docker_vol_ephemeral') | default(false, true) }}"
  5. env: "{{ cluster }}"
  6. env_host_type: "{{ cluster }}-openshift-{{ type }}"
  7. host_type: "{{ type }}"
  8. - set_fact:
  9. ec2_region: "{{ lookup('env', 'ec2_region')
  10. | default(deployment_vars[deployment_type].region, true) }}"
  11. when: ec2_region is not defined
  12. - set_fact:
  13. ec2_image_name: "{{ lookup('env', 'ec2_image_name')
  14. | default(deployment_vars[deployment_type].image_name, true) }}"
  15. when: ec2_image_name is not defined and ec2_image is not defined
  16. - set_fact:
  17. ec2_image: "{{ lookup('env', 'ec2_image')
  18. | default(deployment_vars[deployment_type].image, true) }}"
  19. when: ec2_image is not defined and not ec2_image_name
  20. - set_fact:
  21. ec2_instance_type: "{{ lookup('env', 'ec2_instance_type')
  22. | default(deployment_vars[deployment_type].type, true) }}"
  23. when: ec2_instance_type is not defined
  24. - set_fact:
  25. ec2_keypair: "{{ lookup('env', 'ec2_keypair')
  26. | default(deployment_vars[deployment_type].keypair, true) }}"
  27. when: ec2_keypair is not defined
  28. - set_fact:
  29. ec2_vpc_subnet: "{{ lookup('env', 'ec2_vpc_subnet')
  30. | default(deployment_vars[deployment_type].vpc_subnet, true) }}"
  31. when: ec2_vpc_subnet is not defined
  32. - set_fact:
  33. ec2_assign_public_ip: "{{ lookup('env', 'ec2_assign_public_ip')
  34. | default(deployment_vars[deployment_type].assign_public_ip, true) }}"
  35. when: ec2_assign_public_ip is not defined
  36. - set_fact:
  37. ec2_security_groups: "{{ lookup('env', 'ec2_security_groups')
  38. | default(deployment_vars[deployment_type].security_groups, true) }}"
  39. when: ec2_security_groups is not defined
  40. - name: Find amis for deployment_type
  41. ec2_ami_find:
  42. region: "{{ ec2_region }}"
  43. ami_id: "{{ ec2_image | default(omit, true) }}"
  44. name: "{{ ec2_image_name | default(omit, true) }}"
  45. register: ami_result
  46. - fail: msg="Could not find requested ami"
  47. when: not ami_result.results
  48. - set_fact:
  49. latest_ami: "{{ ami_result.results | oo_ami_selector(ec2_image_name) }}"
  50. user_data: "{{ lookup('template', '../templates/user_data.j2') if type == 'node' else None | default('omit') }}"
  51. volume_defs:
  52. master:
  53. root:
  54. volume_size: "{{ lookup('env', 'os_master_root_vol_size') | default(25, true) }}"
  55. device_type: "{{ lookup('env', 'os_master_root_vol_type') | default('gp2', true) }}"
  56. iops: "{{ lookup('env', 'os_master_root_vol_iops') | default(500, true) }}"
  57. node:
  58. root:
  59. volume_size: "{{ lookup('env', 'os_node_root_vol_size') | default(25, true) }}"
  60. device_type: "{{ lookup('env', 'os_node_root_vol_type') | default('gp2', true) }}"
  61. iops: "{{ lookup('env', 'os_node_root_vol_iops') | default(500, true) }}"
  62. docker:
  63. volume_size: "{{ lookup('env', 'os_docker_vol_size') | default(32, true) }}"
  64. device_type: "{{ lookup('env', 'os_docker_vol_type') | default('gp2', true) }}"
  65. iops: "{{ lookup('env', 'os_docker_vol_iops') | default(500, true) }}"
  66. - set_fact:
  67. volumes: "{{ volume_defs | oo_ec2_volume_definition(host_type, docker_vol_ephemeral | bool) }}"
  68. - name: Launch instance(s)
  69. ec2:
  70. state: present
  71. region: "{{ ec2_region }}"
  72. keypair: "{{ ec2_keypair }}"
  73. group: "{{ ec2_security_groups }}"
  74. instance_type: "{{ ec2_instance_type }}"
  75. image: "{{ latest_ami }}"
  76. count: "{{ instances | length }}"
  77. vpc_subnet_id: "{{ ec2_vpc_subnet | default(omit, true) }}"
  78. assign_public_ip: "{{ ec2_assign_public_ip | default(omit, true) }}"
  79. user_data: "{{ user_data }}"
  80. wait: yes
  81. instance_tags:
  82. created-by: "{{ created_by }}"
  83. environment: "{{ env }}"
  84. env: "{{ env }}"
  85. host-type: "{{ host_type }}"
  86. env-host-type: "{{ env_host_type }}"
  87. volumes: "{{ volumes }}"
  88. register: ec2
  89. - name: Add Name tag to instances
  90. ec2_tag: resource={{ item.1.id }} region={{ ec2_region }} state=present
  91. with_together:
  92. - instances
  93. - ec2.instances
  94. args:
  95. tags:
  96. Name: "{{ item.0 }}"
  97. - set_fact:
  98. instance_groups: tag_created-by_{{ created_by }}, tag_env_{{ env }}, tag_host-type_{{ host_type }}, tag_env-host-type_{{ env_host_type }}
  99. - name: Add new instances groups and variables
  100. add_host:
  101. hostname: "{{ item.0 }}"
  102. ansible_ssh_host: "{{ item.1.dns_name }}"
  103. ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}"
  104. ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
  105. groups: "{{ instance_groups }}"
  106. ec2_private_ip_address: "{{ item.1.private_ip }}"
  107. ec2_ip_address: "{{ item.1.public_ip }}"
  108. with_together:
  109. - instances
  110. - ec2.instances
  111. - name: Wait for ssh
  112. wait_for: "port=22 host={{ item.dns_name }}"
  113. with_items: ec2.instances
  114. - name: Wait for user setup
  115. command: "ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null {{ hostvars[item.0].ansible_ssh_user }}@{{ item.1.dns_name }} echo {{ hostvars[item.0].ansible_ssh_user }} user is setup"
  116. register: result
  117. until: result.rc == 0
  118. retries: 20
  119. delay: 10
  120. with_together:
  121. - instances
  122. - ec2.instances