From 0f925c445cf67038eb2767242c932b1beefb2611 Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Wed, 12 Apr 2023 19:52:27 +0200 Subject: [PATCH] subscription: new package for subscription options Move the subscription options from distro to its own package. Now we can import the manifest package into the distro package (instead of the other way around) so we can work with the manifest.Manifest type in distro. --- internal/cloudapi/v2/handler.go | 3 ++- internal/distro/distro.go | 15 ++------------- internal/distro/image_config.go | 10 ++-------- internal/distro/rhel7/azure.go | 7 ++++--- internal/distro/rhel7/qcow2.go | 5 +++-- internal/distro/rhel8/ami.go | 19 ++++++++++--------- internal/distro/rhel8/azure.go | 13 +++++++------ internal/distro/rhel8/gce.go | 13 +++++++------ internal/distro/rhel8/qcow2.go | 5 +++-- internal/distro/rhel9/ami.go | 11 ++++++----- internal/distro/rhel9/azure.go | 13 +++++++------ internal/distro/rhel9/gce.go | 13 +++++++------ internal/distro/rhel9/qcow2.go | 5 +++-- internal/manifest/os.go | 10 +++++----- internal/manifest/os_test.go | 14 +++++++------- internal/subscription/subscription.go | 20 ++++++++++++++++++++ 16 files changed, 95 insertions(+), 81 deletions(-) create mode 100644 internal/subscription/subscription.go diff --git a/internal/cloudapi/v2/handler.go b/internal/cloudapi/v2/handler.go index 746e5a769..9bfac988f 100644 --- a/internal/cloudapi/v2/handler.go +++ b/internal/cloudapi/v2/handler.go @@ -21,6 +21,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/ostree" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" "github.com/osbuild/osbuild-composer/internal/target" "github.com/osbuild/osbuild-composer/internal/worker" "github.com/osbuild/osbuild-composer/internal/worker/clienterrors" @@ -446,7 +447,7 @@ func (h *apiHandlers) PostCompose(ctx echo.Context) error { if request.Customizations.Subscription.Rhc != nil { rhc = *request.Customizations.Subscription.Rhc } - imageOptions.Subscription = &distro.SubscriptionImageOptions{ + imageOptions.Subscription = &subscription.ImageOptions{ Organization: request.Customizations.Subscription.Organization, ActivationKey: request.Customizations.Subscription.ActivationKey, ServerUrl: request.Customizations.Subscription.ServerUrl, diff --git a/internal/distro/distro.go b/internal/distro/distro.go index 2fa2f0cd7..4561741a9 100644 --- a/internal/distro/distro.go +++ b/internal/distro/distro.go @@ -8,6 +8,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/container" "github.com/osbuild/osbuild-composer/internal/disk" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) const ( @@ -146,7 +147,7 @@ type ImageType interface { type ImageOptions struct { Size uint64 OSTree OSTreeImageOptions - Subscription *SubscriptionImageOptions + Subscription *subscription.ImageOptions Facts *FactsImageOptions } @@ -176,18 +177,6 @@ type OSTreeImageOptions struct { RHSM bool } -// The SubscriptionImageOptions specify subscription-specific image options -// ServerUrl denotes the host to register the system with -// BaseUrl specifies the repository URL for DNF -type SubscriptionImageOptions struct { - Organization string - ActivationKey string - ServerUrl string - BaseUrl string - Insights bool - Rhc bool -} - // The FactsImageOptions specify things to be stored into the Insights facts // storage. This mostly relates to how the build of the image was performed. type FactsImageOptions struct { diff --git a/internal/distro/image_config.go b/internal/distro/image_config.go index cb688f3b8..1fc72e787 100644 --- a/internal/distro/image_config.go +++ b/internal/distro/image_config.go @@ -6,13 +6,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/shell" -) - -type RHSMSubscriptionStatus string - -const ( - RHSMConfigWithSubscription RHSMSubscriptionStatus = "with-subscription" - RHSMConfigNoSubscription RHSMSubscriptionStatus = "no-subscription" + "github.com/osbuild/osbuild-composer/internal/subscription" ) // ImageConfig represents a (default) configuration applied to the image @@ -43,7 +37,7 @@ type ImageConfig struct { // for RHSM configuration, we need to potentially distinguish the case // when the user want the image to be subscribed on first boot and when not - RHSMConfig map[RHSMSubscriptionStatus]*osbuild.RHSMStageOptions + RHSMConfig map[subscription.RHSMStatus]*osbuild.RHSMStageOptions SystemdLogind []*osbuild.SystemdLogindStageOptions CloudInit []*osbuild.CloudInitStageOptions Modprobe []*osbuild.ModprobeStageOptions diff --git a/internal/distro/rhel7/azure.go b/internal/distro/rhel7/azure.go index 56942f798..6f0cbcd01 100644 --- a/internal/distro/rhel7/azure.go +++ b/internal/distro/rhel7/azure.go @@ -6,6 +6,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) var azureRhuiImgType = imageType{ @@ -151,8 +152,8 @@ var azureDefaultImgConfig = &distro.ImageConfig{ RDEnableSwap: common.ToPtr(false), }, }, - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { YumPlugins: &osbuild.RHSMStageOptionsDnfPlugins{ SubscriptionManager: &osbuild.RHSMStageOptionsDnfPlugin{ Enabled: false, @@ -167,7 +168,7 @@ var azureDefaultImgConfig = &distro.ImageConfig{ }, }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), diff --git a/internal/distro/rhel7/qcow2.go b/internal/distro/rhel7/qcow2.go index 8f913cf3d..841fa591b 100644 --- a/internal/distro/rhel7/qcow2.go +++ b/internal/distro/rhel7/qcow2.go @@ -5,6 +5,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) var qcow2ImgType = imageType{ @@ -53,8 +54,8 @@ var qcow2DefaultImgConfig = &distro.ImageConfig{ }, }, }, - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { YumPlugins: &osbuild.RHSMStageOptionsDnfPlugins{ ProductID: &osbuild.RHSMStageOptionsDnfPlugin{ Enabled: false, diff --git a/internal/distro/rhel8/ami.go b/internal/distro/rhel8/ami.go index 324e12476..7cdf590a7 100644 --- a/internal/distro/rhel8/ami.go +++ b/internal/distro/rhel8/ami.go @@ -5,6 +5,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) func amiImgTypeX86_64(rd distribution) imageType { @@ -222,8 +223,8 @@ func baseEc2ImageConfig() *distro.ImageConfig { }, }, }, - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { // RHBZ#1932802 SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ @@ -234,7 +235,7 @@ func baseEc2ImageConfig() *distro.ImageConfig { }, }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { // RHBZ#1932802 SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ @@ -319,14 +320,14 @@ func defaultEc2ImageConfig(rd distribution) *distro.ImageConfig { if rd.isRHEL() && common.VersionLessThan(rd.osVersion, "9.1") { ic = appendRHSM(ic) // Disable RHSM redhat.repo management - rhsmConf := ic.RHSMConfig[distro.RHSMConfigNoSubscription] + rhsmConf := ic.RHSMConfig[subscription.RHSMConfigNoSubscription] rhsmConf.SubMan.Rhsm = &osbuild.SubManConfigRHSMSection{ManageRepos: common.ToPtr(false)} - ic.RHSMConfig[distro.RHSMConfigNoSubscription] = rhsmConf + ic.RHSMConfig[subscription.RHSMConfigNoSubscription] = rhsmConf } // The RHSM configuration should not be applied since 8.7, but it is instead done by installing the redhat-cloud-client-configuration package. // See COMPOSER-1804 for more information. rhel87PlusEc2ImageConfigOverride := &distro.ImageConfig{ - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{}, + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{}, } if !common.VersionLessThan(rd.osVersion, "8.7") { ic = rhel87PlusEc2ImageConfigOverride.InheritFrom(ic) @@ -464,8 +465,8 @@ func rhelEc2SapPackageSet(t *imageType) rpmmd.PackageSet { // Used for RHEL distros. func appendRHSM(ic *distro.ImageConfig) *distro.ImageConfig { rhsm := &distro.ImageConfig{ - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { // RHBZ#1932802 SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ @@ -480,7 +481,7 @@ func appendRHSM(ic *distro.ImageConfig) *distro.ImageConfig { // confusing. }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { // RHBZ#1932802 SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ diff --git a/internal/distro/rhel8/azure.go b/internal/distro/rhel8/azure.go index 19d39e7d2..e799bcde9 100644 --- a/internal/distro/rhel8/azure.go +++ b/internal/distro/rhel8/azure.go @@ -7,6 +7,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/shell" + "github.com/osbuild/osbuild-composer/internal/subscription" ) const defaultAzureKernelOptions = "ro crashkernel=auto console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300" @@ -623,8 +624,8 @@ var defaultAzureByosImageConfig = &distro.ImageConfig{ GPGKeyFiles: []string{ "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release", }, - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -638,7 +639,7 @@ var defaultAzureByosImageConfig = &distro.ImageConfig{ // confusing. }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -656,8 +657,8 @@ var defaultAzureRhuiImageConfig = &distro.ImageConfig{ "/etc/pki/rpm-gpg/RPM-GPG-KEY-microsoft-azure-release", "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release", }, - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { DnfPlugins: &osbuild.RHSMStageOptionsDnfPlugins{ SubscriptionManager: &osbuild.RHSMStageOptionsDnfPlugin{ Enabled: false, @@ -672,7 +673,7 @@ var defaultAzureRhuiImageConfig = &distro.ImageConfig{ }, }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), diff --git a/internal/distro/rhel8/gce.go b/internal/distro/rhel8/gce.go index ca5fa2733..7967e845e 100644 --- a/internal/distro/rhel8/gce.go +++ b/internal/distro/rhel8/gce.go @@ -5,6 +5,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) const gceKernelOptions = "net.ifnames=0 biosdevname=0 scsi_mod.use_blk_mq=Y crashkernel=auto console=ttyS0,38400n8d" @@ -156,8 +157,8 @@ func defaultGceByosImageConfig(rd distribution) *distro.ImageConfig { } if rd.isRHEL() { - ic.RHSMConfig = map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + ic.RHSMConfig = map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -171,7 +172,7 @@ func defaultGceByosImageConfig(rd distribution) *distro.ImageConfig { // confusing. }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -187,8 +188,8 @@ func defaultGceByosImageConfig(rd distribution) *distro.ImageConfig { func defaultGceRhuiImageConfig(rd distribution) *distro.ImageConfig { ic := &distro.ImageConfig{ - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -198,7 +199,7 @@ func defaultGceRhuiImageConfig(rd distribution) *distro.ImageConfig { }, }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), diff --git a/internal/distro/rhel8/qcow2.go b/internal/distro/rhel8/qcow2.go index fb76e36ec..cb7e619fd 100644 --- a/internal/distro/rhel8/qcow2.go +++ b/internal/distro/rhel8/qcow2.go @@ -5,6 +5,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) func qcow2ImgType(rd distribution) imageType { @@ -29,8 +30,8 @@ func qcow2ImgType(rd distribution) imageType { } if rd.isRHEL() { - it.defaultImageConfig.RHSMConfig = map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + it.defaultImageConfig.RHSMConfig = map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { DnfPlugins: &osbuild.RHSMStageOptionsDnfPlugins{ ProductID: &osbuild.RHSMStageOptionsDnfPlugin{ Enabled: false, diff --git a/internal/distro/rhel9/ami.go b/internal/distro/rhel9/ami.go index d1d29e3f4..4c9d7c8aa 100644 --- a/internal/distro/rhel9/ami.go +++ b/internal/distro/rhel9/ami.go @@ -5,6 +5,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) const amiKernelOptions = "console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295" @@ -257,9 +258,9 @@ func defaultEc2ImageConfig(osVersion string, rhsm bool) *distro.ImageConfig { if rhsm && common.VersionLessThan(osVersion, "9.1") { ic = appendRHSM(ic) // Disable RHSM redhat.repo management - rhsmConf := ic.RHSMConfig[distro.RHSMConfigNoSubscription] + rhsmConf := ic.RHSMConfig[subscription.RHSMConfigNoSubscription] rhsmConf.SubMan.Rhsm = &osbuild.SubManConfigRHSMSection{ManageRepos: common.ToPtr(false)} - ic.RHSMConfig[distro.RHSMConfigNoSubscription] = rhsmConf + ic.RHSMConfig[subscription.RHSMConfigNoSubscription] = rhsmConf } return ic } @@ -428,8 +429,8 @@ func mkEC2ImgTypeAarch64(osVersion string, rhsm bool) imageType { // Used for RHEL distros. func appendRHSM(ic *distro.ImageConfig) *distro.ImageConfig { rhsm := &distro.ImageConfig{ - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { // RHBZ#1932802 SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ @@ -444,7 +445,7 @@ func appendRHSM(ic *distro.ImageConfig) *distro.ImageConfig { // confusing. }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { // RHBZ#1932802 SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ diff --git a/internal/distro/rhel9/azure.go b/internal/distro/rhel9/azure.go index c3565689c..09c95e3dc 100644 --- a/internal/distro/rhel9/azure.go +++ b/internal/distro/rhel9/azure.go @@ -6,6 +6,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) var ( @@ -532,8 +533,8 @@ var defaultAzureByosImageConfig = &distro.ImageConfig{ GPGKeyFiles: []string{ "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release", }, - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -547,7 +548,7 @@ var defaultAzureByosImageConfig = &distro.ImageConfig{ // confusing. }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -565,8 +566,8 @@ var defaultAzureRhuiImageConfig = &distro.ImageConfig{ "/etc/pki/rpm-gpg/RPM-GPG-KEY-microsoft-azure-release", "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release", }, - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { DnfPlugins: &osbuild.RHSMStageOptionsDnfPlugins{ SubscriptionManager: &osbuild.RHSMStageOptionsDnfPlugin{ Enabled: false, @@ -581,7 +582,7 @@ var defaultAzureRhuiImageConfig = &distro.ImageConfig{ }, }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), diff --git a/internal/distro/rhel9/gce.go b/internal/distro/rhel9/gce.go index 6ab93300c..6a5c3d19f 100644 --- a/internal/distro/rhel9/gce.go +++ b/internal/distro/rhel9/gce.go @@ -5,6 +5,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) const gceKernelOptions = "net.ifnames=0 biosdevname=0 scsi_mod.use_blk_mq=Y console=ttyS0,38400n8d" @@ -154,8 +155,8 @@ func baseGCEImageConfig(rhsm bool) *distro.ImageConfig { } if rhsm { - ic.RHSMConfig = map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + ic.RHSMConfig = map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -169,7 +170,7 @@ func baseGCEImageConfig(rhsm bool) *distro.ImageConfig { // confusing. }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -185,8 +186,8 @@ func baseGCEImageConfig(rhsm bool) *distro.ImageConfig { func defaultGceRhuiImageConfig(rhsm bool) *distro.ImageConfig { ic := &distro.ImageConfig{ - RHSMConfig: map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + RHSMConfig: map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), @@ -196,7 +197,7 @@ func defaultGceRhuiImageConfig(rhsm bool) *distro.ImageConfig { }, }, }, - distro.RHSMConfigWithSubscription: { + subscription.RHSMConfigWithSubscription: { SubMan: &osbuild.RHSMStageOptionsSubMan{ Rhsmcertd: &osbuild.SubManConfigRHSMCERTDSection{ AutoRegistration: common.ToPtr(true), diff --git a/internal/distro/rhel9/qcow2.go b/internal/distro/rhel9/qcow2.go index dac78fc92..55dfe6b81 100644 --- a/internal/distro/rhel9/qcow2.go +++ b/internal/distro/rhel9/qcow2.go @@ -5,6 +5,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/rpmmd" + "github.com/osbuild/osbuild-composer/internal/subscription" ) var ( @@ -132,8 +133,8 @@ func qcowImageConfig(d distribution) *distro.ImageConfig { DefaultTarget: common.ToPtr("multi-user.target"), } if d.isRHEL() { - ic.RHSMConfig = map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions{ - distro.RHSMConfigNoSubscription: { + ic.RHSMConfig = map[subscription.RHSMStatus]*osbuild.RHSMStageOptions{ + subscription.RHSMConfigNoSubscription: { DnfPlugins: &osbuild.RHSMStageOptionsDnfPlugins{ ProductID: &osbuild.RHSMStageOptionsDnfPlugin{ Enabled: false, diff --git a/internal/manifest/os.go b/internal/manifest/os.go index a62442e6e..fbd490af6 100644 --- a/internal/manifest/os.go +++ b/internal/manifest/os.go @@ -8,7 +8,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/common" "github.com/osbuild/osbuild-composer/internal/container" "github.com/osbuild/osbuild-composer/internal/disk" - "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/environment" "github.com/osbuild/osbuild-composer/internal/fsnode" "github.com/osbuild/osbuild-composer/internal/osbuild" @@ -16,6 +15,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/shell" + "github.com/osbuild/osbuild-composer/internal/subscription" "github.com/osbuild/osbuild-composer/internal/users" "github.com/osbuild/osbuild-composer/internal/workload" ) @@ -120,8 +120,8 @@ type OSCustomizations struct { LeapSecTZ *string FactAPIType string - Subscription *distro.SubscriptionImageOptions - RHSMConfig map[distro.RHSMSubscriptionStatus]*osbuild.RHSMStageOptions + Subscription *subscription.ImageOptions + RHSMConfig map[subscription.RHSMStatus]*osbuild.RHSMStageOptions // Custom directories and files to create in the image Directories []*fsnode.Directory @@ -519,11 +519,11 @@ func (p *OS) serialize() osbuild.Pipeline { WaitForNetwork: true, })) - if rhsmConfig, exists := p.RHSMConfig[distro.RHSMConfigWithSubscription]; exists { + if rhsmConfig, exists := p.RHSMConfig[subscription.RHSMConfigWithSubscription]; exists { pipeline.AddStage(osbuild.NewRHSMStage(rhsmConfig)) } } else { - if rhsmConfig, exists := p.RHSMConfig[distro.RHSMConfigNoSubscription]; exists { + if rhsmConfig, exists := p.RHSMConfig[subscription.RHSMConfigNoSubscription]; exists { pipeline.AddStage(osbuild.NewRHSMStage(rhsmConfig)) } } diff --git a/internal/manifest/os_test.go b/internal/manifest/os_test.go index 5bf9da832..c02e36bda 100644 --- a/internal/manifest/os_test.go +++ b/internal/manifest/os_test.go @@ -3,11 +3,11 @@ package manifest import ( "testing" - "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/platform" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/runner" + "github.com/osbuild/osbuild-composer/internal/subscription" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -69,7 +69,7 @@ func CheckPkgSetInclude(t *testing.T, pkgSetChain []rpmmd.PackageSet, pkgs []str func TestSubscriptionManagerCommands(t *testing.T) { os := NewTestOS() - os.Subscription = &distro.SubscriptionImageOptions{ + os.Subscription = &subscription.ImageOptions{ Organization: "2040324", ActivationKey: "my-secret-key", ServerUrl: "subscription.rhsm.redhat.com", @@ -83,7 +83,7 @@ func TestSubscriptionManagerCommands(t *testing.T) { func TestSubscriptionManagerInsightsCommands(t *testing.T) { os := NewTestOS() - os.Subscription = &distro.SubscriptionImageOptions{ + os.Subscription = &subscription.ImageOptions{ Organization: "2040324", ActivationKey: "my-secret-key", ServerUrl: "subscription.rhsm.redhat.com", @@ -100,7 +100,7 @@ func TestSubscriptionManagerInsightsCommands(t *testing.T) { func TestRhcInsightsCommands(t *testing.T) { os := NewTestOS() - os.Subscription = &distro.SubscriptionImageOptions{ + os.Subscription = &subscription.ImageOptions{ Organization: "2040324", ActivationKey: "my-secret-key", ServerUrl: "subscription.rhsm.redhat.com", @@ -118,7 +118,7 @@ func TestRhcInsightsCommands(t *testing.T) { func TestSubscriptionManagerPackages(t *testing.T) { os := NewTestOS() - os.Subscription = &distro.SubscriptionImageOptions{ + os.Subscription = &subscription.ImageOptions{ Organization: "2040324", ActivationKey: "my-secret-key", ServerUrl: "subscription.rhsm.redhat.com", @@ -130,7 +130,7 @@ func TestSubscriptionManagerPackages(t *testing.T) { func TestSubscriptionManagerInsightsPackages(t *testing.T) { os := NewTestOS() - os.Subscription = &distro.SubscriptionImageOptions{ + os.Subscription = &subscription.ImageOptions{ Organization: "2040324", ActivationKey: "my-secret-key", ServerUrl: "subscription.rhsm.redhat.com", @@ -142,7 +142,7 @@ func TestSubscriptionManagerInsightsPackages(t *testing.T) { func TestRhcInsightsPackages(t *testing.T) { os := NewTestOS() - os.Subscription = &distro.SubscriptionImageOptions{ + os.Subscription = &subscription.ImageOptions{ Organization: "2040324", ActivationKey: "my-secret-key", ServerUrl: "subscription.rhsm.redhat.com", diff --git a/internal/subscription/subscription.go b/internal/subscription/subscription.go new file mode 100644 index 000000000..3eccd25d1 --- /dev/null +++ b/internal/subscription/subscription.go @@ -0,0 +1,20 @@ +package subscription + +// The ImageOptions specify subscription-specific image options +// ServerUrl denotes the host to register the system with +// BaseUrl specifies the repository URL for DNF +type ImageOptions struct { + Organization string + ActivationKey string + ServerUrl string + BaseUrl string + Insights bool + Rhc bool +} + +type RHSMStatus string + +const ( + RHSMConfigWithSubscription RHSMStatus = "with-subscription" + RHSMConfigNoSubscription RHSMStatus = "no-subscription" +)