Skip to content

Commit eb12127

Browse files
authored
Merge branch 'main' into cert_escape_char
2 parents 85645e6 + 93b5460 commit eb12127

File tree

10 files changed

+107
-66
lines changed

10 files changed

+107
-66
lines changed

.tito/packages/uyuni-tools

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5.1.10-0 ./
1+
5.1.11-0 ./

mgradm/cmd/install/podman/utils.go

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,25 @@ func installForPodman(
117117
return err
118118
}
119119

120+
if err := coco.SetupCocoContainer(
121+
systemd, authFile, flags.Image.Registry, flags.Coco, flags.Image,
122+
flags.Installation.DB,
123+
); err != nil {
124+
return err
125+
}
126+
127+
if err := hub.SetupHubXmlrpc(
128+
systemd, authFile, flags.Image.Registry, flags.Image.PullPolicy, flags.Image.Tag, flags.HubXmlrpc,
129+
); err != nil {
130+
return err
131+
}
132+
133+
if err := saline.SetupSalineContainer(
134+
systemd, authFile, flags.Image.Registry, flags.Saline, flags.Image, flags.Installation.TZ,
135+
); err != nil {
136+
return err
137+
}
138+
120139
cnx := shared.NewConnection("podman", shared_podman.ServerContainerName, "")
121140
if err := podman.WaitForSystemStart(systemd, cnx, preparedImage, flags.Installation.TZ,
122141
flags.Installation.Debug.Java, flags.Mirror, flags.Podman.Args); err != nil {
@@ -133,32 +152,6 @@ func installForPodman(
133152
return utils.Error(err, L("failed to extract payg data"))
134153
}
135154
}
136-
137-
if flags.Coco.Replicas > 0 {
138-
if err := coco.SetupCocoContainer(
139-
systemd, authFile, flags.Image.Registry, flags.Coco, flags.Image,
140-
flags.Installation.DB,
141-
); err != nil {
142-
return err
143-
}
144-
}
145-
146-
if flags.HubXmlrpc.Replicas > 0 {
147-
if err := hub.SetupHubXmlrpc(
148-
systemd, authFile, flags.Image.Registry, flags.Image.PullPolicy, flags.Image.Tag, flags.HubXmlrpc,
149-
); err != nil {
150-
return err
151-
}
152-
}
153-
154-
if flags.Saline.Replicas > 0 {
155-
if err := saline.SetupSalineContainer(
156-
systemd, authFile, flags.Image.Registry, flags.Saline, flags.Image, flags.Installation.TZ,
157-
); err != nil {
158-
return err
159-
}
160-
}
161-
162155
if err := shared_podman.EnablePodmanSocket(); err != nil {
163156
return utils.Error(err, L("cannot enable podman socket"))
164157
}

mgradm/cmd/scale/podman.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2024 SUSE LLC
1+
// SPDX-FileCopyrightText: 2025 SUSE LLC
22
//
33
// SPDX-License-Identifier: Apache-2.0
44

@@ -29,9 +29,9 @@ func podmanScale(
2929
if service == podman.ServerAttestationService {
3030
return systemd.ScaleService(newReplicas, service)
3131
}
32-
if service == podman.HubXmlrpcService {
32+
if service == podman.HubXmlrpcService || service == podman.SalineService {
3333
if newReplicas > 1 {
34-
return errors.New(L("Multiple Hub XML-RPC API container replicas are not currently supported."))
34+
return errors.New(L("Multiple container replicas are not currently supported."))
3535
}
3636
return systemd.ScaleService(newReplicas, service)
3737
}

mgradm/cmd/support/config/extractor.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// SPDX-FileCopyrightText: 2024 SUSE LLC
1+
// SPDX-FileCopyrightText: 2025 SUSE LLC
22
//
33
// SPDX-License-Identifier: Apache-2.0
44

mgradm/cmd/support/ptf/podman/utils.go

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -100,27 +100,24 @@ func (flags *podmanPTFFlags) checkParameters() error {
100100
}
101101
log.Info().Msgf(L("The computed image is %s"), flags.Image.Name)
102102

103-
if cocoImage := getServiceImage(podman_shared.ServerAttestationService + "@"); cocoImage != "" {
104-
// If no coco image was found then skip it during the upgrade.
105-
cocoImage, err = utils.ComputePTF(flags.CustomerID, projectID, cocoImage, suffix)
106-
if err != nil {
107-
return err
108-
}
109-
if hasRemoteImage(cocoImage) {
110-
flags.Coco.Image.Name = cocoImage
111-
log.Info().Msgf(L("The computed confidential computing image is %s"), flags.Coco.Image.Name)
112-
}
103+
images := map[string]*string{
104+
podman_shared.ServerAttestationService + "@": &flags.Coco.Image.Name,
105+
podman_shared.HubXmlrpcService: &flags.HubXmlrpc.Image.Name,
106+
podman_shared.SalineService: &flags.Saline.Image.Name,
107+
podman_shared.DBService: &flags.Pgsql.Image.Name,
113108
}
114109

115-
if hubImage := getServiceImage(podman_shared.HubXmlrpcService); hubImage != "" {
116-
// If no hub xmlrpc api image was found then skip it during the upgrade.
117-
hubImage, err = utils.ComputePTF(flags.CustomerID, projectID, hubImage, suffix)
118-
if err != nil {
119-
return err
120-
}
121-
if hasRemoteImage(hubImage) {
122-
flags.HubXmlrpc.Image.Name = hubImage
123-
log.Info().Msgf(L("The computed hub XML-RPC API image is %s"), flags.HubXmlrpc.Image.Name)
110+
for service, pointer := range images {
111+
if containerImage := getServiceImage(service); containerImage != "" {
112+
// If no image was found then skip it during the upgrade.
113+
containerImage, err = utils.ComputePTF(flags.CustomerID, projectID, containerImage, suffix)
114+
if err != nil {
115+
return err
116+
}
117+
if hasRemoteImage(containerImage) {
118+
*pointer = containerImage
119+
log.Info().Msgf(L("The %[1]s service image is %[2]s"), service, *pointer)
120+
}
124121
}
125122
}
126123

mgradm/cmd/support/ptf/podman/utils_test.go

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,51 +14,67 @@ import (
1414
)
1515

1616
func TestCheckParameters(t *testing.T) {
17-
createServiceImages := func(image string, cocoImage string, hubImage string) map[string]string {
17+
createServiceImages := func(
18+
image string, cocoImage string, hubImage string, salineImage string, dbImage string,
19+
) map[string]string {
1820
return map[string]string{
1921
podman.ServerService: image,
2022
podman.ServerAttestationService + "@": cocoImage,
2123
podman.HubXmlrpcService: hubImage,
24+
podman.SalineService: salineImage,
25+
podman.DBService: dbImage,
2226
}
2327
}
2428
type testData struct {
25-
serviceImages map[string]string
26-
hasRemoteImages map[string]bool
27-
expectedImage string
28-
expectedCocoImage string
29-
expectedHubImage string
30-
expectedError string
29+
serviceImages map[string]string
30+
hasRemoteImages map[string]bool
31+
expectedImage string
32+
expectedCocoImage string
33+
expectedHubImage string
34+
expectedSalineImage string
35+
expectedDBImage string
36+
expectedError string
3137
}
3238

3339
data := []testData{
3440
{
35-
createServiceImages("registry.suse.com/suse/manager/5.0/x86_64/server:5.0.0", "", ""),
41+
createServiceImages("registry.suse.com/suse/manager/5.0/x86_64/server:5.0.0", "", "", "", ""),
3642
map[string]bool{},
3743
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server:latest-ptf-5678",
3844
"",
3945
"",
4046
"",
47+
"",
48+
"",
4149
},
4250
{
4351
createServiceImages(
4452
"registry.suse.com/suse/manager/5.0/x86_64/server:5.0.0",
4553
"registry.suse.com/suse/manager/5.0/x86_64/server-attestation:5.0.0",
4654
"registry.suse.com/suse/manager/5.0/x86_64/server-hub-xmlrpc-api:5.0.0",
55+
"registry.suse.com/suse/manager/5.0/x86_64/server-saline:5.0.0",
56+
"registry.suse.com/suse/manager/5.0/x86_64/server-postgresql:5.0.0",
4757
),
4858
map[string]bool{
4959
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-attestation:latest-ptf-5678": true,
5060
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-hub-xmlrpc-api:latest-ptf-5678": true,
61+
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-saline:latest-ptf-5678": true,
62+
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-postgresql:latest-ptf-5678": true,
5163
},
5264
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server:latest-ptf-5678",
5365
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-attestation:latest-ptf-5678",
5466
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-hub-xmlrpc-api:latest-ptf-5678",
67+
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-saline:latest-ptf-5678",
68+
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-postgresql:latest-ptf-5678",
5569
"",
5670
},
5771
{
5872
createServiceImages(
5973
"registry.suse.com/suse/manager/5.0/x86_64/server:5.0.0",
6074
"registry.suse.com/suse/manager/5.0/x86_64/server-attestation:5.0.0",
6175
"",
76+
"",
77+
"",
6278
),
6379
map[string]bool{
6480
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server:latest-ptf-5678": true,
@@ -68,19 +84,25 @@ func TestCheckParameters(t *testing.T) {
6884
"",
6985
"",
7086
"",
87+
"",
88+
"",
7189
},
7290
{
7391
createServiceImages(
7492
"",
7593
"",
7694
"registry.suse.com/suse/manager/5.0/x86_64/server-hub-xmlrpc-api:5.0.0",
95+
"",
96+
"",
7797
),
7898
map[string]bool{
7999
"registry.suse.com/a/1234/5678/suse/manager/5.0/x86_64/server-hub-xmlrpc-api:latest-ptf-5678": true,
80100
},
81101
"",
82102
"",
83103
"",
104+
"",
105+
"",
84106
"failed to find server image",
85107
},
86108
}
@@ -109,5 +131,7 @@ func TestCheckParameters(t *testing.T) {
109131
testutils.AssertEquals(t, testCase+"unexpected image", test.expectedImage, flags.Image.Name)
110132
testutils.AssertEquals(t, testCase+"unexpected coco image", test.expectedCocoImage, flags.Coco.Image.Name)
111133
testutils.AssertEquals(t, testCase+"unexpected hub image", test.expectedHubImage, flags.HubXmlrpc.Image.Name)
134+
testutils.AssertEquals(t, testCase+"unexpected saline image", test.expectedSalineImage, flags.Saline.Image.Name)
135+
testutils.AssertEquals(t, testCase+"unexpected db image", test.expectedDBImage, flags.Pgsql.Image.Name)
112136
}
113137
}

mgradm/shared/saline/saline.go

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ func Upgrade(
3838
}
3939
return systemd.EnableService(podman.SalineService)
4040
}
41-
return systemd.DisableService(podman.SalineService)
41+
if systemd.ServiceIsEnabled(podman.SalineService) {
42+
return systemd.DisableService(podman.SalineService)
43+
}
44+
return nil
4245
}
4346

4447
func writeSalineServiceFiles(
@@ -60,10 +63,8 @@ func writeSalineServiceFiles(
6063
}
6164
if !salineFlags.IsChanged {
6265
log.Debug().Msg("Saline settings are not changed.")
63-
return nil
6466
} else if salineFlags.Replicas == 0 {
6567
log.Debug().Msg("No Saline requested.")
66-
return nil
6768
} else if salineFlags.Replicas > 1 {
6869
log.Warn().Msg(L("Multiple Saline container replicas are not currently supported, setting up only one."))
6970
salineFlags.Replicas = 1
@@ -91,14 +92,14 @@ func writeSalineServiceFiles(
9192
log.Info().Msg(L("Setting up Saline service"))
9293

9394
if err := utils.WriteTemplateToFile(salineData,
94-
podman.GetServicePath(podman.SalineService), 0555, true); err != nil {
95+
podman.GetServicePath(podman.SalineService+"@"), 0555, true); err != nil {
9596
return utils.Error(err, L("failed to generate systemd service unit file"))
9697
}
9798

9899
environment := fmt.Sprintf(`Environment=UYUNI_SALINE_IMAGE=%s`, preparedImage)
99100

100101
if err := podman.GenerateSystemdConfFile(
101-
podman.SalineService, "generated.conf", environment, true,
102+
podman.SalineService+"@", "generated.conf", environment, true,
102103
); err != nil {
103104
return utils.Error(err, L("cannot generate systemd conf file"))
104105
}
@@ -129,5 +130,21 @@ func SetupSalineContainer(
129130
if err := writeSalineServiceFiles(systemd, authFile, registry, salineFlags, baseImage, tz); err != nil {
130131
return err
131132
}
132-
return systemd.EnableService(podman.SalineService)
133+
return EnableSaline(systemd, salineFlags.Replicas)
134+
}
135+
136+
// EnableSaline enables the saline service if the number of replicas is 1.
137+
// This function is meant for installation or migration, to enable or disable the service after, use ScaleService.
138+
func EnableSaline(systemd podman.Systemd, replicas int) error {
139+
if replicas > 1 {
140+
log.Warn().Msg(L("Multiple Saline container replicas are not currently supported, setting up only one."))
141+
replicas = 1
142+
}
143+
144+
if replicas > 0 {
145+
if err := systemd.ScaleService(replicas, podman.SalineService); err != nil {
146+
return utils.Errorf(err, L("cannot enable service"))
147+
}
148+
}
149+
return nil
133150
}

mgradm/shared/utils/flags.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/spf13/cobra"
1414
apiTypes "github.com/uyuni-project/uyuni-tools/shared/api/types"
1515
. "github.com/uyuni-project/uyuni-tools/shared/l10n"
16+
"github.com/uyuni-project/uyuni-tools/shared/podman"
1617
"github.com/uyuni-project/uyuni-tools/shared/types"
1718
"github.com/uyuni-project/uyuni-tools/shared/utils"
1819
)
@@ -55,6 +56,8 @@ type InstallationFlags struct {
5556
Organization string
5657
}
5758

59+
var systemd podman.Systemd = podman.SystemdImpl{}
60+
5861
// CheckUpgradeParameters verifies the consistency of the parameters for upgrade and migrate commands.
5962
func (flags *InstallationFlags) CheckUpgradeParameters(cmd *cobra.Command, command string) {
6063
flags.setPasswordIfMissing()
@@ -93,7 +96,7 @@ func (flags *InstallationFlags) checkUpgradeSSLParameters(cmd *cobra.Command, co
9396
flags.SSL.CheckUpgradeParameters(isLocalDB)
9497

9598
// Since we use cert-manager for self-signed certificates on kubernetes we don't need password for it
96-
if !flags.SSL.UseProvidedDB() && command == "podman" {
99+
if !flags.SSL.UseProvidedDB() && command == "podman" && !systemd.HasService(podman.DBService) {
97100
utils.AskPasswordIfMissing(&flags.SSL.Password, cmd.Flag("ssl-password").Usage, 0, 0)
98101
}
99102
}

uyuni-tools.changes

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
-------------------------------------------------------------------
2+
Tue May 13 14:58:11 CEST 2025 - [email protected]
3+
4+
- version 5.1.11-0
5+
* Always create all necessary systemd files (bsc#1242595)
6+
* Patch saline and database images if needed mgradm support ptf
7+
18
-------------------------------------------------------------------
29
Mon May 12 22:54:33 CEST 2025 - [email protected]
310

uyuni-tools.spec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
# 0%{?debian} || 0%{?ubuntu}
5858

5959
Name: %{project}
60-
Version: 5.1.10
60+
Version: 5.1.11
6161
Release: 0
6262
Summary: Tools for managing %{productprettyname} container
6363
License: Apache-2.0

0 commit comments

Comments
 (0)