diff options
Diffstat (limited to 'roles/etcd_client_certificates')
| -rw-r--r-- | roles/etcd_client_certificates/README.md | 34 | ||||
| l--------- | roles/etcd_client_certificates/library | 1 | ||||
| -rw-r--r-- | roles/etcd_client_certificates/meta/main.yml | 16 | ||||
| -rw-r--r-- | roles/etcd_client_certificates/tasks/main.yml | 119 | 
4 files changed, 170 insertions, 0 deletions
diff --git a/roles/etcd_client_certificates/README.md b/roles/etcd_client_certificates/README.md new file mode 100644 index 000000000..269d5296d --- /dev/null +++ b/roles/etcd_client_certificates/README.md @@ -0,0 +1,34 @@ +OpenShift Etcd Certificates +=========================== + +TODO + +Requirements +------------ + +TODO + +Role Variables +-------------- + +TODO + +Dependencies +------------ + +TODO + +Example Playbook +---------------- + +TODO + +License +------- + +Apache License Version 2.0 + +Author Information +------------------ + +Scott Dodson (sdodson@redhat.com) diff --git a/roles/etcd_client_certificates/library b/roles/etcd_client_certificates/library new file mode 120000 index 000000000..494d3c39e --- /dev/null +++ b/roles/etcd_client_certificates/library @@ -0,0 +1 @@ +../../library
\ No newline at end of file diff --git a/roles/etcd_client_certificates/meta/main.yml b/roles/etcd_client_certificates/meta/main.yml new file mode 100644 index 000000000..713c78c70 --- /dev/null +++ b/roles/etcd_client_certificates/meta/main.yml @@ -0,0 +1,16 @@ +--- +galaxy_info: +  author: Jason DeTiberus +  description: Etcd Client Certificates +  company: Red Hat, Inc. +  license: Apache License, Version 2.0 +  min_ansible_version: 2.1 +  platforms: +  - name: EL +    versions: +    - 7 +  categories: +  - cloud +  - system +dependencies: +- role: etcd_ca diff --git a/roles/etcd_client_certificates/tasks/main.yml b/roles/etcd_client_certificates/tasks/main.yml new file mode 100644 index 000000000..b86afb81c --- /dev/null +++ b/roles/etcd_client_certificates/tasks/main.yml @@ -0,0 +1,119 @@ +--- +- name: Check status of external etcd certificatees +  stat: +    path: "{{ etcd_cert_config_dir }}/{{ item }}" +  with_items: +  - "{{ etcd_cert_prefix }}client.crt" +  - "{{ etcd_cert_prefix }}client.key" +  - "{{ etcd_cert_prefix }}ca.crt" +  register: g_external_etcd_cert_stat_result + +- set_fact: +    etcd_client_certs_missing: "{{ False in (g_external_etcd_cert_stat_result.results +                                   | 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_client_certs_missing | bool +  delegate_to: "{{ etcd_ca_host }}" + +- name: Create the client csr +  command: > +    openssl req -new -keyout {{ etcd_cert_prefix }}client.key +    -config {{ etcd_openssl_conf }} +    -out {{ etcd_cert_prefix }}client.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 ~ 'client.csr' }}" +  environment: +    SAN: "IP:{{ etcd_ip }}" +  when: etcd_client_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 client crt +  delegated_serial_command: +    command: > +      openssl ca -name {{ etcd_ca_name }} -config {{ etcd_openssl_conf }} +      -out {{ etcd_cert_prefix }}client.crt +      -in {{ etcd_cert_prefix }}client.csr +      -batch +    chdir: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}" +    creates: "{{ etcd_generated_certs_dir ~ '/' ~  etcd_cert_subdir ~ '/' +                 ~ etcd_cert_prefix ~ 'client.crt' }}" +  environment: +    SAN: "IP:{{ etcd_ip }}" +  when: etcd_client_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_client_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 +  register: g_etcd_client_mktemp +  changed_when: False +  when: etcd_client_certs_missing | bool +  delegate_to: localhost +  become: no + +- 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" +  when: etcd_client_certs_missing | bool +  delegate_to: "{{ etcd_ca_host }}" + +- name: Retrieve the etcd cert tarballs +  fetch: +    src: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz" +    dest: "{{ g_etcd_client_mktemp.stdout }}/" +    flat: yes +    fail_on_missing: yes +    validate_checksum: yes +  when: etcd_client_certs_missing | bool +  delegate_to: "{{ etcd_ca_host }}" + +- name: Ensure certificate directory exists +  file: +    path: "{{ etcd_cert_config_dir }}" +    state: directory +  when: etcd_client_certs_missing | bool + +- name: Unarchive etcd cert tarballs +  unarchive: +    src: "{{ g_etcd_client_mktemp.stdout }}/{{ etcd_cert_subdir }}.tgz" +    dest: "{{ etcd_cert_config_dir }}" +  when: etcd_client_certs_missing | bool + +- file: +    path: "{{ etcd_cert_config_dir }}/{{ item }}" +    owner: root +    group: root +    mode: 0600 +  with_items: +  - "{{ etcd_cert_prefix }}client.crt" +  - "{{ etcd_cert_prefix }}client.key" +  - "{{ etcd_cert_prefix }}ca.crt" +  when: etcd_client_certs_missing | bool + +- name: Delete temporary directory +  file: name={{ g_etcd_client_mktemp.stdout }} state=absent +  changed_when: False +  when: etcd_client_certs_missing | bool +  delegate_to: localhost +  become: no  | 
