main.yml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. ---
  2. # TODO: add ability to configure certificates given either a local file to
  3. # point to or certificate contents, set in default cert locations.
  4. # Authentication Variable Validation
  5. # TODO: validate the different identity provider kinds as well
  6. - fail:
  7. msg: >
  8. Invalid OAuth grant method: {{ openshift_master_oauth_grant_method }}
  9. when:
  10. - openshift_master_oauth_grant_method not in openshift_master_valid_grant_methods
  11. - import_tasks: pre_pull.yml
  12. - name: Open up firewall ports
  13. import_tasks: firewall.yml
  14. - name: Prepare static pod scripts
  15. import_tasks: static_shim.yml
  16. - name: Create r_openshift_master_data_dir
  17. file:
  18. path: "{{ r_openshift_master_data_dir }}"
  19. state: directory
  20. mode: 0755
  21. owner: root
  22. group: root
  23. - import_tasks: registry_auth.yml
  24. - name: Create config parent directory if it does not exist
  25. file:
  26. path: "/etc/origin/master"
  27. state: directory
  28. - name: Copy recyler pod to config directory
  29. template:
  30. src: "recycler_pod.yaml.j2"
  31. dest: "/etc/origin/master/recycler_pod.yaml"
  32. - name: Create flex volume directory on host
  33. file:
  34. state: directory
  35. path: "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
  36. mode: '0750'
  37. - name: Create the policy file if it does not already exist
  38. command: >
  39. {{ openshift_client_binary }} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  40. adm create-bootstrap-policy-file
  41. --filename={{ openshift_master_policy }}
  42. args:
  43. creates: "{{ openshift_master_policy }}"
  44. - name: Create the scheduler config
  45. copy:
  46. content: "{{ scheduler_config | to_nice_json }}"
  47. dest: "{{ openshift_master_scheduler_conf }}"
  48. backup: true
  49. - import_tasks: htpass_provider.yml
  50. - name: Create the ldap ca file if needed
  51. copy:
  52. dest: "/etc/origin/master/{{ item.name }}_ldap_ca.crt"
  53. content: "{{ openshift.master.ldap_ca }}"
  54. mode: 0600
  55. backup: yes
  56. when:
  57. - openshift.master.ldap_ca is defined
  58. - item.kind == 'LDAPPasswordIdentityProvider'
  59. with_items: "{{ openshift_master_identity_providers }}"
  60. - name: Create the openid ca file if needed
  61. copy:
  62. dest: "/etc/origin/master/{{ item.name }}_openid_ca.crt"
  63. content: "{{ openshift.master.openid_ca }}"
  64. mode: 0600
  65. backup: yes
  66. when:
  67. - openshift.master.openid_ca is defined
  68. - item.kind == 'OpenIDIdentityProvider'
  69. with_items: "{{ openshift_master_identity_providers }}"
  70. - name: Create the GitHub (Enterprise) ca file if needed
  71. copy:
  72. dest: "/etc/origin/master/{{ item.name }}_github_ca.crt"
  73. content: "{{ openshift.master.github_ca }}"
  74. mode: 0600
  75. backup: yes
  76. when:
  77. - openshift.master.github_ca is defined
  78. - item.kind == 'GitHubIdentityProvider'
  79. with_items: "{{ openshift_master_identity_providers }}"
  80. - name: Create the request header ca file if needed
  81. copy:
  82. dest: "/etc/origin/master/{{ item.name }}_request_header_ca.crt"
  83. content: "{{ openshift_master_request_header_ca }}"
  84. mode: 0600
  85. backup: yes
  86. when:
  87. - openshift_master_request_header_ca != l_osm_request_header_none
  88. - item.kind == 'RequestHeaderIdentityProvider'
  89. with_items: "{{ openshift_master_identity_providers }}"
  90. - name: Set fact of all etcd host IPs
  91. openshift_facts:
  92. role: common
  93. local_facts:
  94. no_proxy_etcd_host_ips: "{{ openshift_no_proxy_etcd_host_ips }}"
  95. - name: Create session secrets file
  96. template:
  97. dest: "{{ openshift_master_session_secrets_file }}"
  98. src: sessionSecretsFile.yaml.v1.j2
  99. owner: root
  100. group: root
  101. mode: 0600
  102. - set_fact:
  103. # translate_idps is a custom filter in role lib_utils
  104. translated_identity_providers: "{{ openshift_master_identity_providers | translate_idps('v1') }}"
  105. # TODO: add the validate parameter when there is a validation command to run
  106. - name: Create master config
  107. template:
  108. dest: "{{ openshift_master_config_file }}"
  109. src: master.yaml.v1.j2
  110. backup: true
  111. owner: root
  112. group: root
  113. mode: 0600
  114. - import_tasks: set_loopback_context.yml
  115. - name: Create the master service env file
  116. template:
  117. src: "master.env.j2"
  118. dest: /etc/origin/master/master.env
  119. backup: true
  120. - import_tasks: static.yml
  121. - name: Establish the default bootstrap kubeconfig for masters
  122. copy:
  123. remote_src: true
  124. src: "/etc/origin/master/admin.kubeconfig"
  125. dest: "{{ item }}"
  126. mode: 0600
  127. with_items:
  128. # bootstrap as an admin
  129. - /etc/origin/node/bootstrap.kubeconfig
  130. # copy to this location to bypass initial bootstrap request
  131. - /etc/origin/node/node.kubeconfig
  132. - import_tasks: pre_pull_poll.yml
  133. - name: Start and enable self-hosting node
  134. systemd:
  135. name: "{{ openshift_service_type }}-node"
  136. state: restarted
  137. enabled: yes
  138. register: node_start
  139. ignore_errors: yes
  140. - when: node_start is failed
  141. block:
  142. - name: Get node logs
  143. command: journalctl --no-pager -n 300 -u {{ openshift_service_type }}-node
  144. register: logs_node
  145. ignore_errors: true
  146. - debug:
  147. msg: "{{ logs_node.stdout_lines }}"
  148. - fail:
  149. msg: Node start failed.
  150. - name: Wait for control plane pods to appear
  151. oc_obj:
  152. state: list
  153. kind: pod
  154. name: "master-{{ item }}-{{ l_kubelet_node_name | lower }}"
  155. namespace: kube-system
  156. register: control_plane_pods
  157. until:
  158. - "'results' in control_plane_pods"
  159. - "'results' in control_plane_pods.results"
  160. - control_plane_pods.results.results | length > 0
  161. retries: 60
  162. delay: 5
  163. with_items:
  164. - "{{ 'etcd' if inventory_hostname in groups['oo_etcd_to_config'] else omit }}"
  165. - api
  166. - controllers
  167. ignore_errors: true
  168. - when: control_plane_pods is failed
  169. block:
  170. - name: Check status in the kube-system namespace
  171. command: >
  172. {{ openshift_client_binary }} status --config={{ openshift.common.config_base }}/master/admin.kubeconfig -n kube-system
  173. register: control_plane_status
  174. ignore_errors: true
  175. - debug:
  176. msg: "{{ control_plane_status.stdout_lines }}"
  177. - name: Get pods in the kube-system namespace
  178. command: >
  179. {{ openshift_client_binary }} get pods --config={{ openshift.common.config_base }}/master/admin.kubeconfig -n kube-system -o wide
  180. register: control_plane_pods_list
  181. ignore_errors: true
  182. - debug:
  183. msg: "{{ control_plane_pods_list.stdout_lines }}"
  184. - name: Get events in the kube-system namespace
  185. command: >
  186. {{ openshift_client_binary }} get events --config={{ openshift.common.config_base }}/master/admin.kubeconfig -n kube-system
  187. register: control_plane_events
  188. ignore_errors: true
  189. - debug:
  190. msg: "{{ control_plane_events.stdout_lines }}"
  191. - name: Get node logs
  192. command: journalctl --no-pager -n 300 -u {{ openshift_service_type }}-node
  193. register: logs_node
  194. ignore_errors: true
  195. - debug:
  196. msg: "{{ logs_node.stdout_lines }}"
  197. - name: Report control plane errors
  198. fail:
  199. msg: Control plane pods didn't come up
  200. - name: Wait for all control plane pods to become ready
  201. oc_obj:
  202. state: list
  203. kind: pod
  204. name: "master-{{ item }}-{{ l_kubelet_node_name | lower }}"
  205. namespace: kube-system
  206. register: control_plane_health
  207. until:
  208. - "'results' in control_plane_health"
  209. - "'results' in control_plane_health.results"
  210. - control_plane_health.results.results | length > 0
  211. - "'status' in control_plane_health.results.results[0]"
  212. - "'conditions' in control_plane_health.results.results[0].status"
  213. - control_plane_health.results.results[0].status.conditions | selectattr('type', 'match', '^Ready$') | map(attribute='status') | join | bool == True
  214. retries: 60
  215. delay: 5
  216. with_items:
  217. - "{{ 'etcd' if inventory_hostname in groups['oo_etcd_to_config'] else '' }}"
  218. - api
  219. - controllers
  220. when:
  221. - item != ''
  222. - when: control_plane_health is failed
  223. block:
  224. - debug:
  225. msg: "{{ control_plane_pods_list.stdout_lines }}"
  226. - name: Get events in the kube-system namespace
  227. command: >
  228. {{ openshift_client_binary }} get events --config={{ openshift.common.config_base }}/master/admin.kubeconfig -n kube-system
  229. register: control_plane_events
  230. ignore_errors: true
  231. - debug:
  232. msg: "{{ control_plane_events.stdout_lines }}"
  233. - name: Get node logs
  234. command: journalctl --no-pager -n 300 -u {{ openshift_service_type }}-node
  235. register: logs_node
  236. ignore_errors: true
  237. - debug:
  238. msg: "{{ logs_node.stdout_lines }}"
  239. - name: Get API logs
  240. command: >
  241. /usr/local/bin/master-logs api api
  242. register: control_plane_logs_api
  243. ignore_errors: true
  244. - debug:
  245. msg: "{{ control_plane_logs_api.stdout_lines }}"
  246. - name: Get controllers logs
  247. command: >
  248. /usr/local/bin/master-logs controllers controllers
  249. register: control_plane_logs_controllers
  250. ignore_errors: true
  251. - debug:
  252. msg: "{{ control_plane_logs_controllers.stdout_lines }}"
  253. - name: Get etcd logs
  254. command: >
  255. /usr/local/bin/master-logs etcd etcd
  256. register: control_plane_logs_etcd
  257. when: inventory_hostname in groups['oo_etcd_to_config']
  258. ignore_errors: true
  259. - debug:
  260. msg: "{{ control_plane_logs_controllers.stdout_lines }}"
  261. when: inventory_hostname in groups['oo_etcd_to_config']
  262. - name: Report control plane errors
  263. fail:
  264. msg: Control plane pods didn't pass health check
  265. - import_tasks: check_master_api_is_ready.yml
  266. - name: Remove oc cache to refresh a list of APIs
  267. file:
  268. path: "~/.kube/cache"
  269. state: absent