---
- 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
  tasks:
  - include_role:
      name: etcd
      tasks_from: backup_ca_certificates
  - include_role:
      name: etcd
      tasks_from: remove_ca_certificates

- include: ../../openshift-etcd/ca.yml

- 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
  tasks:
  - include_role:
      name: etcd
      tasks_from: distribute_ca
    vars:
      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
      etcd_sync_cert_dir: "{{ hostvars['localhost'].g_etcd_mktemp.stdout }}"
      etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}"

- 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
  tasks:
  - include_role:
      name: etcd
      tasks_from: retrieve_ca_certificates
    vars:
      etcd_sync_cert_dir: "{{ hostvars['localhost'].g_etcd_mktemp.stdout }}"
      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"

- 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 or etcd certificates were previously expired.
  when:
  # masters
  - ('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"}))
  - ('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"}))
  # etcd
  - ('expired' not in (hostvars
      | oo_select_keys(groups['etcd'])
      | oo_collect('check_results.check_results.etcd')
      | oo_collect('health')))
