123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- ---
- - name: Install etcd
- package:
- name: "etcd{{ '-' + etcd_version if etcd_version is defined else '' }}"
- state: present
- when: not etcd_is_containerized | bool
- register: result
- until: result | success
- - name: Check status of etcd certificates
- stat:
- path: "{{ item }}"
- with_items:
- - "{{ etcd_cert_config_dir }}/{{ etcd_cert_prefix }}server.crt"
- - "{{ etcd_cert_config_dir }}/{{ etcd_cert_prefix }}peer.crt"
- - "{{ etcd_cert_config_dir }}/{{ etcd_cert_prefix }}ca.crt"
- register: g_etcd_server_cert_stat_result
- when: not etcd_certificates_redeploy | default(false) | bool
- - set_fact:
- etcd_server_certs_missing: "{{ true if etcd_certificates_redeploy | default(false) | bool
- else (False in (g_etcd_server_cert_stat_result.results
- | default({})
- | oo_collect(attribute='stat.exists')
- | list)) }}"
- - name: Ensure generated_certs directory present
- file:
- path: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}"
- state: directory
- mode: 0700
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- - name: Create the server csr
- command: >
- openssl req -new -keyout {{ etcd_cert_prefix }}server.key
- -config {{ etcd_openssl_conf }}
- -out {{ etcd_cert_prefix }}server.csr
- -reqexts {{ etcd_req_ext }} -batch -nodes
- -subj /CN={{ etcd_hostname }}
- args:
- chdir: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}"
- creates: "{{ etcd_generated_certs_dir ~ '/' ~ etcd_cert_subdir ~ '/'
- ~ etcd_cert_prefix ~ 'server.csr' }}"
- environment:
- SAN: "IP:{{ etcd_ip }},DNS:{{ etcd_hostname }}"
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- # Certificates must be signed serially in order to avoid competing
- # for the serial file.
- - name: Sign and create the server crt
- delegated_serial_command:
- command: >
- openssl ca -name {{ etcd_ca_name }} -config {{ etcd_openssl_conf }}
- -out {{ etcd_cert_prefix }}server.crt
- -in {{ etcd_cert_prefix }}server.csr
- -extensions {{ etcd_ca_exts_server }} -batch
- chdir: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}"
- creates: "{{ etcd_generated_certs_dir ~ '/' ~ etcd_cert_subdir ~ '/'
- ~ etcd_cert_prefix ~ 'server.crt' }}"
- environment:
- SAN: "IP:{{ etcd_ip }}"
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- - name: Create the peer csr
- command: >
- openssl req -new -keyout {{ etcd_cert_prefix }}peer.key
- -config {{ etcd_openssl_conf }}
- -out {{ etcd_cert_prefix }}peer.csr
- -reqexts {{ etcd_req_ext }} -batch -nodes
- -subj /CN={{ etcd_hostname }}
- args:
- chdir: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}"
- creates: "{{ etcd_generated_certs_dir ~ '/' ~ etcd_cert_subdir ~ '/'
- ~ etcd_cert_prefix ~ 'peer.csr' }}"
- environment:
- SAN: "IP:{{ etcd_ip }},DNS:{{ etcd_hostname }}"
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- # Certificates must be signed serially in order to avoid competing
- # for the serial file.
- - name: Sign and create the peer crt
- delegated_serial_command:
- command: >
- openssl ca -name {{ etcd_ca_name }} -config {{ etcd_openssl_conf }}
- -out {{ etcd_cert_prefix }}peer.crt
- -in {{ etcd_cert_prefix }}peer.csr
- -extensions {{ etcd_ca_exts_peer }} -batch
- chdir: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}"
- creates: "{{ etcd_generated_certs_dir ~ '/' ~ etcd_cert_subdir ~ '/'
- ~ etcd_cert_prefix ~ 'peer.crt' }}"
- environment:
- SAN: "IP:{{ etcd_ip }}"
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- - file:
- src: "{{ etcd_ca_cert }}"
- dest: "{{ etcd_generated_certs_dir}}/{{ etcd_cert_subdir }}/{{ etcd_cert_prefix }}ca.crt"
- state: hard
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- - name: Create local temp directory for syncing certs
- local_action: command mktemp -d /tmp/etcd_certificates-XXXXXXX
- become: no
- register: g_etcd_server_mktemp
- changed_when: False
- when: etcd_server_certs_missing | bool
- - name: Create a tarball of the etcd certs
- command: >
- tar -czvf {{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz
- -C {{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }} .
- args:
- creates: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz"
- # Disables the following warning:
- # Consider using unarchive module rather than running tar
- warn: no
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- - name: Retrieve etcd cert tarball
- fetch:
- src: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz"
- dest: "{{ g_etcd_server_mktemp.stdout }}/"
- flat: yes
- fail_on_missing: yes
- validate_checksum: yes
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- - name: Ensure certificate directory exists
- file:
- path: "{{ item }}"
- state: directory
- with_items:
- - "{{ etcd_cert_config_dir }}"
- when: etcd_server_certs_missing | bool
- - name: Unarchive cert tarball
- unarchive:
- src: "{{ g_etcd_server_mktemp.stdout }}/{{ etcd_cert_subdir }}.tgz"
- dest: "{{ etcd_cert_config_dir }}"
- when: etcd_server_certs_missing | bool
- - name: Create a tarball of the etcd ca certs
- command: >
- tar -czvf {{ etcd_generated_certs_dir }}/{{ etcd_ca_name }}.tgz
- -C {{ etcd_ca_dir }} .
- args:
- creates: "{{ etcd_generated_certs_dir }}/{{ etcd_ca_name }}.tgz"
- warn: no
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- - name: Retrieve etcd ca cert tarball
- fetch:
- src: "{{ etcd_generated_certs_dir }}/{{ etcd_ca_name }}.tgz"
- dest: "{{ g_etcd_server_mktemp.stdout }}/"
- flat: yes
- fail_on_missing: yes
- validate_checksum: yes
- when: etcd_server_certs_missing | bool
- delegate_to: "{{ etcd_ca_host }}"
- - name: Ensure ca directory exists
- file:
- path: "{{ item }}"
- state: directory
- with_items:
- - "{{ etcd_ca_dir }}"
- when: etcd_server_certs_missing | bool
- - name: Delete temporary directory
- local_action: file path="{{ g_etcd_server_mktemp.stdout }}" state=absent
- become: no
- changed_when: False
- when: etcd_server_certs_missing | bool
- - name: Validate permissions on certificate files
- file:
- path: "{{ item }}"
- mode: 0600
- owner: "{{ 'etcd' if not etcd_is_containerized | bool else omit }}"
- group: "{{ 'etcd' if not etcd_is_containerized | bool else omit }}"
- when: etcd_url_scheme == 'https'
- with_items:
- - "{{ etcd_ca_file }}"
- - "{{ etcd_cert_file }}"
- - "{{ etcd_key_file }}"
- - name: Validate permissions on peer certificate files
- file:
- path: "{{ item }}"
- mode: 0600
- owner: "{{ 'etcd' if not etcd_is_containerized | bool else omit }}"
- group: "{{ 'etcd' if not etcd_is_containerized | bool else omit }}"
- when: etcd_peer_url_scheme == 'https'
- with_items:
- - "{{ etcd_peer_ca_file }}"
- - "{{ etcd_peer_cert_file }}"
- - "{{ etcd_peer_key_file }}"
- - name: Validate permissions on the config dir
- file:
- path: "{{ etcd_conf_dir }}"
- state: directory
- owner: "{{ 'etcd' if not etcd_is_containerized | bool else omit }}"
- group: "{{ 'etcd' if not etcd_is_containerized | bool else omit }}"
- mode: 0700
|