You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
5.7 KiB

  1. ---
  2. - name: Gen_certs | create etcd cert dir
  3. file:
  4. path: "{{ etcd_cert_dir }}"
  5. group: "{{ etcd_cert_group }}"
  6. state: directory
  7. owner: "{{ etcd_owner }}"
  8. mode: "{{ etcd_cert_dir_mode }}"
  9. recurse: true
  10. - name: "Gen_certs | create etcd script dir (on {{ groups['etcd'][0] }})"
  11. file:
  12. path: "{{ etcd_script_dir }}"
  13. state: directory
  14. owner: root
  15. mode: "0700"
  16. run_once: true
  17. when: inventory_hostname == groups['etcd'][0]
  18. - name: Gen_certs | write openssl config
  19. template:
  20. src: "openssl.conf.j2"
  21. dest: "{{ etcd_config_dir }}/openssl.conf"
  22. mode: "0640"
  23. run_once: true
  24. delegate_to: "{{ groups['etcd'][0] }}"
  25. when:
  26. - gen_certs | default(false)
  27. - inventory_hostname == groups['etcd'][0]
  28. - name: Gen_certs | copy certs generation script
  29. template:
  30. src: "make-ssl-etcd.sh.j2"
  31. dest: "{{ etcd_script_dir }}/make-ssl-etcd.sh"
  32. mode: "0700"
  33. run_once: true
  34. when:
  35. - gen_certs | default(false)
  36. - inventory_hostname == groups['etcd'][0]
  37. - name: Gen_certs | run cert generation script for etcd and kube control plane nodes
  38. command: "bash -x {{ etcd_script_dir }}/make-ssl-etcd.sh -f {{ etcd_config_dir }}/openssl.conf -d {{ etcd_cert_dir }}"
  39. environment:
  40. MASTERS: "{{ groups['gen_master_certs_True'] | ansible.builtin.intersect(groups['etcd']) | join(' ') }}"
  41. HOSTS: "{{ groups['gen_node_certs_True'] | ansible.builtin.intersect(groups['kube_control_plane']) | join(' ') }}"
  42. run_once: true
  43. delegate_to: "{{ groups['etcd'][0] }}"
  44. when: gen_certs | default(false)
  45. notify: Set etcd_secret_changed
  46. - name: Gen_certs | run cert generation script for all clients
  47. command: "bash -x {{ etcd_script_dir }}/make-ssl-etcd.sh -f {{ etcd_config_dir }}/openssl.conf -d {{ etcd_cert_dir }}"
  48. environment:
  49. HOSTS: "{{ groups['gen_node_certs_True'] | ansible.builtin.intersect(groups['k8s_cluster']) | join(' ') }}"
  50. run_once: true
  51. delegate_to: "{{ groups['etcd'][0] }}"
  52. when:
  53. - kube_network_plugin in ["calico", "flannel", "cilium"] or cilium_deploy_additionally | default(false) | bool
  54. - kube_network_plugin != "calico" or calico_datastore == "etcd"
  55. - gen_certs | default(false)
  56. notify: Set etcd_secret_changed
  57. - name: Gen_certs | Gather etcd member/admin and kube_control_plane client certs from first etcd node
  58. slurp:
  59. src: "{{ item }}"
  60. register: etcd_master_certs
  61. with_items:
  62. - "{{ etcd_cert_dir }}/ca.pem"
  63. - "{{ etcd_cert_dir }}/ca-key.pem"
  64. - "[{% for node in groups['etcd'] %}
  65. '{{ etcd_cert_dir }}/admin-{{ node }}.pem',
  66. '{{ etcd_cert_dir }}/admin-{{ node }}-key.pem',
  67. '{{ etcd_cert_dir }}/member-{{ node }}.pem',
  68. '{{ etcd_cert_dir }}/member-{{ node }}-key.pem',
  69. {% endfor %}]"
  70. - "[{% for node in (groups['kube_control_plane']) %}
  71. '{{ etcd_cert_dir }}/node-{{ node }}.pem',
  72. '{{ etcd_cert_dir }}/node-{{ node }}-key.pem',
  73. {% endfor %}]"
  74. delegate_to: "{{ groups['etcd'][0] }}"
  75. when:
  76. - inventory_hostname in groups['etcd']
  77. - sync_certs | default(false)
  78. - inventory_hostname != groups['etcd'][0]
  79. notify: Set etcd_secret_changed
  80. - name: Gen_certs | Write etcd member/admin and kube_control_plane client certs to other etcd nodes
  81. copy:
  82. dest: "{{ item.item }}"
  83. content: "{{ item.content | b64decode }}"
  84. group: "{{ etcd_cert_group }}"
  85. owner: "{{ etcd_owner }}"
  86. mode: "0640"
  87. with_items: "{{ etcd_master_certs.results }}"
  88. when:
  89. - inventory_hostname in groups['etcd']
  90. - sync_certs | default(false)
  91. - inventory_hostname != groups['etcd'][0]
  92. loop_control:
  93. label: "{{ item.item }}"
  94. - name: Gen_certs | Gather node certs from first etcd node
  95. slurp:
  96. src: "{{ item }}"
  97. register: etcd_master_node_certs
  98. with_items:
  99. - "[{% for node in groups['k8s_cluster'] %}
  100. '{{ etcd_cert_dir }}/node-{{ node }}.pem',
  101. '{{ etcd_cert_dir }}/node-{{ node }}-key.pem',
  102. {% endfor %}]"
  103. delegate_to: "{{ groups['etcd'][0] }}"
  104. when:
  105. - inventory_hostname in groups['etcd']
  106. - inventory_hostname != groups['etcd'][0]
  107. - kube_network_plugin in ["calico", "flannel", "cilium"] or cilium_deploy_additionally | default(false) | bool
  108. - kube_network_plugin != "calico" or calico_datastore == "etcd"
  109. notify: Set etcd_secret_changed
  110. - name: Gen_certs | Write node certs to other etcd nodes
  111. copy:
  112. dest: "{{ item.item }}"
  113. content: "{{ item.content | b64decode }}"
  114. group: "{{ etcd_cert_group }}"
  115. owner: "{{ etcd_owner }}"
  116. mode: "0640"
  117. with_items: "{{ etcd_master_node_certs.results }}"
  118. when:
  119. - inventory_hostname in groups['etcd']
  120. - inventory_hostname != groups['etcd'][0]
  121. - kube_network_plugin in ["calico", "flannel", "cilium"] or cilium_deploy_additionally | default(false) | bool
  122. - kube_network_plugin != "calico" or calico_datastore == "etcd"
  123. loop_control:
  124. label: "{{ item.item }}"
  125. - name: Gen_certs | Generate etcd certs
  126. include_tasks: gen_nodes_certs_script.yml
  127. when:
  128. - inventory_hostname in groups['kube_control_plane'] and
  129. sync_certs | default(false) and inventory_hostname not in groups['etcd']
  130. - name: Gen_certs | Generate etcd certs on nodes if needed
  131. include_tasks: gen_nodes_certs_script.yml
  132. when:
  133. - kube_network_plugin in ["calico", "flannel", "cilium"] or cilium_deploy_additionally | default(false) | bool
  134. - kube_network_plugin != "calico" or calico_datastore == "etcd"
  135. - inventory_hostname in groups['k8s_cluster'] and
  136. sync_certs | default(false) and inventory_hostname not in groups['etcd']
  137. - name: Gen_certs | check certificate permissions
  138. file:
  139. path: "{{ etcd_cert_dir }}"
  140. group: "{{ etcd_cert_group }}"
  141. state: directory
  142. owner: "{{ etcd_owner }}"
  143. mode: "{{ etcd_cert_dir_mode }}"
  144. recurse: true