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.

172 lines
5.5 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: kube
  8. mode: "{{ etcd_cert_dir_mode }}"
  9. recurse: yes
  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: yes
  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: yes
  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: yes
  34. when:
  35. - gen_certs|default(false)
  36. - inventory_hostname == groups['etcd'][0]
  37. - name: Gen_certs | run cert generation script
  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: "{% for m in groups['etcd'] %}
  41. {% if gen_master_certs[m] %}
  42. {{ m }}
  43. {% endif %}
  44. {% endfor %}"
  45. - HOSTS: "{% for h in (groups['k8s_cluster'] + groups['calico_rr']|default([]))|unique %}
  46. {% if gen_node_certs[h] %}
  47. {{ h }}
  48. {% endif %}
  49. {% endfor %}"
  50. run_once: yes
  51. delegate_to: "{{ groups['etcd'][0] }}"
  52. when: gen_certs|default(false)
  53. notify: set etcd_secret_changed
  54. - name: Gen_certs | Gather etcd member and admin certs from first etcd node
  55. slurp:
  56. src: "{{ item }}"
  57. register: etcd_master_certs
  58. with_items:
  59. - "{{ etcd_cert_dir }}/ca.pem"
  60. - "{{ etcd_cert_dir }}/ca-key.pem"
  61. - "[{% for node in groups['etcd'] %}
  62. '{{ etcd_cert_dir }}/admin-{{ node }}.pem',
  63. '{{ etcd_cert_dir }}/admin-{{ node }}-key.pem',
  64. '{{ etcd_cert_dir }}/member-{{ node }}.pem',
  65. '{{ etcd_cert_dir }}/member-{{ node }}-key.pem',
  66. {% endfor %}]"
  67. delegate_to: "{{ groups['etcd'][0] }}"
  68. when:
  69. - inventory_hostname in groups['etcd']
  70. - sync_certs|default(false)
  71. - inventory_hostname != groups['etcd'][0]
  72. notify: set etcd_secret_changed
  73. - name: Gen_certs | Write etcd member and admin certs to other etcd nodes
  74. copy:
  75. dest: "{{ item.item }}"
  76. content: "{{ item.content | b64decode }}"
  77. group: "{{ etcd_cert_group }}"
  78. owner: kube
  79. mode: 0640
  80. with_items: "{{ etcd_master_certs.results }}"
  81. when:
  82. - inventory_hostname in groups['etcd']
  83. - sync_certs|default(false)
  84. - inventory_hostname != groups['etcd'][0]
  85. loop_control:
  86. label: "{{ item.item }}"
  87. - name: Gen_certs | Gather node certs from first etcd node
  88. slurp:
  89. src: "{{ item }}"
  90. register: etcd_master_node_certs
  91. with_items:
  92. - "[{% for node in (groups['k8s_cluster'] + groups['calico_rr']|default([]))|unique %}
  93. '{{ etcd_cert_dir }}/node-{{ node }}.pem',
  94. '{{ etcd_cert_dir }}/node-{{ node }}-key.pem',
  95. {% endfor %}]"
  96. delegate_to: "{{ groups['etcd'][0] }}"
  97. when:
  98. - inventory_hostname in groups['etcd']
  99. - inventory_hostname != groups['etcd'][0]
  100. notify: set etcd_secret_changed
  101. - name: Gen_certs | Write node certs to other etcd nodes
  102. copy:
  103. dest: "{{ item.item }}"
  104. content: "{{ item.content | b64decode }}"
  105. group: "{{ etcd_cert_group }}"
  106. owner: kube
  107. mode: 0640
  108. with_items: "{{ etcd_master_node_certs.results }}"
  109. when:
  110. - inventory_hostname in groups['etcd']
  111. - inventory_hostname != groups['etcd'][0]
  112. loop_control:
  113. label: "{{ item.item }}"
  114. - name: Gen_certs | Set cert names per node
  115. set_fact:
  116. my_etcd_node_certs: [ 'ca.pem',
  117. 'node-{{ inventory_hostname }}.pem',
  118. 'node-{{ inventory_hostname }}-key.pem']
  119. tags:
  120. - facts
  121. - name: "Check_certs | Set 'sync_certs' to true on nodes"
  122. set_fact:
  123. sync_certs: true
  124. when: (('calico_rr' in groups and inventory_hostname in groups['calico_rr']) or
  125. inventory_hostname in groups['k8s_cluster']) and
  126. inventory_hostname not in groups['etcd']
  127. with_items:
  128. - "{{ my_etcd_node_certs }}"
  129. - name: Gen_certs | Gather node certs
  130. shell: "set -o pipefail && tar cfz - -C {{ etcd_cert_dir }} {{ my_etcd_node_certs|join(' ') }} | base64 --wrap=0"
  131. args:
  132. executable: /bin/bash
  133. warn: false
  134. no_log: true
  135. register: etcd_node_certs
  136. check_mode: no
  137. delegate_to: "{{ groups['etcd'][0] }}"
  138. when: (('calico_rr' in groups and inventory_hostname in groups['calico_rr']) or
  139. inventory_hostname in groups['k8s_cluster']) and
  140. sync_certs|default(false) and inventory_hostname not in groups['etcd']
  141. - name: Gen_certs | Copy certs on nodes
  142. shell: "set -o pipefail && base64 -d <<< '{{ etcd_node_certs.stdout|quote }}' | tar xz -C {{ etcd_cert_dir }}"
  143. args:
  144. executable: /bin/bash
  145. no_log: true
  146. changed_when: false
  147. check_mode: no
  148. when: (('calico_rr' in groups and inventory_hostname in groups['calico_rr']) or
  149. inventory_hostname in groups['k8s_cluster']) and
  150. sync_certs|default(false) and inventory_hostname not in groups['etcd']
  151. notify: set etcd_secret_changed
  152. - name: Gen_certs | check certificate permissions
  153. file:
  154. path: "{{ etcd_cert_dir }}"
  155. group: "{{ etcd_cert_group }}"
  156. state: directory
  157. owner: kube
  158. mode: "{{ etcd_cert_dir_mode }}"
  159. recurse: yes