diff --git a/control-plane-operator/controllers/hostedcontrolplane/ignitionserver/ignitionserver.go b/control-plane-operator/controllers/hostedcontrolplane/ignitionserver/ignitionserver.go index 496080537c0..ec0cd8421f3 100644 --- a/control-plane-operator/controllers/hostedcontrolplane/ignitionserver/ignitionserver.go +++ b/control-plane-operator/controllers/hostedcontrolplane/ignitionserver/ignitionserver.go @@ -5,7 +5,6 @@ import ( "context" "fmt" "net" - "strings" configv1 "github.com/openshift/api/config/v1" routev1 "github.com/openshift/api/route/v1" @@ -186,53 +185,40 @@ func ReconcileIgnitionServer(ctx context.Context, if configOperatorImage == "" { return fmt.Errorf("cluster-config-operator image not found in payload images") } + machineConfigOperatorImage := componentImages["machine-config-operator"] + if machineConfigOperatorImage == "" { + return fmt.Errorf("machine-config-operator image not found in payload images") + } servingCertSecretName := ignitionserver.IgnitionServingCertSecret("").Name if hcp.Spec.Platform.Type != hyperv1.IBMCloudPlatform { servingCertSecretName = manifests.IgnitionServerCertSecret("").Name } - var ( - icsFound bool - sourceRef reference.DockerImageReference - mirrorImage string - ) - - if openShiftRegistryOverrides != "=" && len(openShiftRegistryOverrides) > 0 { - var err error - // Ignition server cannot handle ImageContentSourcePolicies or ImageDigestMachineSet, so we need to - // fill the registryOverrides in the case of disconnected environments - mirrorImage = lookupDisconnectedRegistry(ctx, openShiftRegistryOverrides) - if len(mirrorImage) > 0 { - sourceRef, err = reference.Parse(mirrorImage) - if err != nil { - return fmt.Errorf("failed to parse private registry hosted control plane image reference %q: %w", mirrorImage, err) - } - icsFound = true - } + // Determine if we need to override the machine config operator and cluster config operator + // images based on image mappings present in management cluster. + ocpRegistryMapping := util.ConvertImageRegistryOverrideStringToMap(openShiftRegistryOverrides) + overrideConfigOperatorImage, err := lookupMappedImage(ocpRegistryMapping, configOperatorImage) + if err != nil { + return err + } + overrideMachineConfigOperatorImage, err := lookupMappedImage(ocpRegistryMapping, machineConfigOperatorImage) + if err != nil { + return err } - if icsFound { - privateRegistry := sourceRef.Registry - - if !strings.HasPrefix(componentImages["machine-config-operator"], privateRegistry) { - ocpReleaseMcoImage := componentImages["machine-config-operator"] - mcoSha, err := reference.Parse(ocpReleaseMcoImage) - if err != nil { - return fmt.Errorf("failed to parse machine-config-operator image reference %q: %w", ocpReleaseMcoImage, err) - } - registryOverrides[ocpReleaseMcoImage] = fmt.Sprintf("%s@%s", mirrorImage, mcoSha.ID) + imageOverrides := map[string]string{} + for k, v := range registryOverrides { + if k != "" { + imageOverrides[k] = v } + } - if !strings.HasPrefix(componentImages["cluster-config-operator"], privateRegistry) { - ocpReleaseCCOImage := componentImages["cluster-config-operator"] - ccoSha, err := reference.Parse(ocpReleaseCCOImage) - if err != nil { - return fmt.Errorf("failed to parse cluster-config-operator image reference %s: %w", ocpReleaseCCOImage, err) - } - registryOverrides[ocpReleaseCCOImage] = fmt.Sprintf("%s@%s", mirrorImage, ccoSha.ID) - } + if overrideConfigOperatorImage != configOperatorImage { + imageOverrides[configOperatorImage] = overrideConfigOperatorImage + } - delete(registryOverrides, "") + if overrideMachineConfigOperatorImage != machineConfigOperatorImage { + imageOverrides[machineConfigOperatorImage] = overrideMachineConfigOperatorImage } ignitionServerDeployment := ignitionserver.Deployment(controlPlaneNamespace) @@ -896,18 +882,16 @@ cp /tmp/manifests/99_feature-gate.yaml %[1]s/99_feature-gate.yaml return fmt.Sprintf(script, workDir, featureGateYAML) } -func lookupDisconnectedRegistry(ctx context.Context, strOcpOverrides string) string { - ocpOverrides := strings.Split(strOcpOverrides, ",") - for _, entry := range ocpOverrides { - sourceImage := strings.Split(entry, "=")[0] - mirrorImage := strings.Split(entry, "=")[1] - - if strings.Contains(sourceImage, "openshift-release-dev") || strings.Contains(sourceImage, "ocp/release") { - // Production releases: 'openshift-release-dev' - // Nightly releases: 'ocp/release' - return mirrorImage +func lookupMappedImage(ocpOverrides map[string][]string, image string) (string, error) { + ref, err := reference.Parse(image) + if err != nil { + return "", fmt.Errorf("failed to parse image (%s): %w", image, err) + } + for registry, replacements := range ocpOverrides { + if ref.Registry == registry { + ref.Registry = replacements[0] + return ref.String(), nil } } - - return "" + return image, nil }