8
. "github.com/containers/podman/v5/test/utils"
9
. "github.com/onsi/ginkgo/v2"
10
. "github.com/onsi/gomega"
11
. "github.com/onsi/gomega/gexec"
14
var _ = Describe("Podman generate systemd", func() {
16
It("podman generate systemd on bogus container/pod", func() {
17
session := podmanTest.Podman([]string{"generate", "systemd", "foobar"})
18
session.WaitWithDefaultTimeout()
19
Expect(session).To(ExitWithError(125, `foobar does not refer to a container or pod: no pod with name or ID foobar found: no such pod: no container with name or ID "foobar" found: no such container`))
22
It("podman generate systemd bad timeout value", func() {
23
session := podmanTest.Podman([]string{"generate", "systemd", "--time", "-1", "foobar"})
24
session.WaitWithDefaultTimeout()
25
Expect(session).To(ExitWithError(125, `invalid argument "-1" for "-t, --time" flag: strconv.ParseUint: parsing "-1": invalid syntax`))
28
It("podman generate systemd bad restart-policy value", func() {
29
session := podmanTest.Podman([]string{"create", "--name", "foobar", "alpine", "top"})
30
session.WaitWithDefaultTimeout()
31
Expect(session).Should(Exit(0))
33
session = podmanTest.Podman([]string{"generate", "systemd", "--restart-policy", "bogus", "foobar"})
34
session.WaitWithDefaultTimeout()
35
Expect(session).To(ExitWithError(125, "bogus is not a valid restart policy"))
38
It("podman generate systemd with --no-header=true", func() {
39
session := podmanTest.Podman([]string{"create", "--name", "foobar", "alpine", "top"})
40
session.WaitWithDefaultTimeout()
41
Expect(session).Should(Exit(0))
43
session = podmanTest.Podman([]string{"generate", "systemd", "foobar", "--no-header=true"})
44
session.WaitWithDefaultTimeout()
45
Expect(session).Should(Exit(0))
47
Expect(session.OutputToString()).NotTo(ContainSubstring("autogenerated by"))
50
It("podman generate systemd with --no-header", func() {
51
session := podmanTest.Podman([]string{"create", "--name", "foobar", "alpine", "top"})
52
session.WaitWithDefaultTimeout()
53
Expect(session).Should(Exit(0))
55
session = podmanTest.Podman([]string{"generate", "systemd", "foobar", "--no-header"})
56
session.WaitWithDefaultTimeout()
57
Expect(session).Should(Exit(0))
59
Expect(session.OutputToString()).NotTo(ContainSubstring("autogenerated by"))
62
It("podman generate systemd with --no-header=false", func() {
63
session := podmanTest.Podman([]string{"create", "--name", "foobar", "alpine", "top"})
64
session.WaitWithDefaultTimeout()
65
Expect(session).Should(Exit(0))
67
session = podmanTest.Podman([]string{"generate", "systemd", "foobar", "--no-header=false"})
68
session.WaitWithDefaultTimeout()
69
Expect(session).Should(Exit(0))
71
Expect(session.OutputToString()).To(ContainSubstring("autogenerated by"))
74
It("podman generate systemd good timeout value", func() {
75
session := podmanTest.Podman([]string{"create", "--name", "foobar", "alpine", "top"})
76
session.WaitWithDefaultTimeout()
77
Expect(session).Should(Exit(0))
79
session = podmanTest.Podman([]string{"generate", "systemd", "--time", "1234", "foobar"})
80
session.WaitWithDefaultTimeout()
81
Expect(session).Should(Exit(0))
82
Expect(session.OutputToString()).To(ContainSubstring("TimeoutStopSec=1294"))
83
Expect(session.OutputToString()).To(ContainSubstring("-t 1234"))
86
It("podman generate systemd", func() {
87
n := podmanTest.Podman([]string{"run", "--name", "nginx", "-dt", NGINX_IMAGE})
88
n.WaitWithDefaultTimeout()
89
Expect(n).Should(Exit(0))
91
session := podmanTest.Podman([]string{"generate", "systemd", "nginx"})
92
session.WaitWithDefaultTimeout()
93
Expect(session).Should(Exit(0))
95
// The podman commands in the unit should not contain the root flags
96
Expect(session.OutputToString()).ToNot(ContainSubstring(" --runroot"))
99
It("podman generate systemd --files --name", func() {
100
n := podmanTest.Podman([]string{"run", "--name", "nginx", "-dt", NGINX_IMAGE})
101
n.WaitWithDefaultTimeout()
102
Expect(n).Should(Exit(0))
104
session := podmanTest.Podman([]string{"generate", "systemd", "--files", "--name", "nginx"})
105
session.WaitWithDefaultTimeout()
106
Expect(session).Should(Exit(0))
108
for _, file := range session.OutputToStringArray() {
111
Expect(session.OutputToString()).To(ContainSubstring("/container-nginx.service"))
114
It("podman generate systemd with timeout", func() {
115
n := podmanTest.Podman([]string{"run", "--name", "nginx", "-dt", NGINX_IMAGE})
116
n.WaitWithDefaultTimeout()
117
Expect(n).Should(Exit(0))
119
session := podmanTest.Podman([]string{"generate", "systemd", "--time", "5", "nginx"})
120
session.WaitWithDefaultTimeout()
121
Expect(session).Should(Exit(0))
122
Expect(session.OutputToString()).To(ContainSubstring("TimeoutStopSec=65"))
123
Expect(session.OutputToString()).ToNot(ContainSubstring("TimeoutStartSec="))
124
Expect(session.OutputToString()).To(ContainSubstring("podman stop"))
125
Expect(session.OutputToString()).To(ContainSubstring("-t 5"))
127
session = podmanTest.Podman([]string{"generate", "systemd", "--stop-timeout", "5", "--start-timeout", "123", "nginx"})
128
session.WaitWithDefaultTimeout()
129
Expect(session).Should(Exit(0))
130
Expect(session.OutputToString()).To(ContainSubstring("TimeoutStartSec=123"))
131
Expect(session.OutputToString()).To(ContainSubstring("TimeoutStopSec=65"))
132
Expect(session.OutputToString()).To(ContainSubstring("-t 5"))
135
It("podman generate systemd with user-defined dependencies", func() {
136
n := podmanTest.Podman([]string{"run", "--name", "nginx", "-dt", NGINX_IMAGE})
137
n.WaitWithDefaultTimeout()
138
Expect(n).Should(Exit(0))
140
session := podmanTest.Podman([]string{"generate", "systemd", "--wants", "foobar.service", "nginx"})
141
session.WaitWithDefaultTimeout()
142
Expect(session).Should(Exit(0))
144
// The generated systemd unit should contain the User-defined Wants option
145
Expect(session.OutputToString()).To(ContainSubstring("# User-defined dependencies"))
146
Expect(session.OutputToString()).To(ContainSubstring("Wants=foobar.service"))
148
session = podmanTest.Podman([]string{"generate", "systemd", "--after", "foobar.service", "nginx"})
149
session.WaitWithDefaultTimeout()
150
Expect(session).Should(Exit(0))
152
// The generated systemd unit should contain the User-defined After option
153
Expect(session.OutputToString()).To(ContainSubstring("# User-defined dependencies"))
154
Expect(session.OutputToString()).To(ContainSubstring("After=foobar.service"))
156
session = podmanTest.Podman([]string{"generate", "systemd", "--requires", "foobar.service", "nginx"})
157
session.WaitWithDefaultTimeout()
158
Expect(session).Should(Exit(0))
160
// The generated systemd unit should contain the User-defined Requires option
161
Expect(session.OutputToString()).To(ContainSubstring("# User-defined dependencies"))
162
Expect(session.OutputToString()).To(ContainSubstring("Requires=foobar.service"))
164
session = podmanTest.Podman([]string{
165
"generate", "systemd",
166
"--wants", "foobar.service", "--wants", "barfoo.service",
167
"--after", "foobar.service", "--after", "barfoo.service",
168
"--requires", "foobar.service", "--requires", "barfoo.service", "nginx"})
169
session.WaitWithDefaultTimeout()
170
Expect(session).Should(Exit(0))
172
// The generated systemd unit should contain the User-defined Want, After, Requires options
173
Expect(session.OutputToString()).To(ContainSubstring("# User-defined dependencies"))
174
Expect(session.OutputToString()).To(ContainSubstring("Wants=foobar.service barfoo.service"))
175
Expect(session.OutputToString()).To(ContainSubstring("After=foobar.service barfoo.service"))
176
Expect(session.OutputToString()).To(ContainSubstring("Requires=foobar.service barfoo.service"))
179
It("podman generate systemd pod --name", func() {
180
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
181
n.WaitWithDefaultTimeout()
182
Expect(n).Should(Exit(0))
184
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-1", "alpine", "top"})
185
n.WaitWithDefaultTimeout()
186
Expect(n).Should(Exit(0))
188
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-2", "alpine", "top"})
189
n.WaitWithDefaultTimeout()
190
Expect(n).Should(Exit(0))
192
session := podmanTest.Podman([]string{"generate", "systemd", "--time", "42", "--name", "foo"})
193
session.WaitWithDefaultTimeout()
194
Expect(session).Should(Exit(0))
196
// Grepping the output (in addition to unit tests)
197
output := session.OutputToString()
198
Expect(output).To(ContainSubstring("# pod-foo.service"))
199
Expect(output).To(ContainSubstring("Wants=container-foo-1.service container-foo-2.service"))
200
Expect(output).To(ContainSubstring("# container-foo-1.service"))
201
Expect(output).To(ContainSubstring(" start foo-1"))
202
Expect(output).To(ContainSubstring("-infra")) // infra container
203
Expect(output).To(ContainSubstring("# container-foo-2.service"))
204
Expect(output).To(ContainSubstring("podman stop"))
205
Expect(output).To(ContainSubstring("-t 42 foo-2"))
206
Expect(output).To(ContainSubstring("BindsTo=pod-foo.service"))
207
Expect(output).To(ContainSubstring("PIDFile="))
208
Expect(output).To(ContainSubstring("/userdata/conmon.pid"))
209
Expect(strings.Count(output, "RequiresMountsFor="+podmanTest.RunRoot)).To(Equal(3))
210
// The podman commands in the unit should not contain the root flags
211
Expect(output).ToNot(ContainSubstring(" --runroot"))
213
// Generating pod/container units for an init container is not
214
// supported (see #18585).
215
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--init-ctr", "always", "--name", "foo-init", "alpine", "top"})
216
n.WaitWithDefaultTimeout()
217
Expect(n).Should(Exit(0))
219
session = podmanTest.Podman([]string{"generate", "systemd", "foo"})
220
session.WaitWithDefaultTimeout()
221
Expect(session).Should(Exit(125))
222
Expect(session.ErrorToString()).To(ContainSubstring("cannot generate systemd units for init containers"))
223
// Fail for the init container
224
session = podmanTest.Podman([]string{"generate", "systemd", "foo-init"})
225
session.WaitWithDefaultTimeout()
226
Expect(session).Should(Exit(125))
227
Expect(session.ErrorToString()).To(ContainSubstring("cannot generate systemd units for init containers"))
230
It("podman generate systemd pod --name --files", func() {
231
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
232
n.WaitWithDefaultTimeout()
233
Expect(n).Should(Exit(0))
235
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-1", "alpine", "top"})
236
n.WaitWithDefaultTimeout()
237
Expect(n).Should(Exit(0))
239
session := podmanTest.Podman([]string{"generate", "systemd", "--name", "--files", "foo"})
240
session.WaitWithDefaultTimeout()
241
Expect(session).Should(Exit(0))
243
for _, file := range session.OutputToStringArray() {
247
Expect(session.OutputToString()).To(ContainSubstring("/pod-foo.service"))
248
Expect(session.OutputToString()).To(ContainSubstring("/container-foo-1.service"))
251
It("podman generate systemd pod with user-defined dependencies", func() {
252
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
253
n.WaitWithDefaultTimeout()
254
Expect(n).Should(Exit(0))
256
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-1", "alpine", "top"})
257
n.WaitWithDefaultTimeout()
258
Expect(n).Should(Exit(0))
260
session := podmanTest.Podman([]string{"generate", "systemd", "--name", "--wants", "foobar.service", "foo"})
261
session.WaitWithDefaultTimeout()
262
Expect(session).Should(Exit(0))
264
// The generated systemd unit should contain the User-defined Wants option
265
Expect(session.OutputToString()).To(ContainSubstring("# User-defined dependencies"))
266
Expect(session.OutputToString()).To(ContainSubstring("Wants=foobar.service"))
268
session = podmanTest.Podman([]string{"generate", "systemd", "--name", "--after", "foobar.service", "foo"})
269
session.WaitWithDefaultTimeout()
270
Expect(session).Should(Exit(0))
272
// The generated systemd unit should contain the User-defined After option
273
Expect(session.OutputToString()).To(ContainSubstring("# User-defined dependencies"))
274
Expect(session.OutputToString()).To(ContainSubstring("After=foobar.service"))
276
session = podmanTest.Podman([]string{"generate", "systemd", "--name", "--requires", "foobar.service", "foo"})
277
session.WaitWithDefaultTimeout()
278
Expect(session).Should(Exit(0))
280
// The generated systemd unit should contain the User-defined Requires option
281
Expect(session.OutputToString()).To(ContainSubstring("# User-defined dependencies"))
282
Expect(session.OutputToString()).To(ContainSubstring("Requires=foobar.service"))
284
session = podmanTest.Podman([]string{
285
"generate", "systemd", "--name",
286
"--wants", "foobar.service", "--wants", "barfoo.service",
287
"--after", "foobar.service", "--after", "barfoo.service",
288
"--requires", "foobar.service", "--requires", "barfoo.service", "foo"})
289
session.WaitWithDefaultTimeout()
290
Expect(session).Should(Exit(0))
292
// The generated systemd unit should contain the User-defined Want, After, Requires options
293
Expect(session.OutputToString()).To(ContainSubstring("# User-defined dependencies"))
294
Expect(session.OutputToString()).To(ContainSubstring("Wants=foobar.service barfoo.service"))
295
Expect(session.OutputToString()).To(ContainSubstring("After=foobar.service barfoo.service"))
296
Expect(session.OutputToString()).To(ContainSubstring("Requires=foobar.service barfoo.service"))
299
It("podman generate systemd --new --name foo", func() {
300
n := podmanTest.Podman([]string{"create", "--name", "foo", "alpine", "top"})
301
n.WaitWithDefaultTimeout()
302
Expect(n).Should(Exit(0))
304
session := podmanTest.Podman([]string{"generate", "systemd", "-t", "42", "--name", "--new", "foo"})
305
session.WaitWithDefaultTimeout()
306
Expect(session).Should(Exit(0))
308
// Grepping the output (in addition to unit tests)
309
Expect(session.OutputToString()).To(ContainSubstring("# container-foo.service"))
310
Expect(session.OutputToString()).To(ContainSubstring(" --replace "))
312
// The podman commands in the unit should contain the root flags if generate systemd --new is used
313
Expect(session.OutputToString()).To(ContainSubstring(" --runroot"))
317
It("podman generate systemd --new --name=foo", func() {
318
n := podmanTest.Podman([]string{"create", "--name=foo", "alpine", "top"})
319
n.WaitWithDefaultTimeout()
320
Expect(n).Should(Exit(0))
322
session := podmanTest.Podman([]string{"generate", "systemd", "-t", "42", "--name", "--new", "foo"})
323
session.WaitWithDefaultTimeout()
324
Expect(session).Should(Exit(0))
326
// Grepping the output (in addition to unit tests)
327
Expect(session.OutputToString()).To(ContainSubstring("# container-foo.service"))
328
Expect(session.OutputToString()).To(ContainSubstring(" --replace "))
331
It("podman generate systemd --new without explicit detaching param", func() {
332
n := podmanTest.Podman([]string{"create", "--name", "foo", "alpine", "top"})
333
n.WaitWithDefaultTimeout()
334
Expect(n).Should(Exit(0))
336
session := podmanTest.Podman([]string{"generate", "systemd", "--time", "42", "--name", "--new", "foo"})
337
session.WaitWithDefaultTimeout()
338
Expect(session).Should(Exit(0))
340
// Grepping the output (in addition to unit tests)
341
Expect(session.OutputToString()).To(ContainSubstring(" -d "))
344
It("podman generate systemd --new with explicit detaching param in middle", func() {
345
n := podmanTest.Podman([]string{"create", "--name", "foo", "alpine", "top"})
346
n.WaitWithDefaultTimeout()
347
Expect(n).Should(Exit(0))
349
session := podmanTest.Podman([]string{"generate", "systemd", "--time", "42", "--name", "--new", "foo"})
350
session.WaitWithDefaultTimeout()
351
Expect(session).Should(Exit(0))
353
// Grepping the output (in addition to unit tests)
354
Expect(session.OutputToString()).To(ContainSubstring("--name foo alpine top"))
357
It("podman generate systemd --new pod", func() {
358
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
359
n.WaitWithDefaultTimeout()
360
Expect(n).Should(Exit(0))
362
session := podmanTest.Podman([]string{"generate", "systemd", "--time", "42", "--name", "--new", "foo"})
363
session.WaitWithDefaultTimeout()
364
Expect(session).Should(Exit(0))
365
Expect(session.OutputToString()).To(ContainSubstring(" pod create "))
368
It("podman generate systemd --restart-sec 15 --name foo", func() {
369
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
370
n.WaitWithDefaultTimeout()
371
Expect(n).Should(Exit(0))
373
session := podmanTest.Podman([]string{"generate", "systemd", "--restart-sec", "15", "--name", "foo"})
374
session.WaitWithDefaultTimeout()
375
Expect(session).Should(Exit(0))
377
// Grepping the output (in addition to unit tests)
378
Expect(session.OutputToString()).To(ContainSubstring("RestartSec=15"))
380
n = podmanTest.Podman([]string{"create", "--name", "foocontainer", "alpine", "top"})
381
n.WaitWithDefaultTimeout()
382
Expect(n).Should(Exit(0))
384
session2 := podmanTest.Podman([]string{"generate", "systemd", "--restart-sec", "15", "--name", "foocontainer"})
385
session2.WaitWithDefaultTimeout()
386
Expect(session2).Should(Exit(0))
387
Expect(session2.OutputToString()).To(ContainSubstring("RestartSec=15"))
390
It("podman generate systemd --new=false pod", func() {
391
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
392
n.WaitWithDefaultTimeout()
393
Expect(n).Should(Exit(0))
395
session := podmanTest.Podman([]string{"generate", "systemd", "--time", "42", "--name", "--new=false", "foo"})
396
session.WaitWithDefaultTimeout()
397
Expect(session).Should(Exit(0))
398
Expect(session.OutputToString()).NotTo(ContainSubstring(" pod create "))
401
It("podman generate systemd --new=true pod", func() {
402
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
403
n.WaitWithDefaultTimeout()
404
Expect(n).Should(Exit(0))
406
session := podmanTest.Podman([]string{"generate", "systemd", "--time", "42", "--name", "--new=true", "foo"})
407
session.WaitWithDefaultTimeout()
408
Expect(session).Should(Exit(0))
409
Expect(session.OutputToString()).To(ContainSubstring(" pod create "))
412
It("podman generate systemd --container-prefix con", func() {
413
n := podmanTest.Podman([]string{"create", "--name", "foo", "alpine", "top"})
414
n.WaitWithDefaultTimeout()
415
Expect(n).Should(Exit(0))
417
session := podmanTest.Podman([]string{"generate", "systemd", "--name", "--container-prefix", "con", "foo"})
418
session.WaitWithDefaultTimeout()
419
Expect(session).Should(Exit(0))
421
// Grepping the output (in addition to unit tests)
422
Expect(session.OutputToString()).To(ContainSubstring("# con-foo.service"))
426
It("podman generate systemd --container-prefix ''", func() {
427
n := podmanTest.Podman([]string{"create", "--name", "foo", "alpine", "top"})
428
n.WaitWithDefaultTimeout()
429
Expect(n).Should(Exit(0))
431
session := podmanTest.Podman([]string{"generate", "systemd", "--name", "--container-prefix", "", "foo"})
432
session.WaitWithDefaultTimeout()
433
Expect(session).Should(Exit(0))
435
// Grepping the output (in addition to unit tests)
436
Expect(session.OutputToString()).To(ContainSubstring("# foo.service"))
440
It("podman generate systemd --separator _", func() {
441
n := podmanTest.Podman([]string{"create", "--name", "foo", "alpine", "top"})
442
n.WaitWithDefaultTimeout()
443
Expect(n).Should(Exit(0))
445
session := podmanTest.Podman([]string{"generate", "systemd", "--name", "--separator", "_", "foo"})
446
session.WaitWithDefaultTimeout()
447
Expect(session).Should(Exit(0))
449
// Grepping the output (in addition to unit tests)
450
Expect(session.OutputToString()).To(ContainSubstring("# container_foo.service"))
453
It("podman generate systemd pod --pod-prefix p", func() {
454
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
455
n.WaitWithDefaultTimeout()
456
Expect(n).Should(Exit(0))
458
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-1", "alpine", "top"})
459
n.WaitWithDefaultTimeout()
460
Expect(n).Should(Exit(0))
462
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-2", "alpine", "top"})
463
n.WaitWithDefaultTimeout()
464
Expect(n).Should(Exit(0))
466
session := podmanTest.Podman([]string{"generate", "systemd", "--pod-prefix", "p", "--name", "foo"})
467
session.WaitWithDefaultTimeout()
468
Expect(session).Should(Exit(0))
470
// Grepping the output (in addition to unit tests)
471
Expect(session.OutputToString()).To(ContainSubstring("# p-foo.service"))
472
Expect(session.OutputToString()).To(ContainSubstring("Wants=container-foo-1.service container-foo-2.service"))
473
Expect(session.OutputToString()).To(ContainSubstring("# container-foo-1.service"))
474
Expect(session.OutputToString()).To(ContainSubstring("BindsTo=p-foo.service"))
477
It("podman generate systemd pod --pod-prefix p --container-prefix con --separator _ change all prefixes/separator", func() {
478
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
479
n.WaitWithDefaultTimeout()
480
Expect(n).Should(Exit(0))
482
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-1", "alpine", "top"})
483
n.WaitWithDefaultTimeout()
484
Expect(n).Should(Exit(0))
486
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-2", "alpine", "top"})
487
n.WaitWithDefaultTimeout()
488
Expect(n).Should(Exit(0))
490
session := podmanTest.Podman([]string{"generate", "systemd", "--container-prefix", "con", "--pod-prefix", "p", "--separator", "_", "--name", "foo"})
491
session.WaitWithDefaultTimeout()
492
Expect(session).Should(Exit(0))
494
// Grepping the output (in addition to unit tests)
495
Expect(session.OutputToString()).To(ContainSubstring("# p_foo.service"))
496
Expect(session.OutputToString()).To(ContainSubstring("Wants=con_foo-1.service con_foo-2.service"))
497
Expect(session.OutputToString()).To(ContainSubstring("# con_foo-1.service"))
498
Expect(session.OutputToString()).To(ContainSubstring("# con_foo-2.service"))
499
Expect(session.OutputToString()).To(ContainSubstring("BindsTo=p_foo.service"))
502
It("podman generate systemd pod --pod-prefix '' --container-prefix '' --separator _ change all prefixes/separator", func() {
503
n := podmanTest.Podman([]string{"pod", "create", "--name", "foo"})
504
n.WaitWithDefaultTimeout()
505
Expect(n).Should(Exit(0))
507
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-1", "alpine", "top"})
508
n.WaitWithDefaultTimeout()
509
Expect(n).Should(Exit(0))
511
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-2", "alpine", "top"})
512
n.WaitWithDefaultTimeout()
513
Expect(n).Should(Exit(0))
515
// test systemd generate with empty pod prefix
516
session1 := podmanTest.Podman([]string{"generate", "systemd", "--pod-prefix", "", "--name", "foo"})
517
session1.WaitWithDefaultTimeout()
518
Expect(session1).Should(Exit(0))
520
// Grepping the output (in addition to unit tests)
521
Expect(session1.OutputToString()).To(ContainSubstring("# foo.service"))
522
Expect(session1.OutputToString()).To(ContainSubstring("Wants=container-foo-1.service container-foo-2.service"))
523
Expect(session1.OutputToString()).To(ContainSubstring("# container-foo-1.service"))
524
Expect(session1.OutputToString()).To(ContainSubstring("BindsTo=foo.service"))
526
// test systemd generate with empty container and pod prefix
527
session2 := podmanTest.Podman([]string{"generate", "systemd", "--container-prefix", "", "--pod-prefix", "", "--separator", "_", "--name", "foo"})
528
session2.WaitWithDefaultTimeout()
529
Expect(session2).Should(Exit(0))
531
// Grepping the output (in addition to unit tests)
532
Expect(session2.OutputToString()).To(ContainSubstring("# foo.service"))
533
Expect(session2.OutputToString()).To(ContainSubstring("Wants=foo-1.service foo-2.service"))
534
Expect(session2.OutputToString()).To(ContainSubstring("# foo-1.service"))
535
Expect(session2.OutputToString()).To(ContainSubstring("# foo-2.service"))
536
Expect(session2.OutputToString()).To(ContainSubstring("BindsTo=foo.service"))
540
It("podman generate systemd pod with containers --new", func() {
541
tmpFile := filepath.Join(tempdir, "podID")
543
n := podmanTest.Podman([]string{"pod", "create", "--pod-id-file", tmpFile, "--name", "foo"})
544
n.WaitWithDefaultTimeout()
545
Expect(n).Should(Exit(0))
547
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-1", "alpine", "top"})
548
n.WaitWithDefaultTimeout()
549
Expect(n).Should(Exit(0))
551
n = podmanTest.Podman([]string{"create", "--pod", "foo", "--name", "foo-2", "alpine", "top"})
552
n.WaitWithDefaultTimeout()
553
Expect(n).Should(Exit(0))
555
session := podmanTest.Podman([]string{"generate", "systemd", "--new", "--name", "foo"})
556
session.WaitWithDefaultTimeout()
557
Expect(session).Should(Exit(0))
559
// Grepping the output (in addition to unit tests)
560
Expect(session.OutputToString()).To(ContainSubstring("# pod-foo.service"))
561
Expect(session.OutputToString()).To(ContainSubstring("Wants=container-foo-1.service container-foo-2.service"))
562
Expect(session.OutputToString()).To(ContainSubstring("BindsTo=pod-foo.service"))
563
Expect(session.OutputToString()).To(ContainSubstring("pod create"))
564
Expect(session.OutputToString()).To(ContainSubstring("--infra-conmon-pidfile %t/pod-foo.pid"))
565
Expect(session.OutputToString()).To(ContainSubstring("--pod-id-file %t/pod-foo.pod-id"))
566
Expect(session.OutputToString()).To(ContainSubstring("--exit-policy=stop"))
567
Expect(session.OutputToString()).To(ContainSubstring("--name foo"))
568
Expect(session.OutputToString()).To(ContainSubstring("pod stop"))
569
Expect(session.OutputToString()).To(ContainSubstring("--ignore"))
570
Expect(session.OutputToString()).To(ContainSubstring("--pod-id-file %t/pod-foo.pod-id"))
571
Expect(session.OutputToString()).To(ContainSubstring("-t 10"))
572
Expect(session.OutputToString()).To(ContainSubstring("pod rm"))
573
Expect(session.OutputToString()).To(ContainSubstring("--ignore"))
574
Expect(session.OutputToString()).To(ContainSubstring("-f"))
575
Expect(session.OutputToString()).To(ContainSubstring("--pod-id-file %t/pod-foo.pod-id"))
578
It("podman generate systemd --format json", func() {
579
n := podmanTest.Podman([]string{"create", "--name", "foo", ALPINE})
580
n.WaitWithDefaultTimeout()
581
Expect(n).Should(Exit(0))
583
session := podmanTest.Podman([]string{"generate", "systemd", "--format", "json", "foo"})
584
session.WaitWithDefaultTimeout()
585
Expect(session).Should(Exit(0))
586
Expect(session.OutputToString()).To(BeValidJSON())
589
It("podman generate systemd --new create command with double curly braces", func() {
590
SkipIfInContainer("journald inside a container doesn't work")
591
// Regression test for #9034
592
session := podmanTest.Podman([]string{"create", "--name", "foo", "--log-driver=journald", "--log-opt=tag={{.Name}}", ALPINE})
593
session.WaitWithDefaultTimeout()
594
Expect(session).Should(Exit(0))
596
session = podmanTest.Podman([]string{"generate", "systemd", "--new", "foo"})
597
session.WaitWithDefaultTimeout()
598
Expect(session).Should(Exit(0))
599
Expect(session.OutputToString()).To(ContainSubstring(" --log-opt=tag={{.Name}} "))
601
session = podmanTest.Podman([]string{"pod", "create", "--name", "pod", "--label", "key={{someval}}"})
602
session.WaitWithDefaultTimeout()
603
Expect(session).Should(Exit(0))
605
session = podmanTest.Podman([]string{"generate", "systemd", "--new", "pod"})
606
session.WaitWithDefaultTimeout()
607
Expect(session).Should(Exit(0))
608
Expect(session.OutputToString()).To(ContainSubstring(" --label key={{someval}}"))
611
It("podman generate systemd --env", func() {
612
session := podmanTest.RunTopContainer("test")
613
session.WaitWithDefaultTimeout()
614
Expect(session).Should(Exit(0))
616
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "foo=bar", "-e", "hoge=fuga", "test"})
617
session.WaitWithDefaultTimeout()
618
Expect(session).Should(Exit(0))
619
Expect(session.OutputToString()).To(ContainSubstring("Environment=foo=bar"))
620
Expect(session.OutputToString()).To(ContainSubstring("Environment=hoge=fuga"))
622
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "=bar", "-e", "hoge=fuga", "test"})
623
session.WaitWithDefaultTimeout()
624
Expect(session).Should(ExitWithError(125, "invalid variable"))
626
// Use -e/--env option with --new option
627
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "foo=bar", "-e", "hoge=fuga", "--new", "test"})
628
session.WaitWithDefaultTimeout()
629
Expect(session).Should(Exit(0))
630
Expect(session.OutputToString()).To(ContainSubstring("Environment=foo=bar"))
631
Expect(session.OutputToString()).To(ContainSubstring("Environment=hoge=fuga"))
633
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "foo=bar", "-e", "=fuga", "--new", "test"})
634
session.WaitWithDefaultTimeout()
635
Expect(session).Should(ExitWithError(125, "invalid variable"))
637
// Escape systemd arguments
638
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "BAR=my test", "-e", "USER=%a", "test"})
639
session.WaitWithDefaultTimeout()
640
Expect(session).Should(Exit(0))
641
Expect(session.OutputToString()).To(ContainSubstring("\"BAR=my test\""))
642
Expect(session.OutputToString()).To(ContainSubstring("USER=%%a"))
644
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "BAR=my test", "-e", "USER=%a", "--new", "test"})
645
session.WaitWithDefaultTimeout()
646
Expect(session).Should(Exit(0))
647
Expect(session.OutputToString()).To(ContainSubstring("\"BAR=my test\""))
648
Expect(session.OutputToString()).To(ContainSubstring("USER=%%a"))
650
// Specify the environment variables without a value
651
os.Setenv("FOO1", "BAR1")
652
os.Setenv("FOO2", "BAR2")
653
os.Setenv("FOO3", "BAR3")
654
defer os.Unsetenv("FOO1")
655
defer os.Unsetenv("FOO2")
656
defer os.Unsetenv("FOO3")
658
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "FOO1", "test"})
659
session.WaitWithDefaultTimeout()
660
Expect(session).Should(Exit(0))
661
Expect(session.OutputToString()).To(ContainSubstring("BAR1"))
662
Expect(session.OutputToString()).NotTo(ContainSubstring("BAR2"))
663
Expect(session.OutputToString()).NotTo(ContainSubstring("BAR3"))
665
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "FOO*", "test"})
666
session.WaitWithDefaultTimeout()
667
Expect(session).Should(Exit(0))
668
Expect(session.OutputToString()).To(ContainSubstring("BAR1"))
669
Expect(session.OutputToString()).To(ContainSubstring("BAR2"))
670
Expect(session.OutputToString()).To(ContainSubstring("BAR3"))
672
session = podmanTest.Podman([]string{"generate", "systemd", "--env", "FOO*", "--new", "test"})
673
session.WaitWithDefaultTimeout()
674
Expect(session).Should(Exit(0))
675
Expect(session.OutputToString()).To(ContainSubstring("BAR1"))
676
Expect(session.OutputToString()).To(ContainSubstring("BAR2"))
677
Expect(session.OutputToString()).To(ContainSubstring("BAR3"))