diff --git a/docs/user-guide.md b/docs/user-guide.md index ce4f369f..ff78f896 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -151,6 +151,11 @@ enableFips: enable-fips # Default: false # [Optional] enableInteractiveFlow: enable-interactive-flow +# Rename CatalogSource names generated by oc-mirror to the default naming. +# E.g. 'redhat-operators' instead of 'cs-redhat-operator-index-v4-19'. +# Default: false +# [Optional] +useDefaultSourceNames: use-default-source-names # Additional images to be included in the appliance disk image. # [Optional] additionalImages: diff --git a/pkg/asset/config/appliance_config.go b/pkg/asset/config/appliance_config.go index 1bb10d39..013fe585 100644 --- a/pkg/asset/config/appliance_config.go +++ b/pkg/asset/config/appliance_config.go @@ -185,6 +185,12 @@ stopLocalRegistry: %t # [Optional] # enableInteractiveFlow: %t +# Rename CatalogSource names generated by oc-mirror to the default naming. +# E.g. 'redhat-operators' instead of 'cs-redhat-operator-index-v4-19'. +# Default: false +# [Optional] +# useDefaultSourceNames: %t + # Additional images to be included in the appliance disk image. # [Optional] # additionalImages: @@ -207,7 +213,7 @@ stopLocalRegistry: %t graph.ReleaseChannelStable, CpuArchitectureX86, MinDiskSize, RegistryMinPort, RegistryMaxPort, consts.RegistryPort, consts.EnableDefaultSources, consts.StopLocalRegistry, consts.CreatePinnedImageSets, - consts.EnableFips, consts.EnableInteractiveFlow) + consts.EnableFips, consts.EnableInteractiveFlow, consts.UseDefaultSourceNames) return nil } diff --git a/pkg/asset/ignition/bootstrap_ignition.go b/pkg/asset/ignition/bootstrap_ignition.go index 2a894af9..0cb46d67 100644 --- a/pkg/asset/ignition/bootstrap_ignition.go +++ b/pkg/asset/ignition/bootstrap_ignition.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "path/filepath" + "regexp" "strings" "github.com/coreos/ignition/v2/config/util" @@ -41,6 +42,17 @@ const ( extraManifestsPath = "/etc/assisted/extra-manifests" ) +type CatalogSource struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata"` + Spec CatalogSourceSpec `json:"spec"` +} +type CatalogSourceSpec struct { + Image string `json:"image,omitempty"` + SourceType SourceType `json:"sourceType"` +} +type SourceType string + var ( bootstrapServices = []string{ "start-local-registry.service", @@ -200,7 +212,7 @@ func (i *BootstrapIgnition) Generate(_ context.Context, dependencies asset.Paren } // Add manifests generated by oc-mirror - if err := i.addGeneratedManifests(envConfig); err != nil { + if err := i.addGeneratedManifests(envConfig.CacheDir, applianceConfig.Config.UseDefaultSourceNames); err != nil { return err } @@ -263,9 +275,9 @@ func (i *BootstrapIgnition) addExtraManifests(config *igntypes.Config, extraMani return nil } -func (i *BootstrapIgnition) addGeneratedManifests(envConfig *config.EnvConfig) error { +func (i *BootstrapIgnition) addGeneratedManifests(cacheDir string, useDefaultSourceNames *bool) error { // Find manifests yaml files - files, err := filepath.Glob(filepath.Join(envConfig.CacheDir, release.OcGeneratedManifestsDir, "*.yaml")) + files, err := filepath.Glob(filepath.Join(cacheDir, release.OcGeneratedManifestsDir, "*.yaml")) if err != nil { logrus.Error("Missing manifests files in cache") return err @@ -283,6 +295,24 @@ func (i *BootstrapIgnition) addGeneratedManifests(envConfig *config.EnvConfig) e // Use CatalogSource instead continue } + + // Convert to default source naming (e.g. redhat-operators) + if swag.BoolValue(useDefaultSourceNames) { + var cs CatalogSource + if err = yaml.Unmarshal(fileBytes, &cs); err != nil { + return err + } + + re := regexp.MustCompile(`.*?(\w+-operator)-index.*`) + name := re.ReplaceAllString(cs.Name, "${1}") + cs.Name = strings.Replace(name, "operator", "operators", 1) + + fileBytes, err = yaml.Marshal(cs) + if err != nil { + return err + } + } + manifestPath := fmt.Sprintf("%s/%s", extraManifestsPath, filepath.Base(file)) manifestFile := ignasset.FileFromBytes(manifestPath, "root", 0644, fileBytes) i.Config.Storage.Files = append(i.Config.Storage.Files, manifestFile) diff --git a/pkg/consts/consts.go b/pkg/consts/consts.go index 2ade6738..36e4cff5 100644 --- a/pkg/consts/consts.go +++ b/pkg/consts/consts.go @@ -70,4 +70,5 @@ const ( CreatePinnedImageSets = false EnableFips = false EnableInteractiveFlow = false + UseDefaultSourceNames = false ) diff --git a/pkg/types/appliance_config_type.go b/pkg/types/appliance_config_type.go index bb786b22..daf3bb46 100644 --- a/pkg/types/appliance_config_type.go +++ b/pkg/types/appliance_config_type.go @@ -23,6 +23,7 @@ type ApplianceConfig struct { StopLocalRegistry *bool `json:"stopLocalRegistry"` CreatePinnedImageSets *bool `json:"createPinnedImageSets"` EnableInteractiveFlow *bool `json:"enableInteractiveFlow"` + UseDefaultSourceNames *bool `json:"useDefaultSourceNames"` AdditionalImages *[]Image `json:"additionalImages,omitempty"` Operators *[]Operator `json:"operators,omitempty"` }