Skip to content

Commit b0d2e43

Browse files
Merge pull request #1090 from Prashanth684/importmode-imagestream
MULTIARCH-4971: Sync ImageStreamImportMode setting in the image config status
2 parents 0df1888 + 59fb3ba commit b0d2e43

26 files changed

+1256
-46
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ require (
3030
github.com/gophercloud/utils/v2 v2.0.0-20240807081201-990d90b23c70
3131
github.com/goware/urlx v0.3.2
3232
github.com/jongio/azidext/go/azidext v0.5.0
33-
github.com/openshift/api v0.0.0-20240805090819-b8f07e1d8f62
33+
github.com/openshift/api v0.0.0-20240816151955-65532e7f773e
3434
github.com/openshift/build-machinery-go v0.0.0-20240419090851-af9c868bcf52
3535
github.com/openshift/client-go v0.0.0-20240528061634-b054aa794d87
3636
github.com/openshift/library-go v0.0.0-20240709182732-b94141242b0c

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -944,8 +944,8 @@ github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY
944944
github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
945945
github.com/onsi/gomega v1.31.0 h1:54UJxxj6cPInHS3a35wm6BK/F9nHYueZ1NVujHDrnXE=
946946
github.com/onsi/gomega v1.31.0/go.mod h1:DW9aCi7U6Yi40wNVAvT6kzFnEVEI5n3DloYBiKiT6zk=
947-
github.com/openshift/api v0.0.0-20240805090819-b8f07e1d8f62 h1:2jyUqwnmL6DvVOfRz7yv21w3OjzrBe6qg0Ewxf+lIsk=
948-
github.com/openshift/api v0.0.0-20240805090819-b8f07e1d8f62/go.mod h1:OOh6Qopf21pSzqNVCB5gomomBXb8o5sGKZxG2KNpaXM=
947+
github.com/openshift/api v0.0.0-20240816151955-65532e7f773e h1:xypovjFuxCGdcxu2E1WJsBS47ZXyI8wQyEaeHQXrhFY=
948+
github.com/openshift/api v0.0.0-20240816151955-65532e7f773e/go.mod h1:OOh6Qopf21pSzqNVCB5gomomBXb8o5sGKZxG2KNpaXM=
949949
github.com/openshift/build-machinery-go v0.0.0-20240419090851-af9c868bcf52 h1:bqBwrXG7sbJUqP1Og1bR8FvVh7qb7CrMgy9saKmOZFs=
950950
github.com/openshift/build-machinery-go v0.0.0-20240419090851-af9c868bcf52/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
951951
github.com/openshift/client-go v0.0.0-20240528061634-b054aa794d87 h1:JtLhaGpSEconE+1IKmIgCOof/Len5ceG6H1pk43yv5U=

pkg/operator/imageconfig.go

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
configapi "github.com/openshift/api/config/v1"
2424
operatorv1 "github.com/openshift/api/operator/v1"
2525
configset "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
26+
configv1informers "github.com/openshift/client-go/config/informers/externalversions/config/v1"
2627
routev1informers "github.com/openshift/client-go/route/informers/externalversions/route/v1"
2728
routev1lister "github.com/openshift/client-go/route/listers/route/v1"
2829
"github.com/openshift/library-go/pkg/operator/v1helpers"
@@ -36,26 +37,30 @@ import (
3637
// Watches for changes on image registry routes and services, updating
3738
// the resource status appropriately.
3839
type ImageConfigController struct {
39-
configClient configset.ConfigV1Interface
40-
operatorClient v1helpers.OperatorClient
41-
routeLister routev1lister.RouteNamespaceLister
42-
serviceLister corev1listers.ServiceNamespaceLister
43-
cachesToSync []cache.InformerSynced
44-
queue workqueue.RateLimitingInterface
40+
configClient configset.ConfigV1Interface
41+
operatorClient v1helpers.OperatorClient
42+
routeLister routev1lister.RouteNamespaceLister
43+
serviceLister corev1listers.ServiceNamespaceLister
44+
cachesToSync []cache.InformerSynced
45+
queue workqueue.RateLimitingInterface
46+
imageStreamImportModeEnabled bool
4547
}
4648

4749
func NewImageConfigController(
4850
configClient configset.ConfigV1Interface,
4951
operatorClient v1helpers.OperatorClient,
5052
routeInformer routev1informers.RouteInformer,
5153
serviceInformer corev1informers.ServiceInformer,
54+
imageConfigInformer configv1informers.ImageInformer,
55+
imageStreamImportModeEnabled bool,
5256
) (*ImageConfigController, error) {
5357
icc := &ImageConfigController{
54-
configClient: configClient,
55-
operatorClient: operatorClient,
56-
routeLister: routeInformer.Lister().Routes(defaults.ImageRegistryOperatorNamespace),
57-
serviceLister: serviceInformer.Lister().Services(defaults.ImageRegistryOperatorNamespace),
58-
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "ImageConfigController"),
58+
configClient: configClient,
59+
operatorClient: operatorClient,
60+
routeLister: routeInformer.Lister().Routes(defaults.ImageRegistryOperatorNamespace),
61+
serviceLister: serviceInformer.Lister().Services(defaults.ImageRegistryOperatorNamespace),
62+
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "ImageConfigController"),
63+
imageStreamImportModeEnabled: imageStreamImportModeEnabled,
5964
}
6065

6166
if _, err := serviceInformer.Informer().AddEventHandler(icc.eventHandler()); err != nil {
@@ -68,6 +73,12 @@ func NewImageConfigController(
6873
}
6974
icc.cachesToSync = append(icc.cachesToSync, routeInformer.Informer().HasSynced)
7075

76+
if imageStreamImportModeEnabled {
77+
if _, err := imageConfigInformer.Informer().AddEventHandler(icc.eventHandler()); err != nil {
78+
return nil, err
79+
}
80+
icc.cachesToSync = append(icc.cachesToSync, imageConfigInformer.Informer().HasSynced)
81+
}
7182
return icc, nil
7283
}
7384

@@ -159,6 +170,20 @@ func (icc *ImageConfigController) syncImageStatus() error {
159170
cfg.Status.InternalRegistryHostname = internalHostname
160171
modified = true
161172
}
173+
if icc.imageStreamImportModeEnabled {
174+
var importmode configapi.ImportModeType
175+
if cfg.Spec.ImageStreamImportMode != "" {
176+
importmode = cfg.Spec.ImageStreamImportMode
177+
} else {
178+
// TODO: once clusterversion reports the type of payload in its status, use that to determine what the default will be
179+
// i.e, multi payload => PreserveOriginal, single arch payload => Legacy
180+
importmode = configapi.ImportModeLegacy
181+
}
182+
if cfg.Status.ImageStreamImportMode != importmode {
183+
cfg.Status.ImageStreamImportMode = importmode
184+
modified = true
185+
}
186+
}
162187

163188
if modified {
164189
if _, err := icc.configClient.Images().UpdateStatus(context.TODO(), cfg, metav1.UpdateOptions{}); err != nil {

pkg/operator/starter.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"k8s.io/klog/v2"
1212

1313
configv1 "github.com/openshift/api/config/v1"
14+
"github.com/openshift/api/features"
1415
configclient "github.com/openshift/client-go/config/clientset/versioned"
1516
configinformers "github.com/openshift/client-go/config/informers/externalversions"
1617
imageclient "github.com/openshift/client-go/image/clientset/versioned"
@@ -110,11 +111,19 @@ func RunOperator(ctx context.Context, kubeconfig *restclient.Config) error {
110111
return err
111112
}
112113

114+
featureGates, err := featureGateAccessor.CurrentFeatureGates()
115+
if err != nil {
116+
return err
117+
}
118+
imageStreamImportModeEnabled := featureGates.Enabled(features.FeatureGateImageStreamImportMode)
119+
113120
imageConfigStatusController, err := NewImageConfigController(
114121
configClient.ConfigV1(),
115122
configOperatorClient,
116123
routeInformers.Route().V1().Routes(),
117124
kubeInformers.Core().V1().Services(),
125+
configInformers.Config().V1().Images(),
126+
imageStreamImportModeEnabled,
118127
)
119128
if err != nil {
120129
return err

vendor/github.com/openshift/api/README.md

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/types_image.go

Lines changed: 52 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/openshift/api/envtest-releases.yaml

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)