Skip to content

Commit

Permalink
mgradm should not pull coco and hub image if replicas == 0 (bsc#12301…
Browse files Browse the repository at this point in the history
…36) (#445)

* mgradm should not pull coco and hub image is replicas == 0 (bsc#1230136)
* do not pull coco and hub image if not requested
* make registry a local flag
* improve logs when image cannot be pulled
* handle pull image inside prepareImage function
* during upgrade: scale coco
  • Loading branch information
mbussolotto authored Sep 24, 2024
1 parent f8482d9 commit de4f44f
Show file tree
Hide file tree
Showing 32 changed files with 153 additions and 117 deletions.
2 changes: 0 additions & 2 deletions mgradm/cmd/install/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ func NewCommand(globalFlags *types.GlobalFlags) *cobra.Command {
Short: L("Install a new server"),
Long: L("Install a new server"),
}
installCmd.PersistentFlags().StringVar(&globalFlags.Registry, "registry", "", L("specify a private registry"))

installCmd.AddCommand(podman.NewCommand(globalFlags))

if kubernetesCmd := kubernetes.NewCommand(globalFlags); kubernetesCmd != nil {
Expand Down
2 changes: 1 addition & 1 deletion mgradm/cmd/install/kubernetes/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func installForKubernetes(globalFlags *types.GlobalFlags,
helmArgs = append(helmArgs, sslArgs...)

// Deploy Uyuni and wait for it to be up
if err := kubernetes.Deploy(cnx, globalFlags.Registry, &flags.Image, &flags.Helm, &flags.Ssl,
if err := kubernetes.Deploy(cnx, flags.Image.Registry, &flags.Image, &flags.Helm, &flags.Ssl,
clusterInfos, fqdn, flags.Debug.Java, false, helmArgs...,
); err != nil {
return shared_utils.Errorf(err, L("cannot deploy uyuni"))
Expand Down
30 changes: 15 additions & 15 deletions mgradm/cmd/install/podman/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,12 @@ func installForPodman(
}
log.Info().Msgf(L("Setting up the server with the FQDN '%s'"), fqdn)

image, err := utils.ComputeImage(globalFlags.Registry, utils.DefaultTag, flags.Image)
image, err := utils.ComputeImage(flags.Image.Registry, utils.DefaultTag, flags.Image)
if err != nil {
return utils.Errorf(err, L("failed to compute image URL"))
}

preparedImage, err := shared_podman.PrepareImage(authFile, image, flags.Image.PullPolicy)
preparedImage, err := shared_podman.PrepareImage(authFile, image, flags.Image.PullPolicy, true)
if err != nil {
return err
}
Expand Down Expand Up @@ -119,21 +119,21 @@ func installForPodman(
}
}

if err := coco.SetupCocoContainer(
authFile, flags.Coco.Replicas, globalFlags.Registry, flags.Coco.Image, flags.Image,
flags.Db.Name, flags.Db.Port, flags.Db.User, flags.Db.Password,
); err != nil {
return err
}

if err := hub.SetupHubXmlrpc(
authFile, globalFlags.Registry, flags.Image.PullPolicy, flags.Image.Tag, flags.HubXmlrpc.Image,
); err != nil {
return err
if flags.Coco.Replicas > 0 {
if err := coco.SetupCocoContainer(
authFile, flags.Image.Registry, flags.Coco, flags.Image,
flags.Db.Name, flags.Db.Port, flags.Db.User, flags.Db.Password,
); err != nil {
return err
}
}

if err := hub.EnableHubXmlrpc(flags.HubXmlrpc.Replicas); err != nil {
return err
if flags.HubXmlrpc.Replicas > 0 {
if err := hub.SetupHubXmlrpc(
authFile, flags.Image.Registry, flags.Image.PullPolicy, flags.Image.Tag, flags.HubXmlrpc,
); err != nil {
return err
}
}

if flags.Ssl.UseExisting() {
Expand Down
8 changes: 1 addition & 7 deletions mgradm/cmd/install/shared/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,6 @@ type DebugFlags struct {
Java bool
}

// CocoFlags contains settings for coco attestation container.
type CocoFlags struct {
Replicas int
Image types.ImageFlags `mapstructure:",squash"`
}

// InstallFlags stores all the flags used by install command.
type InstallFlags struct {
TZ string
Expand All @@ -58,7 +52,7 @@ type InstallFlags struct {
Scc types.SCCCredentials
Debug DebugFlags
Image types.ImageFlags `mapstructure:",squash"`
Coco CocoFlags
Coco cmd_utils.CocoFlags
HubXmlrpc cmd_utils.HubXmlrpcFlags
Admin apiTypes.User
Organization string
Expand Down
6 changes: 3 additions & 3 deletions mgradm/cmd/migrate/kubernetes/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ func migrateToKubernetes(
}
cnx := shared.NewConnection("kubectl", "", shared_kubernetes.ServerFilter)

serverImage, err := utils.ComputeImage(globalFlags.Registry, utils.DefaultTag, flags.Image)
serverImage, err := utils.ComputeImage(flags.Image.Registry, utils.DefaultTag, flags.Image)
if err != nil {
return utils.Errorf(err, L("failed to compute image URL"))
}
Expand Down Expand Up @@ -74,7 +74,7 @@ func migrateToKubernetes(
var sslFlags adm_utils.SslCertFlags

// Deploy for running migration command
if err := kubernetes.Deploy(cnx, globalFlags.Registry, &flags.Image, &flags.Helm, &sslFlags,
if err := kubernetes.Deploy(cnx, flags.Image.Registry, &flags.Image, &flags.Helm, &sslFlags,
clusterInfos, fqdn, false, flags.Prepare,
"--set", "migration.ssh.agentSocket="+sshAuthSocket,
"--set", "migration.ssh.configPath="+sshConfigPath,
Expand Down Expand Up @@ -153,7 +153,7 @@ func migrateToKubernetes(
newPgVersion := extractedData.ImagePgVersion

if oldPgVersion != newPgVersion {
if err := kubernetes.RunPgsqlVersionUpgrade(globalFlags.Registry, flags.Image,
if err := kubernetes.RunPgsqlVersionUpgrade(flags.Image.Registry, flags.Image,
flags.DbUpgradeImage, nodeName, oldPgVersion, newPgVersion,
); err != nil {
return utils.Errorf(err, L("cannot run PostgreSQL version upgrade script"))
Expand Down
2 changes: 0 additions & 2 deletions mgradm/cmd/migrate/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ func NewCommand(globalFlags *types.GlobalFlags) *cobra.Command {
Short: L("Migrate a remote server to containers"),
Long: L("Migrate a remote server to containers"),
}
migrateCmd.PersistentFlags().StringVar(&globalFlags.Registry, "registry", "", L("specify a private registry"))

migrateCmd.AddCommand(podman.NewCommand(globalFlags))

if kubernetesCmd := kubernetes.NewCommand(globalFlags); kubernetesCmd != nil {
Expand Down
2 changes: 2 additions & 0 deletions mgradm/cmd/migrate/podman/podman.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ NOTE: migrating to a remote podman is not supported yet!
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
var flags podmanMigrateFlags
flags.MigrateFlags.Coco.IsChanged = cmd.Flags().Changed("coco-replicas")
flags.MigrateFlags.HubXmlrpc.IsChanged = cmd.Flags().Changed("hubxmlrpc-replicas")
return utils.CommandHelper(globalFlags, cmd, args, &flags, migrateToPodman)
},
}
Expand Down
39 changes: 20 additions & 19 deletions mgradm/cmd/migrate/podman/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func migrateToPodman(globalFlags *types.GlobalFlags, flags *podmanMigrateFlags,
return err
}

serverImage, err := utils.ComputeImage(globalFlags.Registry, utils.DefaultTag, flags.Image)
serverImage, err := utils.ComputeImage(flags.Image.Registry, utils.DefaultTag, flags.Image)
if err != nil {
return utils.Errorf(err, L("cannot compute image"))
}
Expand All @@ -48,7 +48,7 @@ func migrateToPodman(globalFlags *types.GlobalFlags, flags *podmanMigrateFlags,
}
defer cleaner()

preparedImage, err := podman_utils.PrepareImage(authFile, serverImage, flags.Image.PullPolicy)
preparedImage, err := podman_utils.PrepareImage(authFile, serverImage, flags.Image.PullPolicy, true)
if err != nil {
return err
}
Expand All @@ -73,7 +73,7 @@ func migrateToPodman(globalFlags *types.GlobalFlags, flags *podmanMigrateFlags,

if oldPgVersion != newPgVersion {
if err := podman.RunPgsqlVersionUpgrade(
authFile, globalFlags.Registry, flags.Image, flags.DbUpgradeImage, oldPgVersion, newPgVersion,
authFile, flags.Image.Registry, flags.Image, flags.DbUpgradeImage, oldPgVersion, newPgVersion,
); err != nil {
return utils.Errorf(err, L("cannot run PostgreSQL version upgrade script"))
}
Expand All @@ -100,34 +100,35 @@ func migrateToPodman(globalFlags *types.GlobalFlags, flags *podmanMigrateFlags,
}

// Prepare confidential computing containers
if err = coco.Upgrade(
authFile, globalFlags.Registry, flags.Coco.Image, flags.Image,
extractedData.DbPort, extractedData.DbName,
extractedData.DbUser, extractedData.DbPassword,
); err != nil {
return utils.Errorf(err, L("cannot setup confidential computing attestation service"))
}

if flags.Coco.Replicas > 0 {
if err = coco.Upgrade(
authFile, flags.Image.Registry, flags.Coco, flags.Image,
extractedData.DbPort, extractedData.DbName,
extractedData.DbUser, extractedData.DbPassword,
); err != nil {
return utils.Errorf(err, L("cannot setup confidential computing attestation service"))
}

err := podman_utils.ScaleService(flags.Coco.Replicas, podman_utils.ServerAttestationService)
if err != nil {
return err
}
}

if err := hub.SetupHubXmlrpc(
authFile, globalFlags.Registry, flags.Image.PullPolicy, flags.Image.Tag, flags.HubXmlrpc.Image,
); err != nil {
return err
}

hubReplicas := flags.HubXmlrpc.Replicas
if extractedData.HasHubXmlrpcApi {
log.Info().Msg(L("Enabling Hub XML-RPC API since it is enabled on the migrated server"))
hubReplicas = 1
}
if err := hub.EnableHubXmlrpc(hubReplicas); err != nil {
return err
if hubReplicas > 0 {
if err := hub.SetupHubXmlrpc(
authFile, flags.Image.Registry, flags.Image.PullPolicy, flags.Image.Tag, flags.HubXmlrpc,
); err != nil {
return err
}
if err := hub.EnableHubXmlrpc(hubReplicas); err != nil {
return err
}
}

log.Info().Msg(L("Server migrated"))
Expand Down
7 changes: 3 additions & 4 deletions mgradm/cmd/migrate/shared/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package shared

import (
"github.com/spf13/cobra"
"github.com/uyuni-project/uyuni-tools/mgradm/cmd/install/shared"
"github.com/uyuni-project/uyuni-tools/mgradm/shared/utils"
. "github.com/uyuni-project/uyuni-tools/shared/l10n"
"github.com/uyuni-project/uyuni-tools/shared/types"
Expand All @@ -17,7 +16,7 @@ type MigrateFlags struct {
Prepare bool
Image types.ImageFlags `mapstructure:",squash"`
DbUpgradeImage types.ImageFlags `mapstructure:"dbupgrade"`
Coco shared.CocoFlags
Coco utils.CocoFlags
User string
Mirror string
HubXmlrpc utils.HubXmlrpcFlags
Expand All @@ -30,7 +29,7 @@ func AddMigrateFlags(cmd *cobra.Command) {
utils.AddSCCFlag(cmd)
utils.AddImageFlag(cmd)
utils.AddDbUpgradeImageFlag(cmd)
utils.AddCocoFlag(cmd)
utils.AddHubXmlrpcFlags(cmd)
utils.AddUpgradeCocoFlag(cmd)
utils.AddUpgradeHubXmlrpcFlags(cmd)
cmd.Flags().String("user", "root", L("User on the source server. Non-root user must have passwordless sudo privileges (NOPASSWD tag in /etc/sudoers)."))
}
5 changes: 4 additions & 1 deletion mgradm/cmd/support/ptf/podman/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/rs/zerolog/log"
"github.com/spf13/cobra"
"github.com/uyuni-project/uyuni-tools/mgradm/shared/podman"
adm_utils "github.com/uyuni-project/uyuni-tools/mgradm/shared/utils"
. "github.com/uyuni-project/uyuni-tools/shared/l10n"
podman_shared "github.com/uyuni-project/uyuni-tools/shared/podman"
"github.com/uyuni-project/uyuni-tools/shared/types"
Expand All @@ -26,6 +27,8 @@ func ptfForPodman(
//we don't want to perform a postgres version upgrade when installing a PTF.
//in that case, we can use the upgrade command.
dummyImage := types.ImageFlags{}
dummyCoco := adm_utils.CocoFlags{}
dummyHubXmlrpc := adm_utils.HubXmlrpcFlags{}
if err := flags.checkParameters(); err != nil {
return err
}
Expand All @@ -41,7 +44,7 @@ func ptfForPodman(
}
defer cleaner()

return podman.Upgrade(authFile, "", flags.Image, dummyImage, dummyImage, dummyImage)
return podman.Upgrade(authFile, "", flags.Image, dummyImage, dummyCoco, dummyHubXmlrpc)
}

func (flags *podmanPTFFlags) checkParameters() error {
Expand Down
4 changes: 3 additions & 1 deletion mgradm/cmd/upgrade/podman/podman.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ func NewCommand(globalFlags *types.GlobalFlags) *cobra.Command {
Args: cobra.ExactArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
var flags podmanUpgradeFlags
flags.UpgradeFlags.Coco.IsChanged = cmd.Flags().Changed("coco-replicas")
flags.UpgradeFlags.HubXmlrpc.IsChanged = cmd.Flags().Changed("hubxmlrpc-replicas")
return utils.CommandHelper(globalFlags, cmd, args, &flags, upgradePodman)
},
}
Expand All @@ -46,7 +48,7 @@ func NewCommand(globalFlags *types.GlobalFlags) *cobra.Command {
if err := viper.Unmarshal(&flags); err != nil {
log.Fatal().Err(err).Msg(L("failed to unmarshall configuration"))
}
if err := podman.ShowAvailableTag(globalFlags.Registry, flags.Image); err != nil {
if err := podman.ShowAvailableTag(flags.Image.Registry, flags.Image); err != nil {
log.Fatal().Err(err)
}
},
Expand Down
2 changes: 1 addition & 1 deletion mgradm/cmd/upgrade/podman/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ func upgradePodman(globalFlags *types.GlobalFlags, flags *podmanUpgradeFlags, cm
defer cleaner()

return podman.Upgrade(
authFile, globalFlags.Registry, flags.Image, flags.DbUpgradeImage, flags.Coco.Image, flags.HubXmlrpc,
authFile, flags.Image.Registry, flags.Image, flags.DbUpgradeImage, flags.Coco, flags.HubXmlrpc,
)
}
16 changes: 4 additions & 12 deletions mgradm/cmd/upgrade/shared/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,16 @@ package shared

import (
"github.com/spf13/cobra"
"github.com/uyuni-project/uyuni-tools/mgradm/cmd/install/shared"
"github.com/uyuni-project/uyuni-tools/mgradm/shared/utils"
. "github.com/uyuni-project/uyuni-tools/shared/l10n"
"github.com/uyuni-project/uyuni-tools/shared/types"
shared_utils "github.com/uyuni-project/uyuni-tools/shared/utils"
)

// UpgradeFlags represents flags used for upgrading a server.
type UpgradeFlags struct {
Image types.ImageFlags `mapstructure:",squash"`
DbUpgradeImage types.ImageFlags `mapstructure:"dbupgrade"`
Coco shared.CocoFlags
HubXmlrpc types.ImageFlags
Coco utils.CocoFlags
HubXmlrpc utils.HubXmlrpcFlags
}

// AddUpgradeFlags add upgrade flags to a command.
Expand All @@ -27,13 +24,8 @@ func AddUpgradeFlags(cmd *cobra.Command) {
utils.AddSCCFlag(cmd)
utils.AddDbUpgradeImageFlag(cmd)

_ = shared_utils.AddFlagHelpGroup(cmd, &shared_utils.Group{
ID: "coco-container",
Title: L("Confidential Computing Flags"),
})
utils.AddContainerImageFlags(cmd, "coco", L("confidential computing attestation"), "coco-container", "server-attestation")
_ = shared_utils.AddFlagHelpGroup(cmd, &shared_utils.Group{ID: "hubxmlrpc-container", Title: L("Hub XML-RPC API")})
utils.AddContainerImageFlags(cmd, "hubxmlrpc", L("Hub XML-RPC API"), "hubxmlrpc-container", "server-hub-xmlrpc-api")
utils.AddUpgradeCocoFlag(cmd)
utils.AddUpgradeHubXmlrpcFlags(cmd)
}

// AddUpgradeListFlags add upgrade list flags to a command.
Expand Down
2 changes: 0 additions & 2 deletions mgradm/cmd/upgrade/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ func NewCommand(globalFlags *types.GlobalFlags) *cobra.Command {
Short: L("Upgrade local server"),
Long: L("Upgrade local server"),
}
upgradeCmd.PersistentFlags().StringVar(&globalFlags.Registry, "registry", "", L("specify a private registry"))

upgradeCmd.AddCommand(podman.NewCommand(globalFlags))

if kubernetesCmd := kubernetes.NewCommand(globalFlags); kubernetesCmd != nil {
Expand Down
Loading

0 comments on commit de4f44f

Please sign in to comment.