Skip to content

Commit 8c6b432

Browse files
committed
Make RHSSO install plan approval idempotent on re-deploy
Skip wait/approve when the RHSSO operator CSV is already Succeeded and only approve unapproved install plans when a fresh install is needed. Signed-off-by: Ade Lee <alee@redhat.com> Assisted-by: Claude Opus 4.6
1 parent 187f37b commit 8c6b432

1 file changed

Lines changed: 77 additions & 40 deletions

File tree

roles/federation/tasks/run_keycloak_setup.yml

Lines changed: 77 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -48,49 +48,86 @@
4848
ansible.builtin.command:
4949
cmd: "oc apply -f {{ [ ansible_user_dir, 'ci-framework-data', 'tmp', 'rhsso-operator-olm.yaml' ] | path_join }}"
5050

51-
- name: Wait for the rhsso install plan to be present
51+
- name: Check rhsso operator CSV status
5252
kubernetes.core.k8s_info:
53-
api_version: operators.coreos.com/v1alpha1
54-
kind: InstallPlan
55-
register: ip_list
56-
until: >-
57-
ip_list.resources |
58-
selectattr('metadata.labels', 'defined') |
59-
map(attribute='metadata.labels') |
60-
map('dict2items') |
61-
flatten |
62-
selectattr('key', 'match', '.*rhsso-operator.*') |
63-
list | length > 0
64-
retries: 30
65-
delay: 40
66-
67-
- name: Get rhsso install plan name
68-
ansible.builtin.set_fact:
69-
_rhsso_ip_name: "{{ item.metadata.name }}"
70-
_rhsso_ip_namespace: "{{ item.metadata.namespace }}"
71-
loop: >-
72-
{{
73-
ip_list.resources |
74-
selectattr('metadata.labels', 'defined') |
75-
list
76-
}}
77-
when: >-
78-
item.metadata.labels | dict2items |
79-
selectattr('key', 'match', '.*rhsso-operator.*') |
80-
list | length > 0
81-
loop_control:
82-
label: "{{ item.metadata.name }}"
83-
84-
- name: Approve rhsso operator install plan
85-
kubernetes.core.k8s:
8653
kubeconfig: "{{ cifmw_openshift_kubeconfig }}"
8754
api_version: operators.coreos.com/v1alpha1
88-
kind: InstallPlan
89-
name: "{{ _rhsso_ip_name }}"
90-
namespace: "{{ _rhsso_ip_namespace }}"
91-
definition:
92-
spec:
93-
approved: true
55+
kind: ClusterServiceVersion
56+
namespace: "{{ item }}"
57+
label_selectors:
58+
- operators.coreos.com/rhsso-operator.default=true
59+
register: _rhsso_csv_checks
60+
loop:
61+
- default
62+
- "{{ cifmw_federation_keycloak_namespace }}"
63+
failed_when: false
64+
65+
- name: Set rhsso operator already installed fact
66+
ansible.builtin.set_fact:
67+
_rhsso_operator_installed: >-
68+
{{
69+
(
70+
_rhsso_csv_checks.results |
71+
default([]) |
72+
map(attribute='resources') |
73+
flatten |
74+
selectattr('status.phase', 'defined') |
75+
selectattr('status.phase', 'equalto', 'Succeeded') |
76+
list | length
77+
) > 0
78+
}}
79+
80+
- name: Install and approve rhsso operator when not already installed
81+
when: not _rhsso_operator_installed
82+
block:
83+
- name: Wait for the rhsso install plan to be present
84+
kubernetes.core.k8s_info:
85+
kubeconfig: "{{ cifmw_openshift_kubeconfig }}"
86+
api_version: operators.coreos.com/v1alpha1
87+
kind: InstallPlan
88+
namespace: default
89+
register: ip_list
90+
until: >-
91+
ip_list.resources |
92+
selectattr('metadata.labels', 'defined') |
93+
map(attribute='metadata.labels') |
94+
map('dict2items') |
95+
flatten |
96+
selectattr('key', 'match', '.*rhsso-operator.*') |
97+
list | length > 0
98+
retries: 30
99+
delay: 40
100+
101+
- name: Get unapproved rhsso install plan name
102+
ansible.builtin.set_fact:
103+
_rhsso_ip_name: "{{ item.metadata.name }}"
104+
_rhsso_ip_namespace: "{{ item.metadata.namespace }}"
105+
loop: >-
106+
{{
107+
ip_list.resources |
108+
selectattr('metadata.labels', 'defined') |
109+
list
110+
}}
111+
when:
112+
- >-
113+
item.metadata.labels | dict2items |
114+
selectattr('key', 'match', '.*rhsso-operator.*') |
115+
list | length > 0
116+
- not (item.spec.approved | default(false) | bool)
117+
loop_control:
118+
label: "{{ item.metadata.name }}"
119+
120+
- name: Approve rhsso operator install plan
121+
when: _rhsso_ip_name is defined
122+
kubernetes.core.k8s:
123+
kubeconfig: "{{ cifmw_openshift_kubeconfig }}"
124+
api_version: operators.coreos.com/v1alpha1
125+
kind: InstallPlan
126+
name: "{{ _rhsso_ip_name }}"
127+
namespace: "{{ _rhsso_ip_namespace }}"
128+
definition:
129+
spec:
130+
approved: true
94131

95132
- name: Add sso admin user secret
96133
kubernetes.core.k8s:

0 commit comments

Comments
 (0)