--- - name: Check cert expirys hosts: oo_etcd_to_config:oo_masters_to_config vars: openshift_certificate_expiry_show_all: yes roles: # Sets 'check_results' per host which contains health status for # etcd, master and node certificates. We will use 'check_results' # to determine if any certificates were expired prior to running # this playbook. Service restarts will be skipped if any # certificates were previously expired. - role: openshift_certificate_expiry - name: Backup existing etcd CA certificate directories hosts: oo_etcd_to_config roles: - role: etcd_common r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" tasks: - name: Determine if CA certificate directory exists stat: path: "{{ etcd_ca_dir }}" register: etcd_ca_certs_dir_stat - name: Backup generated etcd certificates command: > tar -czf {{ etcd_conf_dir }}/etcd-ca-certificate-backup-{{ ansible_date_time.epoch }}.tgz {{ etcd_ca_dir }} args: warn: no when: etcd_ca_certs_dir_stat.stat.exists | bool - name: Remove CA certificate directory file: path: "{{ etcd_ca_dir }}" state: absent when: etcd_ca_certs_dir_stat.stat.exists | bool - name: Generate new etcd CA hosts: oo_first_etcd roles: - role: openshift_etcd_ca etcd_peers: "{{ groups.oo_etcd_to_config | default([], true) }}" etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}" etcd_certificates_etcd_hosts: "{{ groups.oo_etcd_to_config | default([], true) }}" - name: Create temp directory for syncing certs hosts: localhost connection: local become: no gather_facts: no tasks: - name: Create local temp directory for syncing certs local_action: command mktemp -d /tmp/openshift-ansible-XXXXXXX register: g_etcd_mktemp changed_when: false - name: Distribute etcd CA to etcd hosts hosts: oo_etcd_to_config vars: etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}" roles: - role: etcd_common r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" tasks: - name: Create a tarball of the etcd ca certs command: > tar -czvf {{ etcd_conf_dir }}/{{ etcd_ca_name }}.tgz -C {{ etcd_ca_dir }} . args: creates: "{{ etcd_conf_dir }}/{{ etcd_ca_name }}.tgz" warn: no delegate_to: "{{ etcd_ca_host }}" run_once: true - name: Retrieve etcd ca cert tarball fetch: src: "{{ etcd_conf_dir }}/{{ etcd_ca_name }}.tgz" dest: "{{ hostvars['localhost'].g_etcd_mktemp.stdout }}/" flat: yes fail_on_missing: yes validate_checksum: yes delegate_to: "{{ etcd_ca_host }}" run_once: true - name: Ensure ca directory exists file: path: "{{ etcd_ca_dir }}" state: directory - name: Unarchive etcd ca cert tarballs unarchive: src: "{{ hostvars['localhost'].g_etcd_mktemp.stdout }}/{{ etcd_ca_name }}.tgz" dest: "{{ etcd_ca_dir }}" - name: Read current etcd CA slurp: src: "{{ etcd_conf_dir }}/ca.crt" register: g_current_etcd_ca_output - name: Read new etcd CA slurp: src: "{{ etcd_ca_dir }}/ca.crt" register: g_new_etcd_ca_output - copy: content: "{{ (g_new_etcd_ca_output.content|b64decode) + (g_current_etcd_ca_output.content|b64decode) }}" dest: "{{ item }}/ca.crt" with_items: - "{{ etcd_conf_dir }}" - "{{ etcd_ca_dir }}" - include: ../../openshift-etcd/restart.yml # Do not restart etcd when etcd certificates were previously expired. when: ('expired' not in (hostvars | oo_select_keys(groups['etcd']) | oo_collect('check_results.check_results.etcd') | oo_collect('health'))) - name: Retrieve etcd CA certificate hosts: oo_first_etcd roles: - role: etcd_common r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" tasks: - name: Retrieve etcd CA certificate fetch: src: "{{ etcd_conf_dir }}/ca.crt" dest: "{{ hostvars['localhost'].g_etcd_mktemp.stdout }}/" flat: yes fail_on_missing: yes validate_checksum: yes - name: Distribute etcd CA to masters hosts: oo_masters_to_config vars: openshift_ca_host: "{{ groups.oo_first_master.0 }}" tasks: - name: Deploy etcd CA copy: src: "{{ hostvars['localhost'].g_etcd_mktemp.stdout }}/ca.crt" dest: "{{ openshift.common.config_base }}/master/master.etcd-ca.crt" when: groups.oo_etcd_to_config | default([]) | length > 0 - name: Delete temporary directory on localhost hosts: localhost connection: local become: no gather_facts: no tasks: - file: name: "{{ g_etcd_mktemp.stdout }}" state: absent changed_when: false - include: ../../openshift-master/restart.yml # Do not restart masters when master certificates were previously expired. when: ('expired' not in hostvars | oo_select_keys(groups['oo_masters_to_config']) | oo_collect('check_results.check_results.ocp_certs') | oo_collect('health', {'path':hostvars[groups.oo_first_master.0].openshift.common.config_base ~ "/master/master.server.crt"})) and ('expired' not in hostvars | oo_select_keys(groups['oo_masters_to_config']) | oo_collect('check_results.check_results.ocp_certs') | oo_collect('health', {'path':hostvars[groups.oo_first_master.0].openshift.common.config_base ~ "/master/ca-bundle.crt"}))