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.

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