Skip to content

Commit d8dd47e

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 d3f14ca commit d8dd47e

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
@@ -48,52 +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+
kubeconfig: "{{ cifmw_openshift_kubeconfig }}"
5354
api_version: operators.coreos.com/v1alpha1
54-
kind: InstallPlan
55-
namespace: "{{ cifmw_federation_operator_namespace }}"
55+
kind: ClusterServiceVersion
56+
namespace: "{{ item }}"
5657
label_selectors:
57-
- "operators.coreos.com/rhsso-operator.{{ cifmw_federation_operator_namespace }}"
58-
register: ip_list
59-
until: >-
60-
ip_list.resources |
61-
selectattr('metadata.labels', 'defined') |
62-
map(attribute='metadata.labels') |
63-
map('dict2items') |
64-
flatten |
65-
selectattr('key', 'match', '.*rhsso-operator.*') |
66-
list | length > 0
67-
retries: 30
68-
delay: 40
69-
70-
- name: Get rhsso install plan name
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
7166
ansible.builtin.set_fact:
72-
_rhsso_ip_name: "{{ item.metadata.name }}"
73-
_rhsso_ip_namespace: "{{ item.metadata.namespace }}"
74-
loop: >-
75-
{{
76-
ip_list.resources |
77-
selectattr('metadata.labels', 'defined') |
78-
list
79-
}}
80-
when: >-
81-
item.metadata.labels | dict2items |
82-
selectattr('key', 'match', '.*rhsso-operator.*') |
83-
list | length > 0
84-
loop_control:
85-
label: "{{ item.metadata.name }}"
86-
87-
- name: Approve rhsso operator install plan
88-
kubernetes.core.k8s:
89-
kubeconfig: "{{ cifmw_openshift_kubeconfig }}"
90-
api_version: operators.coreos.com/v1alpha1
91-
kind: InstallPlan
92-
name: "{{ _rhsso_ip_name }}"
93-
namespace: "{{ _rhsso_ip_namespace }}"
94-
definition:
95-
spec:
96-
approved: true
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
97131

98132
- name: Add sso admin user secret
99133
kubernetes.core.k8s:

0 commit comments

Comments
 (0)