From d37c1627458de230d9e277b00d506eb64278d0b2 Mon Sep 17 00:00:00 2001
From: Wolfgang Kulhanek <WolfgangKulhanek@gmail.com>
Date: Thu, 08 Aug 2019 23:27:50 +0200
Subject: [PATCH] Various fixes for operators. Major rework of logging workload.

---
 ansible/roles/ocp4-workload-logging/tasks/workload.yml                        |   81 ++++++++++++++++++++++------------------
 ansible/roles/ocp4-workload-template-service-broker/defaults/main.yml         |    1 
 ansible/roles/ocp4-workload-automation-broker/templates/subscription.j2       |    1 
 ansible/roles/ocp4-workload-template-service-broker/tasks/test.yaml           |   23 +++++++++++
 ansible/roles/ocp4-workload-template-service-broker/tasks/workload.yml        |    3 -
 ansible/roles/ocp4-workload-template-service-broker/templates/subscription.j2 |    1 
 ansible/roles/ocp4-workload-automation-broker/tasks/workload.yml              |    2 
 ansible/roles/ocp4-workload-template-service-broker/readme.adoc               |    1 
 ansible/roles/ocp4-workload-automation-broker/readme.adoc                     |    1 
 ansible/roles/ocp4-workload-logging/tasks/remove_workload.yml                 |    4 +-
 ansible/roles/ocp4-workload-automation-broker/defaults/main.yml               |    1 
 11 files changed, 72 insertions(+), 47 deletions(-)

diff --git a/ansible/roles/ocp4-workload-automation-broker/defaults/main.yml b/ansible/roles/ocp4-workload-automation-broker/defaults/main.yml
index 2e6be05..c0012f2 100644
--- a/ansible/roles/ocp4-workload-automation-broker/defaults/main.yml
+++ b/ansible/roles/ocp4-workload-automation-broker/defaults/main.yml
@@ -5,7 +5,6 @@
 
 _asb_broker_project: openshift-automation-broker
 _asb_broker_project_display: "OpenShift Automation Broker"
-_asb_broker_subscription_csv: "openshiftansibleservicebroker.v4.1.2"
 
 # One of the following needs to be True
 
diff --git a/ansible/roles/ocp4-workload-automation-broker/readme.adoc b/ansible/roles/ocp4-workload-automation-broker/readme.adoc
index ef0d07c..39f6828 100644
--- a/ansible/roles/ocp4-workload-automation-broker/readme.adoc
+++ b/ansible/roles/ocp4-workload-automation-broker/readme.adoc
@@ -29,7 +29,6 @@
 * Other variables:
 ** *_asb_broker_project*: The name of the project to create and install the Automation Broker to. Default: `openshift-automation-broker`
 ** *_asb_broker_project_display*: The display name of the project. Default: `OpenShift Automation Broker`
-** *_asb_broker_subscription_csv*: The ClusterServiceVersion to be deployed. Default: `automationbrokeroperator.v4.1.0`
 * You can modify any of these default values by adding `-e "variable_name=variable_value"` to the command line
 
 === Deploy a Workload with the `ocp-workload` playbook [Mostly for testing]
diff --git a/ansible/roles/ocp4-workload-automation-broker/tasks/workload.yml b/ansible/roles/ocp4-workload-automation-broker/tasks/workload.yml
index 7d061bc..525b741 100644
--- a/ansible/roles/ocp4-workload-automation-broker/tasks/workload.yml
+++ b/ansible/roles/ocp4-workload-automation-broker/tasks/workload.yml
@@ -35,8 +35,8 @@
   register: csv
   retries: 25
   delay: 10
-  until: csv.stdout == "Succeeded"
   ignore_errors: yes
+  until: csv.stdout == "Succeeded"
 
 - name: Notify user if Automation Broker operator deployment failed
   when: not csv.stdout == "Succeeded"
diff --git a/ansible/roles/ocp4-workload-automation-broker/templates/subscription.j2 b/ansible/roles/ocp4-workload-automation-broker/templates/subscription.j2
index 434a6df..07af79e 100644
--- a/ansible/roles/ocp4-workload-automation-broker/templates/subscription.j2
+++ b/ansible/roles/ocp4-workload-automation-broker/templates/subscription.j2
@@ -12,4 +12,3 @@
   name: openshiftansibleservicebroker
   source: "installed-redhat-{{ _asb_broker_project }}"
   sourceNamespace: "{{ _asb_broker_project }}"
-#  startingCSV: "{{ _asb_broker_subscription_csv }}"
diff --git a/ansible/roles/ocp4-workload-logging/tasks/remove_workload.yml b/ansible/roles/ocp4-workload-logging/tasks/remove_workload.yml
index cfa986b..89eaa03 100644
--- a/ansible/roles/ocp4-workload-logging/tasks/remove_workload.yml
+++ b/ansible/roles/ocp4-workload-logging/tasks/remove_workload.yml
@@ -1,7 +1,7 @@
 # vim: set ft=ansible
 ---
 # Implement your Workload removal tasks here
-- name: remove logging cr
+- name: Remove Logging CR
   k8s:
     state: absent
     definition:
@@ -20,7 +20,7 @@
     namespace: openshift-logging
   register: logging_pods
   until: logging_pods.resources | list | length <= 1
-  retries: 100
+  retries: 20
   delay: 10
 
 - name: logging operatorgroup
diff --git a/ansible/roles/ocp4-workload-logging/tasks/workload.yml b/ansible/roles/ocp4-workload-logging/tasks/workload.yml
index 6b3219e..2f5d1c5 100644
--- a/ansible/roles/ocp4-workload-logging/tasks/workload.yml
+++ b/ansible/roles/ocp4-workload-logging/tasks/workload.yml
@@ -18,63 +18,72 @@
   - ./files/logging_catalog_source.yaml
   - ./files/logging_subscription.yaml
 
-- name: Wait for Elasticsearch and Logging CRDs
-  ignore_errors: yes
+- name: Wait for Elasticsearch CRD
   k8s_facts:
     api_version: apiextensions.k8s.io/v1beta1
     kind: CustomResourceDefinition
-    name: "{{ item }}"
-  register: crd_exists
-  until: crd_exists.resources | list | length >= 1
+    name: elasticsearches.logging.openshift.io
+  register: r_elasticsearch_crd
   retries: 20
   delay: 10
-  with_items:
-    - "clusterloggings.logging.openshift.io"
-    - "elasticsearches.logging.openshift.io"
+  ignore_errors: yes
+  until: r_elasticsearch_crd.resources | list | length == 1
 
-- name: Notify user if Logging operator deployment failed
-  when: crd_exists.resources | list | length == 0
+- name: Notify user if Elasticsearch deployment failed
+  when: not r_elasticsearch_crd.resources | list | length == 1
   debug:
-    msg: "user.info: *** Elasticsearch / Logging could not be installed ***"
+    msg: "user.info: *** Elasticsearch operator could not be installed ***"
+
+- name: Wait for Logging CRD
+  k8s_facts:
+    api_version: apiextensions.k8s.io/v1beta1
+    kind: CustomResourceDefinition
+    name: clusterloggings.logging.openshift.io
+  register: r_logging_crd
+  retries: 20
+  delay: 10
+  ignore_errors: yes
+  until: r_logging_crd.resources | list | length == 1
+
+- name: Notify user if Logging deployment failed
+  when: not r_logging_crd.resources | list | length == 1
+  debug:
+    msg: "user.info: *** Logging operator could not be installed ***"
 
 - name: Deploy Logging
-  when: crd_exists.resources | list | length >= 1
+  when:
+  - r_logging_crd.resources | list | length == 1
+  - r_elasticsearch_crd.resources | list | length == 1
   block:
   - name: Create OpenShift Objects for ClusterLogging
-    ignore_errors: yes
     k8s:
       state: present
       merge_type:
       - strategic-merge
       - merge
       definition: "{{ lookup('template', item ) | from_yaml }}"
+    ignore_errors: yes
     loop:
     - ./templates/cluster_logging.j2
-  
-  - name: Wait for Elasticsearch Deployments to exist
-    ignore_errors: yes
-    k8s_facts:
-      api_version: extensions/v1beta1
-      kind: Deployment
-      namespace: openshift-logging
-      label_selectors:
-        - component = elasticsearch
-    register: elastic_deployments
-    until: elastic_deployments.resources | list | length >= 1
-    retries: 100
-    delay: 10
 
-  # could this also use k8s_facts in some way?
-  - name: wait for running elasticsearch
-    ignore_errors: yes
-    when:
-    - _logging_wait_for_deployment|bool
-    shell: "oc get deployment {{ item.metadata.name }} -n openshift-logging -o jsonpath='{.status.readyReplicas}'"
-    register: replicas_out
-    retries: 100
+  - name: Sleep to give the status field a chance to populate
+    when: _logging_wait_for_deployment | bool
+    pause:
+      seconds: 60
+  
+  - name: Wait until Elasticsearch Cluster Status is green
+    when: _logging_wait_for_deployment| bool
+    k8s_facts:
+      api_version: logging.openshift.io/v1
+      kind: ClusterLogging
+      name: instance
+      namespace: openshift-logging
+    register: r_logging
+    retries: 30
     delay: 10
-    with_items: "{{ elastic_deployments.resources }}"
-    until: replicas_out.stdout | int == 1
+    ignore_errors: yes
+    until: 
+    - r_logging.resources[0].status.logStore.elasticsearchStatus[0].clusterHealth == "green"
 
 # Leave this as the last task in the playbook.
 - name: workload tasks complete
diff --git a/ansible/roles/ocp4-workload-template-service-broker/defaults/main.yml b/ansible/roles/ocp4-workload-template-service-broker/defaults/main.yml
index 78acf69..8d5c522 100644
--- a/ansible/roles/ocp4-workload-template-service-broker/defaults/main.yml
+++ b/ansible/roles/ocp4-workload-template-service-broker/defaults/main.yml
@@ -5,5 +5,4 @@
 
 _tsb_broker_project: openshift-template-service-broker
 _tsb_broker_project_display: "OpenShift Template Service Broker"
-_tsb_broker_subscription_csv: "openshifttemplateservicebrokeroperator.v4.1.2"
 _tsb_broker_size: "1"
diff --git a/ansible/roles/ocp4-workload-template-service-broker/readme.adoc b/ansible/roles/ocp4-workload-template-service-broker/readme.adoc
index 144d39f..e346a5d 100644
--- a/ansible/roles/ocp4-workload-template-service-broker/readme.adoc
+++ b/ansible/roles/ocp4-workload-template-service-broker/readme.adoc
@@ -29,7 +29,6 @@
 * Other variables:
 ** *_tsb_broker_project*: The name of the project to create and install the Template Service Broker to. Default: `openshift-template-service-broker`
 ** *_tsb_broker_project_display*: The display name of the project. Default: `OpenShift Template Service Broker`
-** *_tsb_broker_subscription_csv*: The ClusterServiceVersion to be deployed. Default: `templateservicebrokeroperator.v4.1.0`
 * You can modify any of these default values by adding `-e "variable_name=variable_value"` to the command line
 
 === Deploy a Workload with the `ocp-workload` playbook [Mostly for testing]
diff --git a/ansible/roles/ocp4-workload-template-service-broker/tasks/test.yaml b/ansible/roles/ocp4-workload-template-service-broker/tasks/test.yaml
new file mode 100644
index 0000000..dc0149a
--- /dev/null
+++ b/ansible/roles/ocp4-workload-template-service-broker/tasks/test.yaml
@@ -0,0 +1,23 @@
+---
+- name: Get CSV
+  hosts: localhost
+  become: no
+  tasks:
+  - name: Wait for CSV to be successful
+    k8s_facts:
+      api_version:
+      kind:
+      namespace: openshift-template-service-broker
+    register: r_csv
+    ignore_errors: yes
+    delay: 10
+    retries: 25
+    until: r_csv | selectattr('metadata.name', 'match', '^openshifttemplateservicebrokeroperator') | list
+
+  # - name: Wait until CSV is Installed
+  #   command: oc get csv -o jsonpath --template='{$.items[:1].status.phase}' -n "{{ _tsb_broker_project }}"
+  #   register: csv
+  #   retries: 25
+  #   delay: 10
+  #   ignore_errors: yes
+  #   until: csv.stdout == "Succeeded"
diff --git a/ansible/roles/ocp4-workload-template-service-broker/tasks/workload.yml b/ansible/roles/ocp4-workload-template-service-broker/tasks/workload.yml
index 37467fb..bfecdd2 100644
--- a/ansible/roles/ocp4-workload-template-service-broker/tasks/workload.yml
+++ b/ansible/roles/ocp4-workload-template-service-broker/tasks/workload.yml
@@ -33,13 +33,12 @@
   - ./templates/cluster_role_binding.j2
 
 - name: Wait until CSV is Installed
-  ignore_errors: yes
   command: oc get csv -o jsonpath --template='{$.items[:1].status.phase}' -n "{{ _tsb_broker_project }}"
   register: csv
   retries: 25
   delay: 10
-  until: csv.stdout == "Succeeded"
   ignore_errors: yes
+  until: csv.stdout == "Succeeded"
 
 - name: Notify user if Template Service Broker operator deployment failed
   when: not csv.stdout == "Succeeded"
diff --git a/ansible/roles/ocp4-workload-template-service-broker/templates/subscription.j2 b/ansible/roles/ocp4-workload-template-service-broker/templates/subscription.j2
index 8f1eb63..d475ad6 100644
--- a/ansible/roles/ocp4-workload-template-service-broker/templates/subscription.j2
+++ b/ansible/roles/ocp4-workload-template-service-broker/templates/subscription.j2
@@ -12,4 +12,3 @@
   name: openshifttemplateservicebroker
   source: "installed-redhat-{{ _tsb_broker_project }}"
   sourceNamespace: "{{ _tsb_broker_project }}"
-#  startingCSV: "{{ _tsb_broker_subscription_csv }}"

--
Gitblit v1.9.3