diff options
| -rw-r--r-- | openshift-ansible.spec | 2 | ||||
| -rw-r--r-- | roles/openshift_logging/README.md | 3 | ||||
| -rw-r--r-- | roles/openshift_logging/files/generate-jks.sh | 12 | ||||
| -rw-r--r-- | roles/openshift_logging/tasks/generate_certs.yaml | 78 | ||||
| -rw-r--r-- | roles/openshift_logging/tasks/generate_jks.yaml | 111 | ||||
| -rw-r--r-- | roles/openshift_logging/tasks/main.yaml | 1 | ||||
| -rw-r--r-- | roles/openshift_metrics/README.md | 4 | ||||
| -rw-r--r-- | roles/openshift_metrics/tasks/install_support.yaml | 18 | 
8 files changed, 151 insertions, 78 deletions
diff --git a/openshift-ansible.spec b/openshift-ansible.spec index a2940e001..0b7c44660 100644 --- a/openshift-ansible.spec +++ b/openshift-ansible.spec @@ -18,6 +18,8 @@ Requires:      python2  Requires:      python-six  Requires:      tar  Requires:      openshift-ansible-docs = %{version}-%{release} +Requires:      java-1.8.0-openjdk-headless +Requires:      httpd-tools  %description  Openshift and Atomic Enterprise Ansible diff --git a/roles/openshift_logging/README.md b/roles/openshift_logging/README.md index 2cc2c48ee..9b71dc676 100644 --- a/roles/openshift_logging/README.md +++ b/roles/openshift_logging/README.md @@ -6,6 +6,9 @@ This role is used for installing the Aggregated Logging stack. It should be run  a single host, it will create any missing certificates and API objects that the current  [logging deployer](https://github.com/openshift/origin-aggregated-logging/tree/master/deployer) does. +This role requires that the control host it is run on has Java installed as part of keystore +generation for Elasticsearch (it uses JKS) as well as openssl to sign certificates. +  As part of the installation, it is recommended that you add the Fluentd node selector label  to the list of persisted [node labels](https://docs.openshift.org/latest/install_config/install/advanced_install.html#configuring-node-host-labels). diff --git a/roles/openshift_logging/files/generate-jks.sh b/roles/openshift_logging/files/generate-jks.sh index 995ec0b98..9fe557f83 100644 --- a/roles/openshift_logging/files/generate-jks.sh +++ b/roles/openshift_logging/files/generate-jks.sh @@ -1,6 +1,10 @@  #! /bin/sh  set -ex +function usage() { +  echo Usage: `basename $0` cert_directory [logging_namespace] 1>&2 +} +  function generate_JKS_chain() {      dir=${SCRATCH_DIR:-_output}      ADD_OID=$1 @@ -147,8 +151,14 @@ function createTruststore() {      -noprompt -alias sig-ca  } -dir="$CERT_DIR" +if [ $# -lt 1 ]; then +  usage +  exit 1 +fi + +dir=$1  SCRATCH_DIR=$dir +PROJECT=${2:-logging}  if [[ ! -f $dir/system.admin.jks || -z "$(keytool -list -keystore $dir/system.admin.jks -storepass kspass | grep sig-ca)" ]]; then    generate_JKS_client_cert "system.admin" diff --git a/roles/openshift_logging/tasks/generate_certs.yaml b/roles/openshift_logging/tasks/generate_certs.yaml index e16071e46..20e50482e 100644 --- a/roles/openshift_logging/tasks/generate_certs.yaml +++ b/roles/openshift_logging/tasks/generate_certs.yaml @@ -85,82 +85,8 @@    loop_control:      loop_var: node_name -- name: Check for jks-generator service account -  command: > -    {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig get serviceaccount/jks-generator --no-headers -n {{openshift_logging_namespace}} -  register: serviceaccount_result -  ignore_errors: yes -  when: not ansible_check_mode -  changed_when: no - -- name: Create jks-generator service account -  command: > -    {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig create serviceaccount jks-generator -n {{openshift_logging_namespace}} -  when: not ansible_check_mode and "not found" in serviceaccount_result.stderr - -- name: Check for hostmount-anyuid scc entry -  command: > -    {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig get scc hostmount-anyuid -o jsonpath='{.users}' -  register: scc_result -  when: not ansible_check_mode -  changed_when: no - -- name: Add to hostmount-anyuid scc -  command: > -    {{ openshift.common.admin_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig policy add-scc-to-user hostmount-anyuid -z jks-generator -n {{openshift_logging_namespace}} -  when: -    - not ansible_check_mode -    - scc_result.stdout.find("system:serviceaccount:{{openshift_logging_namespace}}:jks-generator") == -1 - -- name: Copy JKS generation script -  copy: -    src: generate-jks.sh -    dest: "{{generated_certs_dir}}/generate-jks.sh" -  check_mode: no - -- name: Generate JKS pod template -  template: -    src: jks_pod.j2 -    dest: "{{mktemp.stdout}}/jks_pod.yaml" -  check_mode: no -  changed_when: no - -# check if pod generated files exist -- if they all do don't run the pod -- name: Checking for elasticsearch.jks -  stat: path="{{generated_certs_dir}}/elasticsearch.jks" -  register: elasticsearch_jks -  check_mode: no - -- name: Checking for logging-es.jks -  stat: path="{{generated_certs_dir}}/logging-es.jks" -  register: logging_es_jks -  check_mode: no - -- name: Checking for system.admin.jks -  stat: path="{{generated_certs_dir}}/system.admin.jks" -  register: system_admin_jks -  check_mode: no - -- name: Checking for truststore.jks -  stat: path="{{generated_certs_dir}}/truststore.jks" -  register: truststore_jks -  check_mode: no - -- name: create JKS generation pod -  command: > -    {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig create -f {{mktemp.stdout}}/jks_pod.yaml -n {{openshift_logging_namespace}} -o name -  register: podoutput -  check_mode: no -  when: not elasticsearch_jks.stat.exists or not logging_es_jks.stat.exists or not system_admin_jks.stat.exists or not truststore_jks.stat.exists - -- command: > -    {{ openshift.common.client_binary }} --config={{ mktemp.stdout }}/admin.kubeconfig get {{podoutput.stdout}} -o jsonpath='{.status.phase}' -n {{openshift_logging_namespace}} -  register: result -  until: result.stdout.find("Succeeded") != -1 -  retries: 5 -  delay: 10 -  changed_when: no -  when: not elasticsearch_jks.stat.exists or not logging_es_jks.stat.exists or not system_admin_jks.stat.exists or not truststore_jks.stat.exists +- name: Creating necessary JKS certs +  include: generate_jks.yaml  # check for secret/logging-kibana-proxy  - command: > diff --git a/roles/openshift_logging/tasks/generate_jks.yaml b/roles/openshift_logging/tasks/generate_jks.yaml new file mode 100644 index 000000000..adb6c2b2d --- /dev/null +++ b/roles/openshift_logging/tasks/generate_jks.yaml @@ -0,0 +1,111 @@ +--- +# check if pod generated files exist -- if they all do don't run the pod +- name: Checking for elasticsearch.jks +  stat: path="{{generated_certs_dir}}/elasticsearch.jks" +  register: elasticsearch_jks +  check_mode: no + +- name: Checking for logging-es.jks +  stat: path="{{generated_certs_dir}}/logging-es.jks" +  register: logging_es_jks +  check_mode: no + +- name: Checking for system.admin.jks +  stat: path="{{generated_certs_dir}}/system.admin.jks" +  register: system_admin_jks +  check_mode: no + +- name: Checking for truststore.jks +  stat: path="{{generated_certs_dir}}/truststore.jks" +  register: truststore_jks +  check_mode: no + +- name: Create temp directory for doing work in +  local_action: command mktemp -d /tmp/openshift-logging-ansible-XXXXXX +  register: local_tmp +  changed_when: False +  check_mode: no + +- name: Create placeholder for previously created JKS certs to prevent recreating... +  file: +    path: "{{local_tmp.stdout}}/elasticsearch.jks" +    state: touch +    mode: "u=rw,g=r,o=r" +  when: elasticsearch_jks.stat.exists +  changed_when: False + +- name: Create placeholder for previously created JKS certs to prevent recreating... +  file: +    path: "{{local_tmp.stdout}}/logging-es.jks" +    state: touch +    mode: "u=rw,g=r,o=r" +  when: logging_es_jks.stat.exists +  changed_when: False + +- name: Create placeholder for previously created JKS certs to prevent recreating... +  file: +    path: "{{local_tmp.stdout}}/system.admin.jks" +    state: touch +    mode: "u=rw,g=r,o=r" +  when: system_admin_jks.stat.exists +  changed_when: False + +- name: Create placeholder for previously created JKS certs to prevent recreating... +  file: +    path: "{{local_tmp.stdout}}/truststore.jks" +    state: touch +    mode: "u=rw,g=r,o=r" +  when: truststore_jks.stat.exists +  changed_when: False + +- name: pulling down signing items from host +  fetch: +    src: "{{generated_certs_dir}}/{{item}}" +    dest: "{{local_tmp.stdout}}/{{item}}" +    flat: yes +  with_items: +    - ca.crt +    - ca.key +    - ca.serial.txt +    - ca.crl.srl +    - ca.db + +- local_action: template src=signing.conf.j2 dest={{local_tmp.stdout}}/signing.conf +  vars: +    - top_dir: "{{local_tmp.stdout}}" + +- name: Run JKS generation script +  local_action: script generate-jks.sh {{local_tmp.stdout}} {{openshift_logging_namespace}} +  check_mode: no +  become: yes +  when: not elasticsearch_jks.stat.exists or not logging_es_jks.stat.exists or not system_admin_jks.stat.exists or not truststore_jks.stat.exists + +- name: Pushing locally generated JKS certs to remote host... +  copy: +    src: "{{local_tmp.stdout}}/elasticsearch.jks" +    dest: "{{generated_certs_dir}}/elasticsearch.jks" +  when: not elasticsearch_jks.stat.exists + +- name: Pushing locally generated JKS certs to remote host... +  copy: +    src: "{{local_tmp.stdout}}/logging-es.jks" +    dest: "{{generated_certs_dir}}/logging-es.jks" +  when: not logging_es_jks.stat.exists + +- name: Pushing locally generated JKS certs to remote host... +  copy: +    src: "{{local_tmp.stdout}}/system.admin.jks" +    dest: "{{generated_certs_dir}}/system.admin.jks" +  when: not system_admin_jks.stat.exists + +- name: Pushing locally generated JKS certs to remote host... +  copy: +    src: "{{local_tmp.stdout}}/truststore.jks" +    dest: "{{generated_certs_dir}}/truststore.jks" +  when: not truststore_jks.stat.exists + +- name: Cleaning up temp dir +  file: +    path: "{{local_tmp.stdout}}" +    state: absent +  changed_when: False diff --git a/roles/openshift_logging/tasks/main.yaml b/roles/openshift_logging/tasks/main.yaml index c4ec1b255..4c718805e 100644 --- a/roles/openshift_logging/tasks/main.yaml +++ b/roles/openshift_logging/tasks/main.yaml @@ -3,7 +3,6 @@      msg: Only one Fluentd nodeselector key pair should be provided    when: "{{ openshift_logging_fluentd_nodeselector.keys() | count }} > 1" -  - name: Create temp directory for doing work in    command: mktemp -d /tmp/openshift-logging-ansible-XXXXXX    register: mktemp diff --git a/roles/openshift_metrics/README.md b/roles/openshift_metrics/README.md index 0f287e944..a61b0db5e 100644 --- a/roles/openshift_metrics/README.md +++ b/roles/openshift_metrics/README.md @@ -5,6 +5,10 @@ OpenShift Metrics Installation  Requirements  ------------ +This role has the following dependencies: + +- Java is required on the control node to generate keystores for the Java components +- httpd-tools is required on the control node to generate various passwords for the metrics components  The following variables need to be set and will be validated: diff --git a/roles/openshift_metrics/tasks/install_support.yaml b/roles/openshift_metrics/tasks/install_support.yaml index b0e4bec80..cc5acc6e5 100644 --- a/roles/openshift_metrics/tasks/install_support.yaml +++ b/roles/openshift_metrics/tasks/install_support.yaml @@ -1,4 +1,22 @@  --- +- name: Check control node to see if htpasswd is installed +  local_action: command which htpasswd +  register: htpasswd_check +  failed_when: no +  changed_when: no + +- fail: msg="'htpasswd' is unavailable. Please install httpd-tools on the control node" +  when: htpasswd_check.rc  == 1 + +- name: Check control node to see if keytool is installed +  local_action: command which htpasswd +  register: keytool_check +  failed_when: no +  changed_when: no + +- fail: msg="'keytool' is unavailable. Please install java-1.8.0-openjdk-headless on the control node" +  when: keytool_check.rc  == 1 +  - include: generate_certificates.yaml  - include: generate_serviceaccounts.yaml  - include: generate_services.yaml  | 
