Skip to content

Commit 38012d8

Browse files
committed
fix(init): move cleanup to olm startup
init container is not getting a serviceaccount token mounted for some reason, this sidesteps the issue. previous commit remains in case we can switch back to an init container at some point
1 parent 9564623 commit 38012d8

File tree

10 files changed

+138
-192
lines changed

10 files changed

+138
-192
lines changed

Dockerfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ LABEL io.openshift.release.operator=true
3232
COPY --from=builder /build/bin/olm /bin/olm
3333
COPY --from=builder /build/bin/catalog /bin/catalog
3434
COPY --from=builder /build/bin/package-server /bin/package-server
35-
COPY --from=builder /build/bin/init /bin/init
3635

3736
# This image doesn't need to run as root user.
3837
USER 1001

cmd/init/main.go

Lines changed: 0 additions & 149 deletions
This file was deleted.

cmd/olm/cleanup.go

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package main
2+
3+
import (
4+
"time"
5+
6+
"github.com/sirupsen/logrus"
7+
"k8s.io/apimachinery/pkg/api/errors"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
"k8s.io/apimachinery/pkg/util/wait"
10+
11+
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
12+
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
13+
)
14+
15+
const (
16+
pollInterval = 1 * time.Second
17+
pollDuration = 5 * time.Minute
18+
)
19+
20+
type checkResourceFunc func() error
21+
type deleteResourceFunc func() error
22+
23+
func cleanup(logger *logrus.Logger, c operatorclient.ClientInterface, crc versioned.Interface) {
24+
if err := waitForDelete(checkCatalogSource(crc, "olm-operators"), deleteCatalogSource(crc, "olm-operators")); err != nil {
25+
logger.WithError(err).Fatal("couldn't clean previous release")
26+
}
27+
28+
if err := waitForDelete(checkConfigMap(c, "olm-operators"), deleteConfigMap(c, "olm-operators")); err != nil {
29+
logger.WithError(err).Fatal("couldn't clean previous release")
30+
}
31+
32+
if err := waitForDelete(checkSubscription(crc, "packageserver"), deleteSubscription(crc, "packageserver")); err != nil {
33+
logger.WithError(err).Fatal("couldn't clean previous release")
34+
}
35+
36+
if err := waitForDelete(checkClusterServiceVersion(crc, "packageserver.v0.10.0"), deleteClusterServiceVersion(crc, "packageserver.v0.10.0")); err != nil {
37+
logger.WithError(err).Fatal("couldn't clean previous release")
38+
}
39+
40+
if err := waitForDelete(checkClusterServiceVersion(crc, "packageserver.v0.9.0"), deleteClusterServiceVersion(crc, "packageserver.v0.9.0")); err != nil {
41+
logger.WithError(err).Fatal("couldn't clean previous release")
42+
}
43+
}
44+
45+
func waitForDelete(checkResource checkResourceFunc, deleteResource deleteResourceFunc) error {
46+
if err := checkResource(); err != nil && errors.IsNotFound(err) {
47+
return nil
48+
}
49+
if err := deleteResource(); err != nil {
50+
return err
51+
}
52+
var err error
53+
err = wait.Poll(pollInterval, pollDuration, func() (bool, error) {
54+
err := checkResource()
55+
if errors.IsNotFound(err) {
56+
return true, nil
57+
}
58+
if err != nil {
59+
return false, err
60+
}
61+
return false, nil
62+
})
63+
64+
return err
65+
}
66+
67+
func checkClusterServiceVersion(crc versioned.Interface, name string) checkResourceFunc {
68+
return func() error {
69+
_, err := crc.OperatorsV1alpha1().ClusterServiceVersions(*namespace).Get(name, metav1.GetOptions{})
70+
return err
71+
}
72+
}
73+
74+
func deleteClusterServiceVersion(crc versioned.Interface, name string) deleteResourceFunc {
75+
return func() error {
76+
return crc.OperatorsV1alpha1().ClusterServiceVersions(*namespace).Delete(name, metav1.NewDeleteOptions(0))
77+
}
78+
}
79+
80+
func checkSubscription(crc versioned.Interface, name string) checkResourceFunc {
81+
return func() error {
82+
_, err := crc.OperatorsV1alpha1().Subscriptions(*namespace).Get(name, metav1.GetOptions{})
83+
return err
84+
}
85+
}
86+
87+
func deleteSubscription(crc versioned.Interface, name string) deleteResourceFunc {
88+
return func() error {
89+
return crc.OperatorsV1alpha1().Subscriptions(*namespace).Delete(name, metav1.NewDeleteOptions(0))
90+
}
91+
}
92+
93+
func checkConfigMap(c operatorclient.ClientInterface, name string) checkResourceFunc {
94+
return func() error {
95+
_, err := c.KubernetesInterface().CoreV1().ConfigMaps(*namespace).Get(name, metav1.GetOptions{})
96+
return err
97+
}
98+
}
99+
100+
func deleteConfigMap(c operatorclient.ClientInterface, name string) deleteResourceFunc {
101+
return func() error {
102+
return c.KubernetesInterface().CoreV1().ConfigMaps(*namespace).Delete(name, metav1.NewDeleteOptions(0))
103+
}
104+
}
105+
106+
func checkCatalogSource(crc versioned.Interface, name string) checkResourceFunc {
107+
return func() error {
108+
_, err := crc.OperatorsV1alpha1().CatalogSources(*namespace).Get(name, metav1.GetOptions{})
109+
return err
110+
}
111+
}
112+
113+
func deleteCatalogSource(crc versioned.Interface, name string) deleteResourceFunc {
114+
return func() error {
115+
return crc.OperatorsV1alpha1().CatalogSources(*namespace).Delete(name, metav1.NewDeleteOptions(0))
116+
}
117+
}

cmd/olm/main.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ var (
6363

6464
profiling = flag.Bool(
6565
"profiling", false, "serve profiling data (on port 8080)")
66+
67+
namespace = flag.String(
68+
"namespace", "", "namespace where cleanup runs")
6669
)
6770

6871
func init() {
@@ -165,6 +168,8 @@ func main() {
165168
log.Fatalf("error configuring client: %s", err.Error())
166169
}
167170

171+
cleanup(logger, opClient, crClient)
172+
168173
// Create a new instance of the operator.
169174
op, err := olm.NewOperator(
170175
ctx,

deploy/chart/templates/0000_50_olm_07-olm-operator.deployment.yaml

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,13 @@ spec:
2121
{{- if and .Values.installType (eq .Values.installType "ocp") }}
2222
priorityClassName: "system-cluster-critical"
2323
{{- end }}
24-
initContainers:
25-
- name: init
26-
command:
27-
- /bin/init
28-
- -namespace
29-
- ${NAMESPACE}
30-
image: {{ .Values.olm.image.ref }}
31-
imagePullPolicy: {{ .Values.olm.image.pullPolicy }}
32-
terminationMessagePolicy: FallbackToLogsOnError
33-
env:
34-
- name: NAMESPACE
35-
valueFrom:
36-
fieldRef:
37-
fieldPath: metadata.namespace
3824
containers:
3925
- name: olm-operator
4026
command:
4127
- /bin/olm
4228
args:
29+
- -namespace
30+
- ${OPERATOR_NAMESPACE}
4331
{{- if .Values.watchedNamespaces }}
4432
- -watchedNamespaces
4533
- {{ .Values.watchedNamespaces }}

e2e.Dockerfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ WORKDIR /
2121
COPY --from=builder /go/src/github.com/operator-framework/operator-lifecycle-manager/bin/olm /bin/olm
2222
COPY --from=builder /go/src/github.com/operator-framework/operator-lifecycle-manager/bin/catalog /bin/catalog
2323
COPY --from=builder /go/src/github.com/operator-framework/operator-lifecycle-manager/bin/package-server /bin/package-server
24-
COPY --from=builder /go/src/github.com/operator-framework/operator-lifecycle-manager/build/bin/init /bin/init
2524
EXPOSE 8080
2625
EXPOSE 5443
2726
CMD ["/bin/olm"]

local.Dockerfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ WORKDIR /
33
COPY olm /bin/olm
44
COPY catalog /bin/catalog
55
COPY package-server /bin/package-server
6-
COPY init /bin/init
76
EXPOSE 8080
87
EXPOSE 5443
98
CMD ["/bin/olm"]

manifests/0000_50_olm_07-olm-operator.deployment.yaml

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,13 @@ spec:
1919
spec:
2020
serviceAccountName: olm-operator-serviceaccount
2121
priorityClassName: "system-cluster-critical"
22-
initContainers:
23-
- name: init
24-
command:
25-
- /bin/init
26-
- -namespace
27-
- ${NAMESPACE}
28-
image: quay.io/operator-framework/olm@sha256:f965474776bada158e4bf7be5c84b54460843e7478f06060990d2fdeb31b0b90
29-
imagePullPolicy: IfNotPresent
30-
terminationMessagePolicy: FallbackToLogsOnError
31-
env:
32-
- name: NAMESPACE
33-
valueFrom:
34-
fieldRef:
35-
fieldPath: metadata.namespace
3622
containers:
3723
- name: olm-operator
3824
command:
3925
- /bin/olm
4026
args:
27+
- -namespace
28+
- ${OPERATOR_NAMESPACE}
4129
- -writeStatusName
4230
- operator-lifecycle-manager
4331
- -writePackageServerStatusName

0 commit comments

Comments
 (0)