Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions mgradm/cmd/inspect/inspect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ func TestParamsParsing(t *testing.T) {

// Test function asserting that the args are properly parsed
tester := func(_ *types.GlobalFlags, flags *inspectFlags, _ *cobra.Command, _ []string) error {
// inspect uses only the global --image/--tag flags; no --server-image override applies here
testutils.AssertEquals(t, "Error parsing --image", "path/to/image", flags.Image.Name)
testutils.AssertEquals(t, "Error parsing --tag", "v1.2.3", flags.Image.Tag)
flagstests.AssertImageFlag(t, &flags.Image)
flagstests.AssertRegistryFlag(t, &flags.Image.Registry)
flagstests.AssertSCCFlag(t, &flags.SCC)
Expand Down
14 changes: 13 additions & 1 deletion mgradm/cmd/install/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ NOTE: installing on a remote podman is not supported yet!
if len(args) > 0 && args[0] == "podman" {
args = args[1:]
}

var flags podmanInstallFlags
return utils.CommandHelper(globalFlags, cmd, args, &flags, getFlagsUpdater(&flags), run)
},
Expand Down Expand Up @@ -71,10 +72,21 @@ func getFlagsUpdater(flags *podmanInstallFlags) utils.FlagsUpdaterFunc {
flags.Installation.SSL.DB.Cert = flags.Installation.SSL.Server.Cert
flags.Installation.SSL.DB.Key = flags.Installation.SSL.Server.Key
}
if !flags.Installation.Tftp {
flags.TFTPD.Enable = false
}

// Override Image.Name/Tag with server-specific values if set.
if flags.Server.Image != "" {
flags.Image.Name = flags.Server.Image
}
if flags.Server.Tag != "" {
flags.Image.Tag = flags.Server.Tag
}
}
}

// NewCommand for installation.
func NewCommand(globalFlags *types.GlobalFlags) *cobra.Command {
return newCmd(globalFlags, installForPodman)
}
}
8 changes: 8 additions & 0 deletions mgradm/cmd/upgrade/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ func newCmd(globalFlags *types.GlobalFlags, run utils.CommandFunc[podmanUpgradeF
flags.Coco.IsChanged = v.IsSet("coco.replicas")
flags.HubXmlrpc.IsChanged = v.IsSet("hubxmlrpc.replicas")
flags.Saline.IsChanged = v.IsSet("saline.replicas") || v.IsSet("saline.port")

// Override Image.Name/Tag with server-specific values if set.
if flags.Server.Image != "" {
flags.Image.Name = flags.Server.Image
}
if flags.Server.Tag != "" {
flags.Image.Tag = flags.Server.Tag
}
flags.TFTPD.IsChanged = v.IsSet("tftpd.enable")
}
return utils.CommandHelper(globalFlags, cmd, args, &flags, flagsUpdater, run)
Expand Down
10 changes: 10 additions & 0 deletions mgradm/shared/utils/cmd_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,15 @@ func AddImageFlag(cmd *cobra.Command) {
_ = utils.AddFlagToHelpGroupID(cmd, "registry", "")
}

// AddServerImageFlags adds the server-specific image override flags to a command.
func AddServerImageFlags(cmd *cobra.Command) {
cmd.Flags().String("server-image", defaultImage, L("Image for uyuni server container"))
cmd.Flags().String("server-tag", "", L("Tag for uyuni server container. If empty, the global tag will be used"))

_ = utils.AddFlagToHelpGroupID(cmd, "server-image", "image")
_ = utils.AddFlagToHelpGroupID(cmd, "server-tag", "image")
}

// AddDBUpgradeImageFlag add Database upgrade image flags to a command.
func AddDBUpgradeImageFlag(cmd *cobra.Command) {
defaultImage := path.Join(utils.DefaultImagePrefix, "server-database-migration")
Expand Down Expand Up @@ -214,6 +223,7 @@ func AddPgsqlFlags(cmd *cobra.Command) {
// AddServerFlags add flags common to install, upgrade and migration.
func AddServerFlags(cmd *cobra.Command) {
AddImageFlag(cmd)
AddServerImageFlags(cmd)
AddSCCFlag(cmd)
AddPgsqlFlags(cmd)
AddDBFlags(cmd)
Expand Down
24 changes: 18 additions & 6 deletions mgradm/shared/utils/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,26 @@ import (
"github.com/uyuni-project/uyuni-tools/shared/utils"
)

// ServerImageFlags holds the server-specific image override flags.
// Viper maps --server-image → server.image and --server-tag → server.tag.
type ServerImageFlags struct {
// Image overrides the default server container image name.
Image string `mapstructure:"image"`
// Tag overrides the global --tag for the server container only.
// If not set, the global tag is used as fallback.
Tag string `mapstructure:"tag"`
}

// ServerFlags is a structure hosting the parameters for installation, migration and upgrade.
type ServerFlags struct {
Image types.ImageFlags `mapstructure:",squash"`
Coco CocoFlags
Mirror string
HubXmlrpc HubXmlrpcFlags
Migration MigrationFlags `mapstructure:",squash"`
Installation InstallationFlags `mapstructure:",squash"`
Image types.ImageFlags `mapstructure:",squash"`
// Server holds the server-specific image overrides (--server-image, --server-tag).
Server ServerImageFlags
Coco CocoFlags
Mirror string
HubXmlrpc HubXmlrpcFlags
Migration MigrationFlags `mapstructure:",squash"`
Installation InstallationFlags `mapstructure:",squash"`
// DBUpgradeImage is the image to use to perform the database upgrade.
DBUpgradeImage types.ImageFlags `mapstructure:"dbupgrade"`
Saline SalineFlags
Expand Down
25 changes: 19 additions & 6 deletions shared/testutils/flagstests/mgradm.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,21 @@ var InstallSSLFlagsTestArgs = []string{
"--ssl-server-key", "path/srv.key",
}

// ImageFlagsTestArgs is the expected values for AssertImageFlag.
// ImageOnlyFlagsTestArgs are the expected values for the global image flags.
var ImageOnlyFlagsTestArgs = []string{
"--image", "path/to/image",
"--registry", "myOldRegistry",
"--tag", "v1.2.3",
"--pullPolicy", "never",
}

// ServerImageOnlyFlagsTestArgs are the expected values for the server-specific image flags.
// Uses distinct values from ImageOnlyFlagsTestArgs so the override chain can be verified.
var ServerImageOnlyFlagsTestArgs = []string{
"--server-image", "custom/server-image",
"--server-tag", "server-tag-override",
}

// RegistryFlagsTestArgs is the expected values for AssertRegistryFlag.
var RegistryImageFlagsTestArgs = []string{
"--registry-host", "myregistry",
Expand All @@ -122,13 +129,19 @@ var RegistryImageFlagsTestArgs = []string{

var ImageFlagsTestArgs = append(ImageOnlyFlagsTestArgs, RegistryImageFlagsTestArgs...)

// AssertImageFlag checks that all image flags are parsed correctly.
// AssertServerImageFlags checks that --server-image and --server-tag are
// parsed into ServerFlags.Server and that the override is wired into flags.Image.
func AssertServerImageFlags(t *testing.T, flags *utils.ServerFlags) {
testutils.AssertEquals(t, "Error parsing --server-image", "custom/server-image", flags.Server.Image)
testutils.AssertEquals(t, "Error parsing --server-tag", "server-tag-override", flags.Server.Tag)
testutils.AssertEquals(t, "Error applying --server-image override", "custom/server-image", flags.Image.Name)
testutils.AssertEquals(t, "Error applying --server-tag override", "server-tag-override", flags.Image.Tag)
}

// AssertImageFlag checks the pull policy and registry flags.
// Name and Tag are not checked here as server commands override them via --server-image/--server-tag.
func AssertImageFlag(t *testing.T, flags *types.ImageFlags) {
testutils.AssertEquals(t, "Error parsing --image", "path/to/image", flags.Name)
testutils.AssertEquals(t, "Error parsing --registry", "myOldRegistry", flags.Registry.Host)
testutils.AssertEquals(t, "Error parsing --tag", "v1.2.3", flags.Tag)
testutils.AssertEquals(t, "Error parsing --pullPolicy", "never", flags.PullPolicy)

AssertRegistryFlag(t, &flags.Registry)
}

Expand Down
2 changes: 2 additions & 0 deletions shared/testutils/flagstests/mgradm_install.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ var InstallFlagsTestArgs = func() []string {

args = append(args, SCCFlagTestArgs...)
args = append(args, ImageFlagsTestArgs...)
args = append(args, ServerImageOnlyFlagsTestArgs...)
args = append(args, CocoFlagsTestArgs...)
args = append(args, HubXmlrpcFlagsTestArgs...)
args = append(args, SalineFlagsTestArgs...)
Expand Down Expand Up @@ -60,6 +61,7 @@ func AssertInstallFlags(t *testing.T, flags *utils.ServerFlags) {
testutils.AssertEquals(t, "Error parsing --admin-lastName", "adminlast", flags.Installation.Admin.LastName)
testutils.AssertEquals(t, "Error parsing --organization", "someorg", flags.Installation.Organization)
AssertSCCFlag(t, &flags.Installation.SCC)
AssertServerImageFlags(t, flags)
AssertImageFlag(t, &flags.Image)
AssertCocoFlag(t, &flags.Coco)
AssertHubXmlrpcFlag(t, &flags.HubXmlrpc)
Expand Down
2 changes: 2 additions & 0 deletions shared/testutils/flagstests/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ var ServerFlagsTestArgs = func() []string {
args = append(args, SSLGenerationFlagsTestArgs...)
args = append(args, SalineFlagsTestArgs...)
args = append(args, ImageFlagsTestArgs...)
args = append(args, ServerImageOnlyFlagsTestArgs...)
args = append(args, RegistryImageFlagsTestArgs...)
args = append(args, DBUpdateImageFlagTestArgs...)
args = append(args, CocoFlagsTestArgs...)
Expand All @@ -32,6 +33,7 @@ var ServerFlagsTestArgs = func() []string {

// AssertServerFlags checks that all the server-related common flags are parsed correctly.
func AssertServerFlags(t *testing.T, flags *utils.ServerFlags) {
AssertServerImageFlags(t, flags)
AssertImageFlag(t, &flags.Image)
AssertRegistryFlag(t, &flags.Image.Registry)
AssertDBUpgradeImageFlag(t, &flags.DBUpgradeImage)
Expand Down