diff --git a/cmd/gen-manifests/main.go b/cmd/gen-manifests/main.go index d8e0bf3b7..2c237ae8f 100644 --- a/cmd/gen-manifests/main.go +++ b/cmd/gen-manifests/main.go @@ -22,6 +22,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/distroregistry" "github.com/osbuild/osbuild-composer/internal/dnfjson" "github.com/osbuild/osbuild-composer/internal/manifest" + "github.com/osbuild/osbuild-composer/internal/rhsm/facts" "github.com/osbuild/osbuild-composer/internal/rpmmd" ) @@ -130,8 +131,8 @@ func makeManifestJob(name string, imgType distro.ImageType, cr composeRequest, d } // add RHSM fact to detect changes - options.Facts = &distro.FactsImageOptions{ - ApiType: "test-manifest", + options.Facts = &facts.ImageOptions{ + APIType: facts.TEST_APITYPE, } job := func(msgq chan string) (err error) { diff --git a/internal/cloudapi/v2/handler.go b/internal/cloudapi/v2/handler.go index 09fc0eafe..e71cf5e8f 100644 --- a/internal/cloudapi/v2/handler.go +++ b/internal/cloudapi/v2/handler.go @@ -21,6 +21,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/ostree" + "github.com/osbuild/osbuild-composer/internal/rhsm/facts" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/subscription" "github.com/osbuild/osbuild-composer/internal/target" @@ -437,8 +438,8 @@ func (h *apiHandlers) PostCompose(ctx echo.Context) error { imageOptions := distro.ImageOptions{Size: imageType.Size(0)} if request.Koji == nil { - imageOptions.Facts = &distro.FactsImageOptions{ - ApiType: "cloudapi-v2", + imageOptions.Facts = &facts.ImageOptions{ + APIType: facts.CLOUDV2_APITYPE, } } diff --git a/internal/distro/distro.go b/internal/distro/distro.go index 1bcd31ae5..cb66c50f3 100644 --- a/internal/distro/distro.go +++ b/internal/distro/distro.go @@ -7,6 +7,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/container" "github.com/osbuild/osbuild-composer/internal/disk" "github.com/osbuild/osbuild-composer/internal/manifest" + "github.com/osbuild/osbuild-composer/internal/rhsm/facts" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/subscription" ) @@ -139,7 +140,7 @@ type ImageOptions struct { Size uint64 OSTree OSTreeImageOptions Subscription *subscription.ImageOptions - Facts *FactsImageOptions + Facts *facts.ImageOptions } // The OSTreeImageOptions specify an ostree ref, checksum, URL, ContentURL, and RHSM. The meaning of @@ -168,12 +169,6 @@ type OSTreeImageOptions struct { RHSM 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 { - ApiType string -} - type BasePartitionTableMap map[string]disk.PartitionTable // Fallbacks: When a new method is added to an interface to provide to provide diff --git a/internal/distro/distro_test_common/distro_test_common.go b/internal/distro/distro_test_common/distro_test_common.go index 396080e39..e154c6c76 100644 --- a/internal/distro/distro_test_common/distro_test_common.go +++ b/internal/distro/distro_test_common/distro_test_common.go @@ -20,6 +20,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/dnfjson" "github.com/osbuild/osbuild-composer/internal/manifest" "github.com/osbuild/osbuild-composer/internal/ostree" + "github.com/osbuild/osbuild-composer/internal/rhsm/facts" "github.com/osbuild/osbuild-composer/internal/rpmmd" ) @@ -118,8 +119,8 @@ func TestDistro_Manifest(t *testing.T, pipelinePath string, prefix string, regis options := distro.ImageOptions{ Size: imageType.Size(0), OSTree: ostreeOptions, - Facts: &distro.FactsImageOptions{ - ApiType: "test-manifest", + Facts: &facts.ImageOptions{ + APIType: facts.TEST_APITYPE, }, } diff --git a/internal/distro/rhel7/images.go b/internal/distro/rhel7/images.go index 08adec89d..9a0ee9769 100644 --- a/internal/distro/rhel7/images.go +++ b/internal/distro/rhel7/images.go @@ -139,7 +139,7 @@ func osCustomizations( } if t.arch.distro.isRHEL() && options.Facts != nil { - osc.FactAPIType = options.Facts.ApiType + osc.FactAPIType = &options.Facts.APIType } var err error diff --git a/internal/distro/rhel8/images.go b/internal/distro/rhel8/images.go index 23ad891f7..aed57ea06 100644 --- a/internal/distro/rhel8/images.go +++ b/internal/distro/rhel8/images.go @@ -145,7 +145,7 @@ func osCustomizations( } if t.arch.distro.isRHEL() && options.Facts != nil { - osc.FactAPIType = options.Facts.ApiType + osc.FactAPIType = &options.Facts.APIType } var err error diff --git a/internal/distro/rhel9/images.go b/internal/distro/rhel9/images.go index 062bdd51b..fbf5bddee 100644 --- a/internal/distro/rhel9/images.go +++ b/internal/distro/rhel9/images.go @@ -142,7 +142,7 @@ func osCustomizations( } if t.arch.distro.isRHEL() && options.Facts != nil { - osc.FactAPIType = options.Facts.ApiType + osc.FactAPIType = &options.Facts.APIType } var err error diff --git a/internal/manifest/os.go b/internal/manifest/os.go index fbd490af6..8cae00341 100644 --- a/internal/manifest/os.go +++ b/internal/manifest/os.go @@ -13,6 +13,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/ostree" "github.com/osbuild/osbuild-composer/internal/platform" + "github.com/osbuild/osbuild-composer/internal/rhsm/facts" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/shell" "github.com/osbuild/osbuild-composer/internal/subscription" @@ -118,7 +119,7 @@ type OSCustomizations struct { WAAgentConfig *osbuild.WAAgentConfStageOptions UdevRules *osbuild.UdevRulesStageOptions LeapSecTZ *string - FactAPIType string + FactAPIType *facts.APIType Subscription *subscription.ImageOptions RHSMConfig map[subscription.RHSMStatus]*osbuild.RHSMStageOptions @@ -605,10 +606,10 @@ func (p *OS) serialize() osbuild.Pipeline { pipeline.AddStage(osbuild.NewOscapRemediationStage(p.OpenSCAPConfig)) } - if p.FactAPIType != "" { + if p.FactAPIType != nil { pipeline.AddStage(osbuild.NewRHSMFactsStage(&osbuild.RHSMFactsStageOptions{ Facts: osbuild.RHSMFacts{ - ApiType: p.FactAPIType, + ApiType: p.FactAPIType.String(), }, })) } diff --git a/internal/rhsm/facts/facts.go b/internal/rhsm/facts/facts.go new file mode 100644 index 000000000..af0a1db8b --- /dev/null +++ b/internal/rhsm/facts/facts.go @@ -0,0 +1,29 @@ +package facts + +import "fmt" + +type APIType uint64 + +func (at APIType) String() string { + switch at { + case TEST_APITYPE: + return "test-manifest" + case CLOUDV2_APITYPE: + return "cloudapi-v2" + case WELDR_APITYPE: + return "weldr" + } + panic(fmt.Sprintf("invalid APIType value %d", at)) +} + +const ( + TEST_APITYPE APIType = iota + CLOUDV2_APITYPE + WELDR_APITYPE +) + +// The ImageOptions specify things to be stored into the Insights facts +// storage. This mostly relates to how the build of the image was performed. +type ImageOptions struct { + APIType APIType +} diff --git a/internal/weldr/api.go b/internal/weldr/api.go index 65893fe81..3b10b2225 100644 --- a/internal/weldr/api.go +++ b/internal/weldr/api.go @@ -39,6 +39,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/osbuild" "github.com/osbuild/osbuild-composer/internal/ostree" "github.com/osbuild/osbuild-composer/internal/reporegistry" + "github.com/osbuild/osbuild-composer/internal/rhsm/facts" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/store" "github.com/osbuild/osbuild-composer/internal/target" @@ -2497,8 +2498,8 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request Size: size, OSTree: ostreeOptions, } - options.Facts = &distro.FactsImageOptions{ - ApiType: "weldr", + options.Facts = &facts.ImageOptions{ + APIType: facts.WELDR_APITYPE, } packageSets, err := api.depsolveBlueprintForImageType(*bp, options, imageType)