1+ #! /usr/bin/env bash
2+
3+ # To run the script , you have to export the IIB_ID like so
4+ # export IIB_ID=581525
5+
6+ # There are 2 options '-i' and '-m' (for first install on the cluster or for migrating to nightly) that you have to provide
7+ # ./olm-install-script -i
8+ # or
9+ # ./olm-install-script -m
10+
11+ set -e
12+
13+ if [ ! ${IIB_ID} ] ;
14+ then
15+ echo -e " \nPlease set the environment variable IIB_ID\n"
16+ exit
17+ fi
18+
19+
20+ REGISTRY_NAME=${OPERATOR_REGISTRY:- " brew.registry.redhat.io/rh-osbs" }
21+ REPO_NAME=${REPO_NAME:- " iib" }
22+
23+ INDEX=" ${REGISTRY_NAME} /${REPO_NAME} :$IIB_ID "
24+
25+ echo " INDEX IMAGE:- $INDEX "
26+
27+ # patch to disable default catalog source
28+ oc patch operatorhub.config.openshift.io/cluster -p=' {"spec":{"disableAllDefaultSources":true}}' --type=merge
29+
30+ # apply image content source policy
31+
32+ cat << EOF | oc apply -f -
33+ apiVersion: operator.openshift.io/v1alpha1
34+ kind: ImageContentSourcePolicy
35+ metadata:
36+ name: brew-registry
37+ spec:
38+ repositoryDigestMirrors:
39+ - mirrors:
40+ - brew.registry.redhat.io
41+ source: registry.redhat.io
42+ - mirrors:
43+ - brew.registry.redhat.io
44+ source: registry.stage.redhat.io
45+ - mirrors:
46+ - brew.registry.redhat.io
47+ source: registry-proxy.engineering.redhat.com
48+ EOF
49+
50+ # apply catalog source
51+ cat << EOF | oc apply -f -
52+ apiVersion: operators.coreos.com/v1alpha1
53+ kind: CatalogSource
54+ metadata:
55+ name: redhat-operators
56+ namespace: openshift-marketplace
57+ spec:
58+ displayName: ''
59+ image: ${INDEX}
60+ publisher: ''
61+ sourceType: grpc
62+ EOF
63+
64+ # Wait for the Catalog source to be ready
65+ i=0
66+ until [ $( oc get catalogsource -n openshift-marketplace -o jsonpath=" {.items[0].status.connectionState.lastObservedState}" ) = " READY" ]
67+ do
68+ echo " Waiting for the catalog source to be in READY state"
69+ i=` expr $i + 1`
70+ sleep 10
71+ if [[ $i -eq 20 ]];
72+ then
73+ echo " Catalog source not READY"
74+ oc patch operatorhub.config.openshift.io/cluster -p=' {"spec":{"disableAllDefaultSources":false}}' --type=merge
75+ exit
76+ fi
77+ done
78+
79+ # install nightly operator on fresh cluster
80+
81+ function apply_subscription() {
82+
83+ # create namespace
84+ oc create ns openshift-gitops-operator
85+
86+ # create OperatorGroup
87+ cat << EOF | oc apply -f -
88+ apiVersion: operators.coreos.com/v1
89+ kind: OperatorGroup
90+ metadata:
91+ name: gitops-operator-group
92+ namespace: openshift-gitops-operator
93+ spec: {}
94+ EOF
95+
96+ # create Subscription
97+ cat << EOF | oc apply -f -
98+ apiVersion: operators.coreos.com/v1alpha1
99+ kind: Subscription
100+ metadata:
101+ name: openshift-gitops-operator
102+ namespace: openshift-gitops-operator
103+ spec:
104+ channel: nightly
105+ installPlanApproval: Automatic
106+ name: openshift-gitops-operator
107+ source: redhat-operators
108+ sourceNamespace: openshift-marketplace
109+ EOF
110+
111+ }
112+
113+ key=$1
114+
115+ case $key in
116+ -i)
117+ echo " Installing Nightly Operator"
118+ apply_subscription
119+ ;;
120+ -m)
121+
122+ echo " Migrating to Nightly Operator"
123+
124+ # patch the channel to nightly for automatic upgrade
125+ oc patch subscription openshift-gitops-operator -n openshift-gitops-operator --type=' merge' -p=' {"spec":{"channel": "nightly"}}'
126+ ;;
127+ * )
128+ echo " [ERROR] Invalid argument $key "
129+ exit 1
130+ ;;
131+ esac
132+
133+ # Wait for the operator to upgrade
134+ NEW_VER=" 99.9.0"
135+ NEW_BUILD=" openshift-gitops-operator.v$NEW_VER "
136+ until [[ $( oc get csv -n openshift-operators -o name) == * " $NEW_BUILD " * ]];
137+ do
138+ echo " Operator upgrading..."
139+ sleep 10
140+ if [[ $( oc get csv -n openshift-operators -o name) == * " $NEW_BUILD " * ]]; then
141+ break
142+ fi
143+ done
144+ echo -e " \nOperator upgraded, Waiting for the pods to come up"
145+
146+ # Establish some time for the pods to refresh
147+ sleep 30
148+
149+ # Wait for the deployments to be successfully rolled out
150+ deployments=($( echo $( oc get deployments -n openshift-gitops --no-headers -o custom-columns=' :metadata.name' ) ) )
151+ for deployment in " ${deployments[@]} " ; do
152+ oc rollout status deployment/" ${deployment} " -n openshift-gitops --timeout=60s
153+ done
154+
155+ echo -e " \nProvide cluster-admin access to argocd-application-controller service account"
156+ oc adm policy add-cluster-role-to-user cluster-admin system:serviceaccount:openshift-gitops:openshift-gitops-argocd-application-controller
157+
158+ # Re-enable the default Catalog Sources after the upgrade testing
159+ oc patch operatorhub.config.openshift.io/cluster -p=' {"spec":{"disableAllDefaultSources":false}}' --type=merge
0 commit comments