Skip to content

Commit db9862d

Browse files
committed
Make admin secrets optional
Admin user secret is needed only for first initialization. Make them optional so upgrade works.
1 parent 4d299a0 commit db9862d

4 files changed

Lines changed: 112 additions & 20 deletions

File tree

mgradm/shared/podman/podman.go

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -99,32 +99,41 @@ func GenerateServerSystemdService(mirrorPath string, debug bool) error {
9999
}
100100

101101
data := templates.PodmanServiceTemplateData{
102-
Volumes: volumes,
103-
NamePrefix: "uyuni",
104-
Args: strings.Join(args, " "),
105-
Ports: ports,
106-
Network: podman.UyuniNetwork,
107-
CaSecret: podman.CASecret,
108-
CaPath: ssl.CAContainerPath,
109-
CertSecret: podman.SSLCertSecret,
110-
CertPath: ssl.ServerCertPath,
111-
KeySecret: podman.SSLKeySecret,
112-
KeyPath: ssl.ServerCertKeyPath,
113-
DBCaSecret: podman.DBCASecret,
114-
DBCaPath: ssl.DBCAContainerPath,
115-
AdminUserSecret: podman.AdminUserSecret,
116-
AdminPassSecret: podman.AdminPassSecret,
117-
DBUserSecret: podman.DBUserSecret,
118-
DBPassSecret: podman.DBPassSecret,
119-
ReportDBUserSecret: podman.ReportDBUserSecret,
120-
ReportDBPassSecret: podman.ReportDBPassSecret,
121-
ServerEnvFile: podman.GetServiceConfPath("uyuni-server", podman.ServerEnvironmentFile),
102+
Volumes: volumes,
103+
NamePrefix: "uyuni",
104+
Args: strings.Join(args, " "),
105+
Ports: ports,
106+
Network: podman.UyuniNetwork,
107+
CaSecret: podman.CASecret,
108+
CaPath: ssl.CAContainerPath,
109+
CertSecret: podman.SSLCertSecret,
110+
CertPath: ssl.ServerCertPath,
111+
KeySecret: podman.SSLKeySecret,
112+
KeyPath: ssl.ServerCertKeyPath,
113+
DBCaSecret: podman.DBCASecret,
114+
DBCaPath: ssl.DBCAContainerPath,
115+
ServerEnvFile: podman.GetServiceConfPath("uyuni-server", podman.ServerEnvironmentFile),
122116
}
123117
if podman.HasSecret(podman.SCCUserSecret) {
124118
data.SCCUserSecret = podman.SCCUserSecret
125119
data.SCCPassSecret = podman.SCCPassSecret
126120
}
127121

122+
if podman.HasSecret(podman.AdminUserSecret) {
123+
data.AdminUserSecret = podman.AdminUserSecret
124+
data.AdminPassSecret = podman.AdminPassSecret
125+
}
126+
127+
if podman.HasSecret(podman.DBUserSecret) {
128+
data.DBUserSecret = podman.DBUserSecret
129+
data.DBPassSecret = podman.DBPassSecret
130+
}
131+
132+
if podman.HasSecret(podman.ReportDBUserSecret) {
133+
data.ReportDBUserSecret = podman.ReportDBUserSecret
134+
data.ReportDBPassSecret = podman.ReportDBPassSecret
135+
}
136+
128137
if err := utils.WriteTemplateToFile(data, podman.GetServicePath("uyuni-server"), 0444, true); err != nil {
129138
return utils.Errorf(err, L("failed to generate systemd service unit file"))
130139
}

mgradm/shared/templates/serviceTemplate.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,14 @@ ExecStart=/bin/sh -c '/usr/bin/podman run \
4545
{{- end }}
4646
--env-file={{ .ServerEnvFile }} \
4747
--network {{ .Network }} \
48+
{{- if .DBUserSecret }}
4849
--secret {{ .DBUserSecret }},type=env,target=MANAGER_USER \
4950
--secret {{ .DBPassSecret }},type=env,target=MANAGER_PASS \
51+
{{- end }}
52+
{{- if .ReportDBUserSecret }}
5053
--secret {{ .ReportDBUserSecret }},type=env,target=REPORT_DB_USER \
5154
--secret {{ .ReportDBPassSecret }},type=env,target=REPORT_DB_PASS \
55+
{{- end }}
5256
--secret {{ .CaSecret }},type=mount,target={{ .CaPath }} \
5357
--secret {{ .CaSecret }},type=mount,target=/usr/share/susemanager/salt/certs/RHN-ORG-TRUSTED-SSL-CERT \
5458
--secret {{ .CaSecret }},type=mount,target=/srv/www/htdocs/pub/RHN-ORG-TRUSTED-SSL-CERT \

mgradm/shared/templates/templates_test.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,83 @@ TimeoutStopSec=180
158158
TimeoutStartSec=900
159159
Type=forking
160160
161+
[Install]
162+
WantedBy=multi-user.target default.target
163+
`,
164+
},
165+
{
166+
name: "PodmanServiceUpdateTemplateData",
167+
template: PodmanServiceTemplateData{
168+
Volumes: []types.VolumeMount{{Name: "var-spacewalk", MountPath: "/var/spacewalk"}},
169+
NamePrefix: "uyuni",
170+
Args: "--arg value",
171+
Ports: []types.PortMap{utils.NewPortMap(80)},
172+
Network: "uyuni-network",
173+
CaSecret: "ca-secret",
174+
CaPath: "/etc/pki/ca.crt",
175+
DBCaSecret: "db-ca-secret",
176+
DBCaPath: "/etc/pki/db-ca.crt",
177+
CertSecret: "cert-secret",
178+
CertPath: "/etc/pki/tls.crt",
179+
KeySecret: "key-secret",
180+
KeyPath: "/etc/pki/tls.key",
181+
ServerEnvFile: "/etc/systemd/system/uyuni-server.conf.d/server.env",
182+
},
183+
expected: `# uyuni-server.service, generated by mgradm
184+
# Use an uyuni-server.service.d/local.conf file to override
185+
186+
[Unit]
187+
Description=Uyuni server image container service
188+
Wants=network.target
189+
After=network-online.target
190+
RequiresMountsFor=%t/containers
191+
192+
[Service]
193+
Environment=PODMAN_SYSTEMD_UNIT=%n
194+
Restart=on-success
195+
ExecStartPre=/bin/rm -f %t/uyuni-server.pid %t/%n.ctr-id
196+
ExecStartPre=/usr/bin/podman rm --ignore --force -t 10 uyuni-server
197+
ExecStart=/bin/sh -c '/usr/bin/podman run \
198+
--conmon-pidfile %t/uyuni-server.pid \
199+
--cidfile=%t/%n.ctr-id \
200+
--cgroups=no-conmon \
201+
--shm-size=0 \
202+
--shm-size-systemd=0 \
203+
--sdnotify=conmon \
204+
--systemd=always \
205+
-d \
206+
--name uyuni-server \
207+
--hostname uyuni-server.mgr.internal \
208+
--arg value \
209+
-p 80:80 \
210+
-v var-spacewalk:/var/spacewalk \
211+
--env-file=/etc/systemd/system/uyuni-server.conf.d/server.env \
212+
--network uyuni-network \
213+
--secret ca-secret,type=mount,target=/etc/pki/ca.crt \
214+
--secret ca-secret,type=mount,target=/usr/share/susemanager/salt/certs/RHN-ORG-TRUSTED-SSL-CERT \
215+
--secret ca-secret,type=mount,target=/srv/www/htdocs/pub/RHN-ORG-TRUSTED-SSL-CERT \
216+
--secret cert-secret,type=mount,target=/etc/pki/tls.crt \
217+
--secret key-secret,type=mount,target=/etc/pki/tls.key \
218+
--secret db-ca-secret,type=mount,target=/etc/pki/db-ca.crt \
219+
--health-on-failure=stop \
220+
${PODMAN_EXTRA_ARGS} ${UYUNI_IMAGE}'
221+
222+
ExecStop=-/usr/bin/podman exec \
223+
uyuni-server \
224+
/bin/bash -c 'spacewalk-service stop'
225+
ExecStop=/usr/bin/podman stop \
226+
--ignore -t 10 \
227+
--cidfile=%t/%n.ctr-id
228+
ExecStopPost=/usr/bin/podman rm \
229+
-f \
230+
--ignore -t 10 \
231+
--cidfile=%t/%n.ctr-id
232+
233+
PIDFile=%t/uyuni-server.pid
234+
TimeoutStopSec=180
235+
TimeoutStartSec=900
236+
Type=forking
237+
161238
[Install]
162239
WantedBy=multi-user.target default.target
163240
`,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- Do not require admin secrets on upgrades
2+
(bsc#1262409)

0 commit comments

Comments
 (0)