55# -TODO: role data
66set -ex
77
8+ OUT_DATA=bindata
9+ EXTRACT_DIR=tmp/bindata
10+
11+ mkdir -p " $EXTRACT_DIR "
12+ mkdir -p " $OUT_DATA /crds"
13+
814function extract_bundle {
915 local IN_DIR=$1
1016 local OUT_DIR=$2
@@ -13,11 +19,125 @@ function extract_bundle {
1319 done
1420}
1521
16- OUT_DATA=bindata
17- EXTRACT_DIR=tmp/bindata
1822
19- mkdir -p " $EXTRACT_DIR "
20- mkdir -p " $OUT_DATA /crds"
23+ function extract_webhooks {
24+ local CSV_FILENAME=$1
25+ local OPERATOR_NAME=$2
26+ local TYPE=$3
27+
28+ cat $CSV_FILENAME | yq -r " .spec.webhookdefinitions.[] | select(.type == \" $TYPE \" )" | \
29+ sed -e ' /^containerPort:/d' | \
30+ sed -e ' /^deploymentName:/d' | \
31+ sed -e ' /^targetPort:/d' | \
32+ sed -e ' /^type:/d' | \
33+ sed -e ' s|^| |' | sed -e ' s|.*admissionReviewVersions:|- admissionReviewVersions:|' | \
34+ sed -e ' s|.*generateName:| name:|' | \
35+ sed -e ' s| - v1| - v1|' | \
36+ sed -e " s|.*webhookPath:| clientConfig:\n service:\n name: ${OPERATOR_NAME} -webhook-service\n namespace: '{{ .OperatorNamespace }}'\n path:|"
37+
38+ }
39+
40+
41+ function write_webhooks {
42+ local CSV_FILENAME=$1
43+ local OPERATOR_NAME=$2
44+
45+ MUTATING_WEBHOOKS=$( extract_webhooks " $CSV_FILENAME " " $OPERATOR_NAME " " MutatingAdmissionWebhook" )
46+ VALIDATING_WEBHOOKS=$( extract_webhooks " $CSV_FILENAME " " $OPERATOR_NAME " " ValidatingAdmissionWebhook" )
47+
48+ cat > operator/$OPERATOR_NAME -webhooks.yaml << EOF_CAT
49+ apiVersion: v1
50+ kind: Service
51+ metadata:
52+ labels:
53+ app.kubernetes.io/component: webhook
54+ app.kubernetes.io/created-by: openstack-operator
55+ app.kubernetes.io/instance: webhook-service
56+ app.kubernetes.io/managed-by: kustomize
57+ app.kubernetes.io/name: service
58+ app.kubernetes.io/part-of: $OPERATOR_NAME
59+ name: $OPERATOR_NAME -webhook-service
60+ namespace: '{{ .OperatorNamespace }}'
61+ spec:
62+ ports:
63+ - port: 443
64+ protocol: TCP
65+ targetPort: 9443
66+ selector:
67+ openstack.org/operator-name: ${OPERATOR_NAME// -operator}
68+ ---
69+ apiVersion: cert-manager.io/v1
70+ kind: Certificate
71+ metadata:
72+ labels:
73+ app.kubernetes.io/component: certificate
74+ app.kubernetes.io/created-by: openstack-operator
75+ app.kubernetes.io/instance: serving-cert
76+ app.kubernetes.io/managed-by: kustomize
77+ app.kubernetes.io/name: certificate
78+ app.kubernetes.io/part-of: $OPERATOR_NAME
79+ name: $OPERATOR_NAME -serving-cert
80+ namespace: '{{ .OperatorNamespace }}'
81+ spec:
82+ dnsNames:
83+ - $OPERATOR_NAME -webhook-service.{{ .OperatorNamespace }}.svc
84+ - $OPERATOR_NAME -webhook-service.{{ .OperatorNamespace }}.svc.cluster.local
85+ issuerRef:
86+ kind: Issuer
87+ name: $OPERATOR_NAME -selfsigned-issuer
88+ secretName: $OPERATOR_NAME -webhook-server-cert
89+ ---
90+ apiVersion: cert-manager.io/v1
91+ kind: Issuer
92+ metadata:
93+ labels:
94+ app.kubernetes.io/component: certificate
95+ app.kubernetes.io/created-by: openstack-operator
96+ app.kubernetes.io/instance: selfsigned-issuer
97+ app.kubernetes.io/managed-by: kustomize
98+ app.kubernetes.io/name: issuer
99+ app.kubernetes.io/part-of: $OPERATOR_NAME
100+ name: $OPERATOR_NAME -selfsigned-issuer
101+ namespace: '{{ .OperatorNamespace }}'
102+ spec:
103+ selfSigned: {}
104+ ---
105+ apiVersion: admissionregistration.k8s.io/v1
106+ kind: MutatingWebhookConfiguration
107+ metadata:
108+ annotations:
109+ cert-manager.io/inject-ca-from: '{{ .OperatorNamespace }}/$OPERATOR_NAME -serving-cert'
110+ creationTimestamp: null
111+ labels:
112+ app.kubernetes.io/component: webhook
113+ app.kubernetes.io/created-by: openstack-operator
114+ app.kubernetes.io/instance: mutating-webhook-configuration
115+ app.kubernetes.io/managed-by: kustomize
116+ app.kubernetes.io/name: mutatingwebhookconfiguration
117+ app.kubernetes.io/part-of: $OPERATOR_NAME
118+ name: $OPERATOR_NAME -mutating-webhook-configuration
119+ webhooks:
120+ ${MUTATING_WEBHOOKS}
121+ ---
122+ apiVersion: admissionregistration.k8s.io/v1
123+ kind: ValidatingWebhookConfiguration
124+ metadata:
125+ annotations:
126+ cert-manager.io/inject-ca-from: '{{ .OperatorNamespace }}/$OPERATOR_NAME -serving-cert'
127+ creationTimestamp: null
128+ labels:
129+ app.kubernetes.io/component: webhook
130+ app.kubernetes.io/created-by: openstack-operator
131+ app.kubernetes.io/instance: validating-webhook-configuration
132+ app.kubernetes.io/managed-by: kustomize
133+ app.kubernetes.io/name: validatingwebhookconfiguration
134+ app.kubernetes.io/part-of: $OPERATOR_NAME
135+ name: $OPERATOR_NAME -validating-webhook-configuration
136+ webhooks:
137+ ${VALIDATING_WEBHOOKS}
138+ EOF_CAT
139+
140+ }
21141
22142for BUNDLE in $( hack/pin-bundle-images.sh | tr " ," " " ) ; do
23143 skopeo copy " docker://$BUNDLE " dir:${EXTRACT_DIR} /tmp;
@@ -30,13 +150,17 @@ grep -l CustomResourceDefinition manifests/* | xargs -I % sh -c 'cp % ./crds/'
30150
31151# extract role, clusterRole, and deployment from CSV's
32152for X in $( ls manifests/* clusterserviceversion.yaml) ; do
33- echo $OPERATOR_NAME
34153 OPERATOR_NAME=$( echo $X | sed -e " s|manifests\/\([^\.]*\)\..*|\1|" )
154+ echo $OPERATOR_NAME
35155 LEADER_ELECTION_ROLE_RULES=$( cat $X | yq -r .spec.install.spec.permissions | sed -e ' s|- rules:|rules:|' | sed -e ' s| ||' | sed -e ' / serviceAccountName.*/d'
36156)
37157 CLUSTER_ROLE_RULES=$( cat $X | yq -r .spec.install.spec.clusterPermissions| sed -e ' s|- rules:|rules:|' | sed -e ' s| ||' | sed -e ' / serviceAccountName.*/d'
38158)
39159
160+ if [[ " $OPERATOR_NAME " == " infra-operator" ]]; then
161+ write_webhooks " $X " " $OPERATOR_NAME "
162+ fi
163+
40164mkdir -p rbac
41165cat > rbac/$OPERATOR_NAME -rbac.yaml << EOF_CAT
42166# NOTE: this file is automatically generated by hack/sync-bindata.sh!
0 commit comments