Add support for RHSM customizations

Add support for RHSM customizations, which currently allow various
aspects of RHSM. Specifically enabling / disabling DNF plugins shipped
by subscription-manager package and setting a subset of options in the
rhsm.conf.

Signed-off-by: Tomáš Hozza <thozza@redhat.com>
This commit is contained in:
Tomáš Hozza 2024-08-07 17:41:00 +02:00 committed by Tomáš Hozza
parent 26dd54a4d7
commit 768537dba3
14 changed files with 583 additions and 182 deletions

View file

@ -14,6 +14,7 @@ import (
"github.com/osbuild/images/pkg/reporegistry"
"github.com/osbuild/images/pkg/rhsm/facts"
"github.com/osbuild/osbuild-composer/internal/blueprint"
"github.com/osbuild/osbuild-composer/internal/common"
"github.com/osbuild/osbuild-composer/internal/target"
)
@ -440,6 +441,43 @@ func (request *ComposeRequest) GetCustomizationsFromBlueprintRequest() (*bluepri
}
}
if rhsm := rbpc.Rhsm; rhsm != nil && rhsm.Config != nil {
bpRhsm := &blueprint.RHSMCustomization{
Config: &blueprint.RHSMConfig{},
}
conf := rhsm.Config
if conf.DnfPlugins != nil {
bpRhsm.Config.DNFPlugins = &blueprint.SubManDNFPluginsConfig{}
if conf.DnfPlugins.ProductId != nil && conf.DnfPlugins.ProductId.Enabled != nil {
bpRhsm.Config.DNFPlugins.ProductID = &blueprint.DNFPluginConfig{
Enabled: common.ToPtr(*conf.DnfPlugins.ProductId.Enabled),
}
}
if conf.DnfPlugins.SubscriptionManager != nil && conf.DnfPlugins.SubscriptionManager.Enabled != nil {
bpRhsm.Config.DNFPlugins.SubscriptionManager = &blueprint.DNFPluginConfig{
Enabled: common.ToPtr(*conf.DnfPlugins.SubscriptionManager.Enabled),
}
}
}
if conf.SubscriptionManager != nil {
bpRhsm.Config.SubscriptionManager = &blueprint.SubManConfig{}
if conf.SubscriptionManager.Rhsm != nil && conf.SubscriptionManager.Rhsm.ManageRepos != nil {
bpRhsm.Config.SubscriptionManager.RHSMConfig = &blueprint.SubManRHSMConfig{
ManageRepos: common.ToPtr(*conf.SubscriptionManager.Rhsm.ManageRepos),
}
}
if conf.SubscriptionManager.Rhsmcertd != nil && conf.SubscriptionManager.Rhsmcertd.AutoRegistration != nil {
bpRhsm.Config.SubscriptionManager.RHSMCertdConfig = &blueprint.SubManRHSMCertdConfig{
AutoRegistration: common.ToPtr(*conf.SubscriptionManager.Rhsmcertd.AutoRegistration),
}
}
}
c.RHSM = bpRhsm
}
return c, nil
}
@ -928,6 +966,43 @@ func (request *ComposeRequest) GetBlueprintFromCustomizations() (blueprint.Bluep
}
}
if rhsm := request.Customizations.Rhsm; rhsm != nil && rhsm.Config != nil {
bpRhsm := &blueprint.RHSMCustomization{
Config: &blueprint.RHSMConfig{},
}
conf := rhsm.Config
if conf.DnfPlugins != nil {
bpRhsm.Config.DNFPlugins = &blueprint.SubManDNFPluginsConfig{}
if conf.DnfPlugins.ProductId != nil && conf.DnfPlugins.ProductId.Enabled != nil {
bpRhsm.Config.DNFPlugins.ProductID = &blueprint.DNFPluginConfig{
Enabled: common.ToPtr(*conf.DnfPlugins.ProductId.Enabled),
}
}
if conf.DnfPlugins.SubscriptionManager != nil && conf.DnfPlugins.SubscriptionManager.Enabled != nil {
bpRhsm.Config.DNFPlugins.SubscriptionManager = &blueprint.DNFPluginConfig{
Enabled: common.ToPtr(*conf.DnfPlugins.SubscriptionManager.Enabled),
}
}
}
if conf.SubscriptionManager != nil {
bpRhsm.Config.SubscriptionManager = &blueprint.SubManConfig{}
if conf.SubscriptionManager.Rhsm != nil && conf.SubscriptionManager.Rhsm.ManageRepos != nil {
bpRhsm.Config.SubscriptionManager.RHSMConfig = &blueprint.SubManRHSMConfig{
ManageRepos: common.ToPtr(*conf.SubscriptionManager.Rhsm.ManageRepos),
}
}
if conf.SubscriptionManager.Rhsmcertd != nil && conf.SubscriptionManager.Rhsmcertd.AutoRegistration != nil {
bpRhsm.Config.SubscriptionManager.RHSMCertdConfig = &blueprint.SubManRHSMCertdConfig{
AutoRegistration: common.ToPtr(*conf.SubscriptionManager.Rhsmcertd.AutoRegistration),
}
}
}
bp.Customizations.RHSM = bpRhsm
}
// Did bp.Customizations get set at all? If not, set it back to nil
if reflect.DeepEqual(*bp.Customizations, blueprint.Customizations{}) {
bp.Customizations = nil