@@ -23,6 +23,7 @@ import (
23
23
configapi "github.com/openshift/api/config/v1"
24
24
operatorv1 "github.com/openshift/api/operator/v1"
25
25
configset "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
26
+ configv1informers "github.com/openshift/client-go/config/informers/externalversions/config/v1"
26
27
routev1informers "github.com/openshift/client-go/route/informers/externalversions/route/v1"
27
28
routev1lister "github.com/openshift/client-go/route/listers/route/v1"
28
29
"github.com/openshift/library-go/pkg/operator/v1helpers"
@@ -36,26 +37,30 @@ import (
36
37
// Watches for changes on image registry routes and services, updating
37
38
// the resource status appropriately.
38
39
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
45
47
}
46
48
47
49
func NewImageConfigController (
48
50
configClient configset.ConfigV1Interface ,
49
51
operatorClient v1helpers.OperatorClient ,
50
52
routeInformer routev1informers.RouteInformer ,
51
53
serviceInformer corev1informers.ServiceInformer ,
54
+ imageConfigInformer configv1informers.ImageInformer ,
55
+ imageStreamImportModeEnabled bool ,
52
56
) (* ImageConfigController , error ) {
53
57
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 ,
59
64
}
60
65
61
66
if _ , err := serviceInformer .Informer ().AddEventHandler (icc .eventHandler ()); err != nil {
@@ -68,6 +73,12 @@ func NewImageConfigController(
68
73
}
69
74
icc .cachesToSync = append (icc .cachesToSync , routeInformer .Informer ().HasSynced )
70
75
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
+ }
71
82
return icc , nil
72
83
}
73
84
@@ -159,6 +170,20 @@ func (icc *ImageConfigController) syncImageStatus() error {
159
170
cfg .Status .InternalRegistryHostname = internalHostname
160
171
modified = true
161
172
}
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
+ }
162
187
163
188
if modified {
164
189
if _ , err := icc .configClient .Images ().UpdateStatus (context .TODO (), cfg , metav1.UpdateOptions {}); err != nil {
0 commit comments