diff --git a/examples/all.yaml b/examples/all.yaml index e2171b9af..654d39895 100644 --- a/examples/all.yaml +++ b/examples/all.yaml @@ -13,7 +13,7 @@ ipa_user_last_name: "Star" # IPA user last name to display descheduler_role_enable: false descheduler_operator_deploy: false descheduler_catalogsource_image: "quay.io/openshift-release-dev/ocp-release-nightly:iib-int-index-art-operators-4.12" -descheduler_catalogsource_name: "kube-descheduler-operator-catalog" +descheduler_catalogsource_name: "my-operator-catalog" descheduler_namespace: "openshift-descheduler" descheduler_channel: "4.12" descheduler_e2e_tests_run: false diff --git a/examples/ocp_descheduler_vars.yaml b/examples/ocp_descheduler_vars.yaml index 814f2017e..4b6e5abc0 100644 --- a/examples/ocp_descheduler_vars.yaml +++ b/examples/ocp_descheduler_vars.yaml @@ -6,10 +6,10 @@ descheduler_role_enable: false descheduler_operator_deploy: false descheduler_catalogsource_image: "quay.io/openshift-release-dev/ocp-release-nightly:iib-int-index-art-operators-4.12" descheduler_catalogsource_name: "my-operator-catalog" -descheduler_namespace: "openshift-kube-descheduler-operator" +descheduler_namespace: "openshift-descheduler" descheduler_channel: "4.12" descheduler_e2e_tests_run: false -descheduler_workdir: "/tmp/descheduler" +descheduler_workdir: "/tmp/descheduler" descheduler_e2e_repo: "https://github.com/openshift/openshift-tests-private" descheduler_e2e_github_branch: "master" descheduler_go_tarball: "https://go.dev/dl/go1.18.4.linux-ppc64le.tar.gz" diff --git a/playbooks/roles/ocp-descheduler/README.md b/playbooks/roles/ocp-descheduler/README.md index a4ce2150a..477eae118 100644 --- a/playbooks/roles/ocp-descheduler/README.md +++ b/playbooks/roles/ocp-descheduler/README.md @@ -24,7 +24,7 @@ Role Variables | descheduler_role_enable | no | false | Set the flag `true` to run this playbook. | | descheduler_operator_deploy | no | false | Set the flag `true` to deploy descheduler operator. | | descheduler_catalogsource_image | no | `quay.io/openshift-release-dev/ocp-release-nightly:iib-int-index-art-operators-4.12` | Descheduler operator image index for catalog source, the default has been given for operator version 4.12 ART. | -| descheduler_catalogsource_name | no | kube-descheduler-operator-catalog | Custom catalog source name, if not defined default will be used. | +| descheduler_catalogsource_name | no | my-operator-catalog | Custom catalog source name, if not defined default will be used. | | descheduler_namespace | no | openshift-descheduler | Custom namespace name to create a new namespace, if not defined the default wil be used. | | descheduler_channel | no | 4.12 | Channel version for the descheduler operator. | | descheduler_e2e_tests_run | no | false | Set the flag `true` for running descheduler e2e tests. | diff --git a/playbooks/roles/ocp-descheduler/defaults/main.yaml b/playbooks/roles/ocp-descheduler/defaults/main.yaml index 8a290db97..6da89eedf 100644 --- a/playbooks/roles/ocp-descheduler/defaults/main.yaml +++ b/playbooks/roles/ocp-descheduler/defaults/main.yaml @@ -6,10 +6,10 @@ descheduler_role_enable: false descheduler_operator_deploy: false descheduler_catalogsource_image: "quay.io/openshift-release-dev/ocp-release-nightly:iib-int-index-art-operators-4.12" descheduler_catalogsource_name: "my-operator-catalog" -descheduler_namespace: "openshift-kube-descheduler-operator" +descheduler_namespace: "openshift-descheduler" descheduler_channel: "4.12" descheduler_e2e_tests_run: false -descheduler_workdir: "/tmp/descheduler" +descheduler_workdir: "/tmp/descheduler" descheduler_e2e_repo: "https://github.com/openshift/openshift-tests-private" descheduler_e2e_github_branch: "master" -descheduler_go_tarball: "https://go.dev/dl/go1.18.4.linux-ppc64le.tar.gz" +descheduler_go_tarball: "https://go.dev/dl/go1.18.4.linux-ppc64le.tar.gz diff --git a/playbooks/roles/ocp-descheduler/tasks/descheduler-operator-cleanup.yaml b/playbooks/roles/ocp-descheduler/tasks/descheduler-operator-cleanup.yaml new file mode 100644 index 000000000..a5ab5009e --- /dev/null +++ b/playbooks/roles/ocp-descheduler/tasks/descheduler-operator-cleanup.yaml @@ -0,0 +1,78 @@ +--- + +## Descheduler operator cleanup + +- name: Check the namespaces containing descheduler operator installed + shell: oc get csv -A | awk '{ if($2 ~ /clusterkubedescheduleroperator/) print($1)}' + register: descheduler_installed_namespaces + +- name: Cleanup block to remove the operator support objects and namespace + block: + - name: Delete the subscriptions for descheduler + shell: "oc delete subscription --all -n {{ item }}" + loop: "{{ descheduler_installed_namespaces.stdout_lines }}" + + - name: Delete the operatorgroups for descheduler + shell: "oc delete operatorgroup --all -n {{ item }}" + loop: "{{ descheduler_installed_namespaces.stdout_lines }}" + + - name: Delete the operator deployments + shell: "oc delete deploy --all -n {{ item }}" + loop: "{{ descheduler_installed_namespaces.stdout_lines }}" + + - name: Delete the CSV for operator + shell: "oc delete csv --all -n {{ item }}" + loop: "{{ descheduler_installed_namespaces.stdout_lines }}" + + - name: Delete the projects + shell: "oc delete ns {{ item }}" + loop: "{{ descheduler_installed_namespaces.stdout_lines }}" + +- name: Check if the {{ descheduler_namespace }} namespace is active + shell: "oc get namespace {{ descheduler_namespace }} --no-headers | wc -l" + register: namespace_exists + +- name: Delete the OperatorGroup, Subscription and {{ descheduler_namespace }} namespace + block: + - name: Delete the subscription + kubernetes.core.k8s: + state: absent + definition: + apiVersion: operators.coreos.com/v1alpha1 + kind: Subscription + metadata: + name: openshift-descheduler-subscription + namespace: "{{ descheduler_namespace }}" + spec: + channel: "{{ descheduler_channel }}" + installPlanApproval: Automatic + name: cluster-kube-descheduler-operator + source: "{{ descheduler_catalogsource_name }}" + sourceNamespace: openshift-marketplace + + - name: Delete the OperatorGroup + kubernetes.core.k8s: + state: absent + definition: + apiVersion: operators.coreos.com/v1 + kind: OperatorGroup + metadata: + name: openshift-descheduler-operatorgroup + namespace: "{{ descheduler_namespace }}" + spec: + targetNamespaces: + - "{{ descheduler_namespace }}" + + - name: Create a target namespace + kubernetes.core.k8s: + state: absent + definition: + apiVersion: v1 + kind: Namespace + metadata: + name: "{{ descheduler_namespace }}" + spec: + targetNamespaces: + - "{{ descheduler_namespace }}" + + when: namespace_exists.stdout != 0 diff --git a/playbooks/roles/ocp-descheduler/tasks/main.yaml b/playbooks/roles/ocp-descheduler/tasks/main.yaml index ee23d903e..9b5a444a0 100644 --- a/playbooks/roles/ocp-descheduler/tasks/main.yaml +++ b/playbooks/roles/ocp-descheduler/tasks/main.yaml @@ -20,9 +20,16 @@ include_role: name: check-cluster-health +- name: Check if the operator is available in the OperatorHub + shell: oc get packagemanifest cluster-kube-descheduler-operator -n openshift-marketplace --no-headers | wc -l + register: operator_packagemanifest_entries + # Descheduler operator deployment block - name: Descheduler operator deployment block: + - name: Include operator cleanup task module + include_tasks: "{{ role_path }}/tasks/descheduler-operator-cleanup.yaml" + - name: Setup a catalogsource for installing descheduler operator block: - name: Include the global pull-secret update role to extract podman-secret @@ -36,7 +43,6 @@ custom_catalogsource_name: "{{ descheduler_catalogsource_name }}" custom_catalogsource_display_name: "Descheduler Operator" custom_catalogsource_image: "{{ descheduler_catalogsource_image }}" - when: descheduler_catalogsource_image != '' or descheduler_catalogsource_image == None - name: Create a target namespace kubernetes.core.k8s: @@ -78,27 +84,36 @@ name: cluster-kube-descheduler-operator source: "{{ descheduler_catalogsource_name }}" sourceNamespace: openshift-marketplace - when: descheduler_operator_deploy -- name: Verify the operator installation - block: - - name: Check if the cluster service version has status as Succeeded - shell: "oc get csv --all-namespaces --no-headers | grep clusterkubedescheduleroperator | awk '{ if (($2 ~ /clusterkubedescheduleroperator/) && $NF == \"Succeeded\") print $2 }'| wc -l" - register: descheduler_operators_csv - until: descheduler_operators_csv.stdout|int != 0 - retries: 15 - delay: 60 - - - name: Check if pods are running - shell: "oc get pods --all-namespaces --no-headers | grep descheduler | awk '{ if ($4 == \"Running\") print $2 }' | wc -l" - register: descheduler_pods - until: descheduler_pods.stdout|int != 0 - retries: 15 - delay: 60 + - name: Verify the operator installation + block: + - name: Check if the cluster service version has status as Succeeded + shell: "oc get csv --all-namespaces --no-headers | grep clusterkubedescheduleroperator | awk '{ if (($2 ~ /clusterkubedescheduleroperator/) && $NF == \"Succeeded\") print $2 }'| wc -l" + register: descheduler_operators_csv + until: descheduler_operators_csv.stdout|int != 0 + retries: 15 + delay: 60 + + - name: Check if pods are running + shell: "oc get pods --all-namespaces --no-headers | grep descheduler | awk '{ if ($4 == \"Running\") print $2 }' | wc -l" + register: descheduler_pods + until: descheduler_pods.stdout|int != 0 + retries: 15 + delay: 60 + + when: descheduler_operator_deploy and operator_packagemanifest_entries.stdout|int != 0 # Descheduler e2e run block - name: Running e2e test suite in openshift-tests-private for descheduler block: + - name: Check if there is operator installed already + shell: oc get csv -A | awk '{ if ($2 ~ /clusterkubedescheduleroperator/) print $3}' | wc -l + register: descheduler_csv + + - name: Invoke operator clean block + include_tasks: "{{ role_path}}/tasks/descheduler-operator-cleanup.yaml" + when: descheduler_csv.stdout|int != 0 + - name: Create a directory for clonning the repo file: state: directory