Skip to content

Commit 13e493d

Browse files
vakwetuDeydra71
authored andcommitted
[federation] 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 da0d1c0 commit 13e493d

1 file changed

Lines changed: 76 additions & 42 deletions

File tree

roles/federation/tasks/run_keycloak_setup.yml

Lines changed: 76 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -55,52 +55,86 @@
5555
ansible.builtin.command:
5656
cmd: "oc apply -f {{ [ ansible_user_dir, 'ci-framework-data', 'tmp', 'rhsso-operator-olm.yaml' ] | path_join }}"
5757

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

105139
- name: Add sso admin user secret
106140
kubernetes.core.k8s:

0 commit comments

Comments
 (0)