redeploy-certificates.yml 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. ---
  2. - include: evaluate_groups.yml
  3. - include: initialize_facts.yml
  4. - include: initialize_openshift_version.yml
  5. - name: Load openshift_facts
  6. hosts: oo_etcd_to_config:oo_masters_to_config:oo_nodes_to_config
  7. roles:
  8. - openshift_facts
  9. - name: Redeploy etcd certificates
  10. hosts: oo_etcd_to_config
  11. any_errors_fatal: true
  12. vars:
  13. etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}"
  14. etcd_conf_dir: /etc/etcd
  15. etcd_generated_certs_dir: "{{ etcd_conf_dir }}/generated_certs"
  16. pre_tasks:
  17. - stat:
  18. path: "{{ etcd_generated_certs_dir }}"
  19. register: etcd_generated_certs_dir_stat
  20. - name: Backup etcd certificates
  21. command: >
  22. tar -czvf /etc/etcd/etcd-certificate-backup-{{ ansible_date_time.epoch }}.tgz
  23. {{ etcd_conf_dir }}/ca.crt
  24. {{ etcd_conf_dir }}/ca
  25. {{ etcd_generated_certs_dir }}
  26. when: etcd_generated_certs_dir_stat.stat.exists
  27. delegate_to: "{{ etcd_ca_host }}"
  28. run_once: true
  29. - name: Remove existing etcd certificates
  30. file:
  31. path: "{{ item }}"
  32. state: absent
  33. with_items:
  34. - "{{ etcd_conf_dir }}/ca.crt"
  35. - "{{ etcd_conf_dir }}/ca"
  36. - "{{ etcd_generated_certs_dir }}"
  37. roles:
  38. - role: openshift_etcd_server_certificates
  39. etcd_peers: "{{ groups.oo_etcd_to_config | default([], true) }}"
  40. etcd_certificates_etcd_hosts: "{{ groups.oo_etcd_to_config | default([], true) }}"
  41. etcd_certificates_redeploy: true
  42. - name: Redeploy master certificates
  43. hosts: oo_masters_to_config
  44. any_errors_fatal: true
  45. vars:
  46. openshift_ca_host: "{{ groups.oo_first_master.0 }}"
  47. openshift_master_count: "{{ openshift.master.master_count | default(groups.oo_masters | length) }}"
  48. pre_tasks:
  49. # set_fact task copied from playbooks/common/openshift-master/config.yml
  50. # so that openshift_master_default_subdomain has a default value of ""
  51. # (emptry string). openshift_master_default_subdomain must have a default
  52. # value for openshift_master_facts to set metrics_public_url.
  53. # TODO: clean this up.
  54. - set_fact:
  55. openshift_master_default_subdomain: "{{ lookup('oo_option', 'openshift_master_default_subdomain') | default(None, true) }}"
  56. when: openshift_master_default_subdomain is not defined
  57. - stat:
  58. path: "{{ openshift_generated_configs_dir }}"
  59. register: openshift_generated_configs_dir_stat
  60. - name: Backup generated certificate and config directories
  61. command: >
  62. tar -czvf /etc/origin/master-node-cert-config-backup-{{ ansible_date_time.epoch }}.tgz
  63. {{ openshift_generated_configs_dir }}
  64. {{ openshift.common.config_base }}/master
  65. when: openshift_generated_configs_dir_stat.stat.exists
  66. delegate_to: "{{ openshift_ca_host }}"
  67. run_once: true
  68. - name: Remove generated certificate directories
  69. file:
  70. path: "{{ item }}"
  71. state: absent
  72. with_items:
  73. - "{{ openshift_generated_configs_dir }}"
  74. - name: Remove generated certificates
  75. file:
  76. path: "{{ openshift.common.config_base }}/master/{{ item }}"
  77. state: absent
  78. with_items:
  79. - "{{ hostvars[inventory_hostname] | certificates_to_synchronize(include_keys=false) }}"
  80. - "etcd.server.crt"
  81. - "etcd.server.key"
  82. - "master.etcd-client.crt"
  83. - "master.etcd-client.key"
  84. - "master.server.crt"
  85. - "master.server.key"
  86. - "openshift-master.crt"
  87. - "openshift-master.key"
  88. - "openshift-master.kubeconfig"
  89. - name: Remove CA certificate
  90. file:
  91. path: "{{ openshift.common.config_base }}/master/{{ item }}"
  92. state: absent
  93. when: openshift_certificates_redeploy_ca | default(false) | bool
  94. with_items:
  95. - "ca.crt"
  96. - "ca.key"
  97. - "ca.serial.txt"
  98. - "ca-bundle.crt"
  99. roles:
  100. - role: openshift_master_certificates
  101. openshift_master_etcd_hosts: "{{ hostvars
  102. | oo_select_keys(groups['oo_etcd_to_config'] | default([]))
  103. | oo_collect('openshift.common.hostname')
  104. | default(none, true) }}"
  105. openshift_certificates_redeploy: true
  106. - role: openshift_etcd_client_certificates
  107. etcd_certificates_redeploy: true
  108. etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}"
  109. etcd_cert_subdir: "openshift-master-{{ openshift.common.hostname }}"
  110. etcd_cert_config_dir: "{{ openshift.common.config_base }}/master"
  111. etcd_cert_prefix: "master.etcd-"
  112. when: groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config
  113. - name: Redeploy node certificates
  114. hosts: oo_nodes_to_config
  115. any_errors_fatal: true
  116. pre_tasks:
  117. - name: Remove CA certificate
  118. file:
  119. path: "{{ item }}"
  120. state: absent
  121. with_items:
  122. - "{{ openshift.common.config_base }}/node/ca.crt"
  123. roles:
  124. - role: openshift_node_certificates
  125. openshift_node_master_api_url: "{{ hostvars[groups.oo_first_master.0].openshift.master.api_url }}"
  126. openshift_ca_host: "{{ groups.oo_first_master.0 }}"
  127. openshift_certificates_redeploy: true
  128. - name: Restart etcd
  129. hosts: oo_etcd_to_config
  130. tasks:
  131. - name: restart etcd
  132. service:
  133. name: "{{ 'etcd' if not openshift.common.is_containerized | bool else 'etcd_container' }}"
  134. state: restarted
  135. - name: Stop master services
  136. hosts: oo_masters_to_config
  137. vars:
  138. openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}"
  139. tasks:
  140. - name: stop master
  141. service: name={{ openshift.common.service_type }}-master state=stopped
  142. when: not openshift_master_ha | bool
  143. - name: stop master api
  144. service: name={{ openshift.common.service_type }}-master-api state=stopped
  145. when: openshift_master_ha | bool and openshift_master_cluster_method == 'native'
  146. - name: stop master controllers
  147. service: name={{ openshift.common.service_type }}-master-controllers state=stopped
  148. when: openshift_master_ha | bool and openshift_master_cluster_method == 'native'
  149. - name: Start master services
  150. hosts: oo_masters_to_config
  151. serial: 1
  152. vars:
  153. openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}"
  154. tasks:
  155. - name: start master
  156. service: name={{ openshift.common.service_type }}-master state=started
  157. when: not openshift_master_ha | bool
  158. - name: start master api
  159. service: name={{ openshift.common.service_type }}-master-api state=started
  160. when: openshift_master_ha | bool and openshift_master_cluster_method == 'native'
  161. - name: start master controllers
  162. service: name={{ openshift.common.service_type }}-master-controllers state=started
  163. when: openshift_master_ha | bool and openshift_master_cluster_method == 'native'
  164. - name: Restart masters (pacemaker)
  165. hosts: oo_first_master
  166. vars:
  167. openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}"
  168. tasks:
  169. - name: restart master
  170. command: pcs resource restart master
  171. when: openshift_master_ha | bool and openshift_master_cluster_method == 'pacemaker'
  172. - name: Restart nodes
  173. hosts: oo_nodes_to_config
  174. tasks:
  175. - name: restart node
  176. service: name={{ openshift.common.service_type }}-node state=restarted
  177. - name: Copy admin client config(s)
  178. hosts: oo_first_master
  179. tasks:
  180. - name: Create temp directory for kubeconfig
  181. command: mktemp -d /tmp/openshift-ansible-XXXXXX
  182. register: mktemp
  183. changed_when: False
  184. - name: Copy admin client config(s)
  185. command: >
  186. cp {{ openshift.common.config_base }}/master//admin.kubeconfig {{ mktemp.stdout }}/admin.kubeconfig
  187. changed_when: False
  188. - name: Serially drain all nodes to trigger redeployments
  189. hosts: oo_nodes_to_config
  190. serial: 1
  191. any_errors_fatal: true
  192. tasks:
  193. - name: Determine if node is currently scheduleable
  194. command: >
  195. {{ openshift.common.client_binary }} --config={{ hostvars[groups.oo_first_master.0].mktemp.stdout }}/admin.kubeconfig
  196. get node {{ openshift.node.nodename }} -o json
  197. register: node_output
  198. when: openshift_certificates_redeploy_ca | default(false) | bool
  199. delegate_to: "{{ groups.oo_first_master.0 }}"
  200. changed_when: false
  201. - set_fact:
  202. was_schedulable: "{{ 'unschedulable' not in (node_output.stdout | from_json).spec }}"
  203. when: openshift_certificates_redeploy_ca | default(false) | bool
  204. - name: Prepare for node draining
  205. command: >
  206. {{ openshift.common.client_binary }} adm --config={{ hostvars[groups.oo_first_master.0].mktemp.stdout }}/admin.kubeconfig
  207. manage-node {{ openshift.node.nodename }}
  208. --schedulable=false
  209. delegate_to: "{{ groups.oo_first_master.0 }}"
  210. when: openshift_certificates_redeploy_ca | default(false) | bool and was_schedulable | bool
  211. - name: Drain node
  212. command: >
  213. {{ openshift.common.admin_binary }} --config={{ hostvars[groups.oo_first_master.0].mktemp.stdout }}/admin.kubeconfig
  214. drain {{ openshift.node.nodename }} --force --delete-local-data
  215. delegate_to: "{{ groups.oo_first_master.0 }}"
  216. when: openshift_certificates_redeploy_ca | default(false) | bool and was_schedulable | bool
  217. - name: Set node schedulability
  218. command: >
  219. {{ openshift.common.client_binary }} adm --config={{ hostvars[groups.oo_first_master.0].mktemp.stdout }}/admin.kubeconfig
  220. manage-node {{ openshift.node.nodename }} --schedulable=true
  221. delegate_to: "{{ groups.oo_first_master.0 }}"
  222. when: openshift_certificates_redeploy_ca | default(false) | bool and was_schedulable | bool
  223. - name: Delete temporary directory
  224. hosts: oo_first_master
  225. tasks:
  226. - name: Delete temp directory
  227. file:
  228. name: "{{ mktemp.stdout }}"
  229. state: absent
  230. changed_when: False