---
# Prior to 3.6, openshift-ansible created etcd serving certificates
# without a SubjectAlternativeName entry for the system hostname. The
# SAN list in Go 1.8 is now (correctly) authoritative and since
# openshift-ansible configures masters to talk to etcd hostnames
# rather than IP addresses, we must correct etcd certificates.
#
# This play examines the etcd serving certificate SANs on each etcd
# host and records whether or not the system hostname is missing.
- name: Examine etcd serving certificate SAN
  hosts: oo_etcd_to_config
  tasks:
  - slurp:
      src: /etc/etcd/server.crt
    register: etcd_serving_cert
  - set_fact:
      __etcd_cert_lacks_hostname: "{{ (openshift.common.hostname not in (etcd_serving_cert.content | b64decode | lib_utils_oo_parse_certificate_san)) | bool }}"

# Redeploy etcd certificates when hostnames were missing from etcd
# serving certificate SANs.
- import_playbook: redeploy-certificates.yml
  when:
  - true in hostvars | lib_utils_oo_select_keys(groups['oo_etcd_to_config']) | lib_utils_oo_collect('__etcd_cert_lacks_hostname') | default([false])

- import_playbook: restart.yml
  vars:
    g_etcd_certificates_expired: "{{ ('expired' in (hostvars | lib_utils_oo_select_keys(groups['etcd']) | lib_utils_oo_collect('check_results.check_results.etcd') | lib_utils_oo_collect('health'))) | bool }}"
  when:
  - true in hostvars | lib_utils_oo_select_keys(groups['oo_etcd_to_config']) | lib_utils_oo_collect('__etcd_cert_lacks_hostname') | default([false])

- import_playbook: ../../openshift-master/private/restart.yml
  when:
  - true in hostvars | lib_utils_oo_select_keys(groups['oo_etcd_to_config']) | lib_utils_oo_collect('__etcd_cert_lacks_hostname') | default([false])

# For 1.4/3.4 we want to upgrade everyone to etcd-3.0. etcd docs say to
# upgrade from 2.0.x to 2.1.x to 2.2.x to 2.3.x to 3.0.x. While this is a tedius
# task for RHEL and CENTOS it's simply not possible in Fedora unless you've
# mirrored packages on your own because only the GA and latest versions are
# available in the repos. So for Fedora we'll simply skip this, sorry.

- name: Backup etcd before upgrading anything
  import_playbook: upgrade_backup.yml
  vars:
    etcd_backup_tag: "pre-upgrade-"
  when: openshift_etcd_backup | default(true) | bool

- name: Drop etcdctl profiles
  hosts: oo_etcd_hosts_to_upgrade
  tasks:
  - import_role:
      name: etcd
      tasks_from: drop_etcdctl.yml

- name: Perform etcd upgrade
  import_playbook: upgrade_step.yml
  when: openshift_etcd_upgrade | default(true) | bool

- name: Backup etcd
  import_playbook: upgrade_backup.yml
  vars:
    etcd_backup_tag: "post-3.0-"
  when: openshift_etcd_backup | default(true) | bool
