@@ -39,6 +39,7 @@ const (
3939 configMapVersionLabel = "provider.cluster.x-k8s.io/version"
4040 configMapTypeLabel = "provider.cluster.x-k8s.io/type"
4141 configMapNameLabel = "provider.cluster.x-k8s.io/name"
42+ configMapSourceLabel = "provider.cluster.x-k8s.io/source"
4243 operatorManagedLabel = "managed-by.operator.cluster.x-k8s.io"
4344
4445 compressedAnnotation = "provider.cluster.x-k8s.io/compressed"
@@ -48,6 +49,7 @@ const (
4849 additionalManifestsConfigMapKey = "manifests"
4950
5051 maxConfigMapSize = 1 * 1024 * 1024
52+ ociSource = "oci"
5153)
5254
5355// downloadManifests downloads CAPI manifests from a url.
@@ -96,6 +98,12 @@ func (p *phaseReconciler) downloadManifests(ctx context.Context) (reconcile.Resu
9698 p .provider .SetSpec (spec )
9799 }
98100
101+ if p .provider .GetSpec ().FetchConfig .OCI != nil {
102+ err := p .fetchOCI (ctx )
103+
104+ return reconcile.Result {}, wrapPhaseError (err , operatorv1 .ComponentsFetchErrorReason , operatorv1 .ProviderInstalledCondition )
105+ }
106+
99107 // Fetch the provider metadata and components yaml files from the provided repository GitHub/GitLab.
100108 metadataFile , err := repo .GetFile (ctx , spec .Version , metadataFile )
101109 if err != nil {
@@ -113,7 +121,7 @@ func (p *phaseReconciler) downloadManifests(ctx context.Context) (reconcile.Resu
113121
114122 withCompression := needToCompress (metadataFile , componentsFile )
115123
116- if err := p .createManifestsConfigMap (ctx , metadataFile , componentsFile , withCompression ); err != nil {
124+ if err := p .createManifestsConfigMap (ctx , p . prepareConfigMapLabels (), metadataFile , componentsFile , withCompression ); err != nil {
117125 err = fmt .Errorf ("failed to create config map for provider %q: %w" , p .provider .GetName (), err )
118126
119127 return reconcile.Result {}, wrapPhaseError (err , operatorv1 .ComponentsFetchErrorReason , operatorv1 .ProviderInstalledCondition )
@@ -149,14 +157,14 @@ func (p *phaseReconciler) prepareConfigMapLabels() map[string]string {
149157}
150158
151159// createManifestsConfigMap creates a config map with downloaded manifests.
152- func (p * phaseReconciler ) createManifestsConfigMap (ctx context.Context , metadata , components []byte , compress bool ) error {
160+ func (p * phaseReconciler ) createManifestsConfigMap (ctx context.Context , labels map [ string ] string , metadata , components []byte , compress bool ) error {
153161 configMapName := fmt .Sprintf ("%s-%s-%s" , p .provider .GetType (), p .provider .GetName (), p .provider .GetSpec ().Version )
154162
155163 configMap := & corev1.ConfigMap {
156164 ObjectMeta : metav1.ObjectMeta {
157165 Name : configMapName ,
158166 Namespace : p .provider .GetNamespace (),
159- Labels : p . prepareConfigMapLabels () ,
167+ Labels : labels ,
160168 },
161169 Data : map [string ]string {
162170 metadataConfigMapKey : string (metadata ),
@@ -211,12 +219,18 @@ func providerLabelSelector(provider operatorv1.GenericProvider) *metav1.LabelSel
211219 return provider .GetSpec ().FetchConfig .Selector
212220 }
213221
222+ if provider .GetSpec ().FetchConfig != nil && provider .GetSpec ().FetchConfig .OCI != nil {
223+ return & metav1.LabelSelector {
224+ MatchLabels : ociLabels (provider ),
225+ }
226+ }
227+
214228 return & metav1.LabelSelector {
215229 MatchLabels : providerLabels (provider ),
216230 }
217231}
218232
219- // prepareConfigMapLabels returns default set of labels that identify a config map with downloaded manifests.
233+ // providerLabels returns default set of labels that identify a config map with downloaded manifests.
220234func providerLabels (provider operatorv1.GenericProvider ) map [string ]string {
221235 return map [string ]string {
222236 configMapVersionLabel : provider .GetSpec ().Version ,
@@ -226,6 +240,17 @@ func providerLabels(provider operatorv1.GenericProvider) map[string]string {
226240 }
227241}
228242
243+ // ociLabels returns default set of labels that identify a config map created from OCI artifacts.
244+ func ociLabels (provider operatorv1.GenericProvider ) map [string ]string {
245+ return map [string ]string {
246+ configMapVersionLabel : provider .GetSpec ().Version ,
247+ configMapTypeLabel : provider .GetType (),
248+ configMapNameLabel : provider .GetName (),
249+ configMapSourceLabel : ociSource ,
250+ operatorManagedLabel : "true" ,
251+ }
252+ }
253+
229254// needToCompress checks whether the input data exceeds the maximum configmap
230255// size limit and returns whether it should be compressed.
231256func needToCompress (bs ... []byte ) bool {
0 commit comments