diff options
Diffstat (limited to 'playbooks/common/openshift-cluster')
| -rw-r--r-- | playbooks/common/openshift-cluster/evaluate_groups.yml | 2 | ||||
| -rw-r--r-- | playbooks/common/openshift-cluster/redeploy-certificates/etcd-ca.yml | 158 | ||||
| -rw-r--r-- | playbooks/common/openshift-cluster/redeploy-certificates/openshift-ca.yml (renamed from playbooks/common/openshift-cluster/redeploy-certificates/ca.yml) | 136 | 
3 files changed, 160 insertions, 136 deletions
| diff --git a/playbooks/common/openshift-cluster/evaluate_groups.yml b/playbooks/common/openshift-cluster/evaluate_groups.yml index 46932b27f..c28ce4c14 100644 --- a/playbooks/common/openshift-cluster/evaluate_groups.yml +++ b/playbooks/common/openshift-cluster/evaluate_groups.yml @@ -155,5 +155,5 @@        groups: oo_glusterfs_to_config        ansible_ssh_user: "{{ g_ssh_user | default(omit) }}"        ansible_become: "{{ g_sudo | default(omit) }}" -    with_items: "{{ g_glusterfs_hosts | union(g_glusterfs_registry_hosts) | default([]) }}" +    with_items: "{{ g_glusterfs_hosts | union(g_glusterfs_registry_hosts | default([])) }}"      changed_when: no diff --git a/playbooks/common/openshift-cluster/redeploy-certificates/etcd-ca.yml b/playbooks/common/openshift-cluster/redeploy-certificates/etcd-ca.yml new file mode 100644 index 000000000..6964e8567 --- /dev/null +++ b/playbooks/common/openshift-cluster/redeploy-certificates/etcd-ca.yml @@ -0,0 +1,158 @@ +--- +- 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"})) diff --git a/playbooks/common/openshift-cluster/redeploy-certificates/ca.yml b/playbooks/common/openshift-cluster/redeploy-certificates/openshift-ca.yml index 0d94a011a..089ae6bbc 100644 --- a/playbooks/common/openshift-cluster/redeploy-certificates/ca.yml +++ b/playbooks/common/openshift-cluster/redeploy-certificates/openshift-ca.yml @@ -7,7 +7,7 @@      when: not openshift.common.version_gte_3_2_or_1_2 | bool  - name: Check cert expirys -  hosts: oo_nodes_to_config:oo_etcd_to_config:oo_masters_to_config +  hosts: oo_nodes_to_config:oo_masters_to_config    vars:      openshift_certificate_expiry_show_all: yes    roles: @@ -18,140 +18,6 @@    # 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 }}" - -- 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 CA certificate, key, bundle and serial -    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-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'))) -  # Update master config when ca-bundle not referenced. Services will be  # restarted below after new CA certificate has been distributed.  - name: Ensure ca-bundle.crt is referenced in master configuration | 
