main.yml 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. ---
  2. - name: Check status of external etcd certificatees
  3. stat:
  4. path: "{{ etcd_cert_config_dir }}/{{ item }}"
  5. with_items:
  6. - "{{ etcd_cert_prefix }}client.crt"
  7. - "{{ etcd_cert_prefix }}client.key"
  8. - "{{ etcd_cert_prefix }}ca.crt"
  9. register: g_external_etcd_cert_stat_result
  10. - set_fact:
  11. etcd_client_certs_missing: "{{ False in (g_external_etcd_cert_stat_result.results
  12. | oo_collect(attribute='stat.exists')
  13. | list) }}"
  14. - name: Ensure generated_certs directory present
  15. file:
  16. path: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}"
  17. state: directory
  18. mode: 0700
  19. when: etcd_client_certs_missing | bool
  20. delegate_to: "{{ etcd_ca_host }}"
  21. - name: Create the client csr
  22. command: >
  23. openssl req -new -keyout {{ etcd_cert_prefix }}client.key
  24. -config {{ etcd_openssl_conf }}
  25. -out {{ etcd_cert_prefix }}client.csr
  26. -reqexts {{ etcd_req_ext }} -batch -nodes
  27. -subj /CN={{ etcd_hostname }}
  28. args:
  29. chdir: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}"
  30. creates: "{{ etcd_generated_certs_dir ~ '/' ~ etcd_cert_subdir ~ '/'
  31. ~ etcd_cert_prefix ~ 'client.csr' }}"
  32. environment:
  33. SAN: "IP:{{ etcd_ip }}"
  34. when: etcd_client_certs_missing | bool
  35. delegate_to: "{{ etcd_ca_host }}"
  36. # Certificates must be signed serially in order to avoid competing
  37. # for the serial file.
  38. - name: Sign and create the client crt
  39. delegated_serial_command:
  40. command: >
  41. openssl ca -name {{ etcd_ca_name }} -config {{ etcd_openssl_conf }}
  42. -out {{ etcd_cert_prefix }}client.crt
  43. -in {{ etcd_cert_prefix }}client.csr
  44. -batch
  45. chdir: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}"
  46. creates: "{{ etcd_generated_certs_dir ~ '/' ~ etcd_cert_subdir ~ '/'
  47. ~ etcd_cert_prefix ~ 'client.crt' }}"
  48. environment:
  49. SAN: "IP:{{ etcd_ip }}"
  50. when: etcd_client_certs_missing | bool
  51. delegate_to: "{{ etcd_ca_host }}"
  52. - file:
  53. src: "{{ etcd_ca_cert }}"
  54. dest: "{{ etcd_generated_certs_dir}}/{{ etcd_cert_subdir }}/{{ etcd_cert_prefix }}ca.crt"
  55. state: hard
  56. when: etcd_client_certs_missing | bool
  57. delegate_to: "{{ etcd_ca_host }}"
  58. - name: Create local temp directory for syncing certs
  59. local_action: command mktemp -d /tmp/etcd_certificates-XXXXXXX
  60. register: g_etcd_client_mktemp
  61. changed_when: False
  62. when: etcd_client_certs_missing | bool
  63. delegate_to: localhost
  64. become: no
  65. - name: Create a tarball of the etcd certs
  66. command: >
  67. tar -czvf {{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz
  68. -C {{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }} .
  69. args:
  70. creates: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz"
  71. when: etcd_client_certs_missing | bool
  72. delegate_to: "{{ etcd_ca_host }}"
  73. - name: Retrieve the etcd cert tarballs
  74. fetch:
  75. src: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz"
  76. dest: "{{ g_etcd_client_mktemp.stdout }}/"
  77. flat: yes
  78. fail_on_missing: yes
  79. validate_checksum: yes
  80. when: etcd_client_certs_missing | bool
  81. delegate_to: "{{ etcd_ca_host }}"
  82. - name: Ensure certificate directory exists
  83. file:
  84. path: "{{ etcd_cert_config_dir }}"
  85. state: directory
  86. when: etcd_client_certs_missing | bool
  87. - name: Unarchive etcd cert tarballs
  88. unarchive:
  89. src: "{{ g_etcd_client_mktemp.stdout }}/{{ etcd_cert_subdir }}.tgz"
  90. dest: "{{ etcd_cert_config_dir }}"
  91. when: etcd_client_certs_missing | bool
  92. - file:
  93. path: "{{ etcd_cert_config_dir }}/{{ item }}"
  94. owner: root
  95. group: root
  96. mode: 0600
  97. with_items:
  98. - "{{ etcd_cert_prefix }}client.crt"
  99. - "{{ etcd_cert_prefix }}client.key"
  100. - "{{ etcd_cert_prefix }}ca.crt"
  101. when: etcd_client_certs_missing | bool
  102. - name: Delete temporary directory
  103. file: name={{ g_etcd_client_mktemp.stdout }} state=absent
  104. changed_when: False
  105. when: etcd_client_certs_missing | bool
  106. delegate_to: localhost
  107. become: no