main.yml 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. ---
  2. - name: Create GCP network
  3. gcp_compute_network:
  4. auth_kind: serviceaccount
  5. scopes:
  6. - https://www.googleapis.com/auth/compute
  7. service_account_file: "{{ openshift_gcp_iam_service_account_keyfile }}"
  8. project: "{{ openshift_gcp_project }}"
  9. name: "{{ openshift_gcp_network_name }}"
  10. state: present
  11. register: network
  12. - name: Create GCP firewall
  13. gcp_compute_firewall:
  14. auth_kind: serviceaccount
  15. scopes:
  16. - https://www.googleapis.com/auth/compute
  17. service_account_file: "{{ openshift_gcp_iam_service_account_keyfile }}"
  18. project: "{{ openshift_gcp_project }}"
  19. name: "{{ openshift_gcp_prefix }}{{ item.rule }}"
  20. allowed: "{{ item.allowed }}"
  21. network: "{{ network.selfLink }}"
  22. target_tags: "{{ item.target_tags | default(omit) }}"
  23. source_tags: "{{ item.source_tags | default(omit) }}"
  24. state: present
  25. with_items: "{{ openshift_gcp_firewall_rules }}"
  26. - import_tasks: provision_ssh_keys.yml
  27. - name: Find GCP image
  28. gcp_compute_image_facts:
  29. auth_kind: serviceaccount
  30. scopes:
  31. - https://www.googleapis.com/auth/compute
  32. service_account_file: "{{ openshift_gcp_iam_service_account_keyfile }}"
  33. project: "{{ openshift_gcp_project }}"
  34. filters:
  35. - "family = {{ openshift_gcp_image }}"
  36. register: gcp_node_image
  37. - name: Provision GCP instance templates
  38. gcp_compute_instance_template:
  39. auth_kind: serviceaccount
  40. scopes:
  41. - https://www.googleapis.com/auth/compute
  42. service_account_file: "{{ openshift_gcp_iam_service_account_keyfile }}"
  43. project: "{{ openshift_gcp_project }}"
  44. name: "{{ openshift_gcp_prefix }}instance-template-{{ item.name }}"
  45. properties:
  46. machine_type: "{{ item.machine_type }}"
  47. network_interfaces:
  48. - network: "{{ network }}"
  49. access_configs:
  50. - name: "{{ openshift_gcp_prefix }}instance-template-{{ item.name }}-config"
  51. type: 'ONE_TO_ONE_NAT'
  52. disks:
  53. - auto_delete: true
  54. boot: true
  55. initialize_params:
  56. disk_size_gb: "{{ item.boot_disk_size }}"
  57. source_image: "{{ gcp_node_image['items'][0].selfLink }}"
  58. metadata:
  59. "cluster-id": "{{ openshift_gcp_prefix + openshift_gcp_clusterid }}"
  60. "node-group": "{{ item.name }}"
  61. tags:
  62. items:
  63. - "ocp"
  64. - "{{ openshift_gcp_prefix }}ocp"
  65. - "{{ item.tags }}"
  66. state: present
  67. with_items: "{{ openshift_gcp_node_group_config }}"
  68. register: instance_template
  69. - name: Create GCP Instance Groups
  70. gcp_compute_instance_group_manager:
  71. auth_kind: serviceaccount
  72. scopes:
  73. - https://www.googleapis.com/auth/compute
  74. service_account_file: "{{ openshift_gcp_iam_service_account_keyfile }}"
  75. project: "{{ openshift_gcp_project }}"
  76. zone: "{{ openshift_gcp_zone }}"
  77. name: "{{ openshift_gcp_prefix }}ig-{{ item.item.suffix }}"
  78. base_instance_name: "{{ openshift_gcp_prefix }}ig-{{ item.item.suffix }}"
  79. instance_template: "{{ item }}"
  80. target_size: "{{ item.item.scale | int}}"
  81. named_ports:
  82. - name: "{{ openshift_gcp_prefix }}port-kube-api"
  83. port: "{{ openshift_gcp_kubernetes_api_port }}"
  84. - name: "{{ openshift_gcp_prefix }}port-openshift-api"
  85. port: "{{ openshift_master_api_port }}"
  86. state: present
  87. with_items: "{{ instance_template.results }}"
  88. register: instance_groups
  89. - name: Get master instance group
  90. gcp_compute_instance_group_facts:
  91. auth_kind: serviceaccount
  92. scopes:
  93. - https://www.googleapis.com/auth/compute
  94. service_account_file: "{{ openshift_gcp_iam_service_account_keyfile }}"
  95. project: "{{ openshift_gcp_project }}"
  96. zone: "{{ openshift_gcp_zone }}"
  97. filters:
  98. - name = "{{ openshift_gcp_prefix }}ig-m"
  99. register: master_instance_group
  100. - set_fact:
  101. master_instance_group: "{{ master_instance_group['items'][0] }}"
  102. - name: Wait for master instance group to start all instances
  103. gcp_compute_instance_group_manager_facts:
  104. auth_kind: serviceaccount
  105. scopes:
  106. - https://www.googleapis.com/auth/compute
  107. service_account_file: "{{ openshift_gcp_iam_service_account_keyfile }}"
  108. project: "{{ openshift_gcp_project }}"
  109. zone: "{{ openshift_gcp_zone }}"
  110. filters: "name = {{ master_instance_group['name'] }}"
  111. register: master_group_result
  112. # Wait for 3 minutes
  113. retries: 36
  114. delay: 5
  115. until:
  116. - "master_group_result['items'][0]['currentActions']['none'] == master_group_result['items'][0]['targetSize']"
  117. - name: Collect a list of instances
  118. gcp_compute_instance_facts:
  119. auth_kind: serviceaccount
  120. scopes:
  121. - https://www.googleapis.com/auth/compute
  122. service_account_file: "{{ openshift_gcp_iam_service_account_keyfile }}"
  123. project: "{{ openshift_gcp_project }}"
  124. zone: "{{ openshift_gcp_zone }}"
  125. register: all_instances
  126. - name: Filter instances to fetch bootstrap
  127. set_fact:
  128. bootstrap_instance: "{{ item }}"
  129. with_items:
  130. - "{{ all_instances['items'] }}"
  131. when:
  132. - "'tags' in item"
  133. - "'items' in item['tags']"
  134. - "cluster_tag in item['tags']['items']"
  135. - "'ocp-bootstrap' in item['tags']['items']"
  136. vars:
  137. cluster_tag: "{{ openshift_gcp_prefix }}ocp"
  138. - name: Filter instances to fetch masters
  139. set_fact:
  140. master_instances: "{{ master_instances | default([]) }} + [ {{ item }} ]"
  141. with_items:
  142. - "{{ all_instances['items'] }}"
  143. when:
  144. - "'tags' in item"
  145. - "'items' in item['tags']"
  146. - "cluster_tag in item['tags']['items']"
  147. - "'ocp-master' in item['tags']['items']"
  148. vars:
  149. cluster_tag: "{{ openshift_gcp_prefix }}ocp"
  150. - set_fact:
  151. etcd_discovery_targets: "{{ etcd_discovery_targets | default('') }} '0 0 2380 {{ entry_name }}'"
  152. master_external_ips: "{{ master_external_ips | default('') }} '{{ master_ip }}'"
  153. with_indexed_items: "{{ master_instances }}"
  154. vars:
  155. entry_name: "{{ openshift_gcp_prefix }}etcd-{{ item.0 }}.{{ public_hosted_zone }}."
  156. master_ip: "{{ item.1.networkInterfaces[0].accessConfigs[0].natIP }}"
  157. - name: Templatize DNS script
  158. template: src=additional_settings.j2.sh dest=/tmp/additional_settings.sh mode=u+rx
  159. - name: Run addition provision GCP script
  160. command: /tmp/additional_settings.sh
  161. args:
  162. chdir: "{{ files_dir }}"