Skip to content

Commit 8b88857

Browse files
author
Tyler Slaton
committed
fix(openshift): use env var instead of clusterversion status
Get the current OpenShift release version from the OPENSHIFT_RELEASE environment variable since the behavior of the original source -- the ClusterVersion desired release status field -- has changed. Signed-off-by: Nick Hale <[email protected]>
1 parent 83e3ebf commit 8b88857

File tree

1 file changed

+30
-13
lines changed

1 file changed

+30
-13
lines changed

pkg/controller/operators/openshift/helpers.go

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"os"
78
"strings"
9+
"sync"
810

911
semver "github.com/blang/semver/v4"
1012
configv1 "github.com/openshift/api/config/v1"
@@ -119,17 +121,17 @@ func transientErrors(err error) error {
119121
}
120122

121123
func incompatibleOperators(ctx context.Context, cli client.Client) (skews, error) {
122-
desired, err := desiredRelease(ctx, cli)
124+
current, err := currentRelease(ctx)
123125
if err != nil {
124126
return nil, err
125127
}
126128

127-
if desired == nil {
129+
if current == nil {
128130
// Note: This shouldn't happen
129131
return nil, fmt.Errorf("failed to determine current OpenShift Y-stream release")
130132
}
131133

132-
next, err := nextY(*desired)
134+
next, err := nextY(*current)
133135
if err != nil {
134136
return nil, err
135137
}
@@ -168,24 +170,39 @@ func incompatibleOperators(ctx context.Context, cli client.Client) (skews, error
168170
return incompatible, nil
169171
}
170172

171-
func desiredRelease(ctx context.Context, cli client.Client) (*semver.Version, error) {
172-
cv := configv1.ClusterVersion{}
173-
if err := cli.Get(ctx, client.ObjectKey{Name: "version"}, &cv); err != nil { // "version" is the name of OpenShift's ClusterVersion singleton
174-
return nil, &transientError{fmt.Errorf("failed to get ClusterVersion: %w", err)}
173+
var (
174+
openshiftRelease *semver.Version
175+
releaseMutex sync.Mutex
176+
)
177+
178+
const (
179+
releaseEnvVar = "OPENSHIFT_RELEASE"
180+
)
181+
182+
func currentRelease(ctx context.Context) (*semver.Version, error) {
183+
releaseMutex.Lock()
184+
defer releaseMutex.Unlock()
185+
186+
if openshiftRelease != nil {
187+
// We've already got the version
188+
return openshiftRelease, nil
175189
}
176190

177-
v := cv.Status.Desired.Version
178-
if v == "" {
179-
// The release version hasn't been set yet
180-
return nil, fmt.Errorf("desired release version missing from ClusterVersion")
191+
// Get the raw version from the OPENSHIFT_RELEASE environment variable
192+
raw, ok := os.LookupEnv(releaseEnvVar)
193+
if !ok {
194+
// No env var set, try again later
195+
return nil, fmt.Errorf(releaseEnvVar)
181196
}
182197

183-
desired, err := semver.ParseTolerant(v)
198+
release, err := semver.ParseTolerant(raw)
184199
if err != nil {
185200
return nil, fmt.Errorf("cluster version has invalid desired release version: %w", err)
186201
}
187202

188-
return &desired, nil
203+
openshiftRelease = &release
204+
205+
return openshiftRelease, nil
189206
}
190207

191208
func nextY(v semver.Version) (semver.Version, error) {

0 commit comments

Comments
 (0)