Skip to content

Commit ff12ccd

Browse files
authored
Add restart-sec and other options to systemd generation. (#615)
Add restart_sec, start_timeout_sec and stop_timeout_sec Signed-off-by: Sagi Shnaidman <[email protected]>
1 parent b91ddd3 commit ff12ccd

File tree

7 files changed

+144
-21
lines changed

7 files changed

+144
-21
lines changed

plugins/module_utils/podman/common.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ def run_generate_systemd_command(module, module_params, name, version):
5050
command.extend([
5151
'--restart-policy',
5252
sysconf['restart_policy']])
53+
if sysconf.get('restart_sec') is not None:
54+
command.extend(['--restart-sec=%s' % sysconf['restart_sec']])
55+
if sysconf.get('stop_timeout') is not None:
56+
command.extend(['--stop-timeout=%s' % sysconf['stop_timeout']])
57+
if sysconf.get('start_timeout') is not None:
58+
command.extend(['--start-timeout=%s' % sysconf['start_timeout']])
5359
if sysconf.get('time'):
5460
command.extend(['--time', str(sysconf['time'])])
5561
if sysconf.get('no_header'):

plugins/module_utils/podman/podman_pod_lib.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -759,11 +759,19 @@ def update_pod_result(self, changed=True):
759759
self.results.update({'diff': self.pod.diff})
760760
if self.module.params['debug'] or self.module_params['debug']:
761761
self.results.update({'podman_version': self.pod.version})
762+
sysd = generate_systemd(self.module,
763+
self.module_params,
764+
self.name,
765+
self.pod.version)
766+
self.results['changed'] = changed or sysd['changed']
762767
self.results.update(
763-
{'podman_systemd': generate_systemd(self.module,
764-
self.module_params,
765-
self.name,
766-
self.pod.version)})
768+
{'podman_systemd': sysd['systemd']})
769+
if sysd['diff']:
770+
if 'diff' not in self.results:
771+
self.results.update({'diff': sysd['diff']})
772+
else:
773+
self.results['diff']['before'] += sysd['diff']['before']
774+
self.results['diff']['after'] += sysd['diff']['after']
767775

768776
def execute(self):
769777
"""Execute the desired action according to map of actions & states."""

plugins/modules/podman_container.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,18 @@
323323
- 'on-watchdog'
324324
- 'on-abort'
325325
- 'always'
326+
restart_sec:
327+
description: Set the systemd service restartsec value.
328+
type: int
329+
required: false
330+
start_timeout:
331+
description: Override the default start timeout for the container with the given value.
332+
type: int
333+
required: false
334+
stop_timeout:
335+
description: Override the default stop timeout for the container with the given value.
336+
type: int
337+
required: false
326338
time:
327339
description:
328340
- Override the default stop timeout for the container with the given value.

plugins/modules/podman_pod.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,18 @@
123123
- 'on-watchdog'
124124
- 'on-abort'
125125
- 'always'
126+
restart_sec:
127+
description: Set the systemd service restartsec value.
128+
type: int
129+
required: false
130+
start_timeout:
131+
description: Override the default start timeout for the container with the given value.
132+
type: int
133+
required: false
134+
stop_timeout:
135+
description: Override the default stop timeout for the container with the given value.
136+
type: int
137+
required: false
126138
time:
127139
description:
128140
- Override the default stop timeout for the container with the given value.

tests/integration/targets/podman_container/tasks/main.yml

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
- name: Test podman_container
22
block:
3+
4+
- name: Discover podman version
5+
shell: podman version | grep "^Version:" | awk {'print $2'}
6+
register: podman_v
7+
8+
- name: Set podman version to 3
9+
set_fact:
10+
podman_version: 3
11+
when: podman_v.stdout is version('4.0.0', 'lt')
12+
13+
- name: Set podman version to 4
14+
set_fact:
15+
podman_version: 4
16+
when: podman_v.stdout is version('4.0.0', '>=')
17+
318
- name: Delete all container leftovers from tests
419
containers.podman.podman_container:
520
executable: "{{ test_executable | default('podman') }}"
@@ -580,7 +595,7 @@
580595
- idem4.podman_systemd.keys() | list | length > 0
581596
- idem4.podman_systemd.values() | list | length > 0
582597

583-
- name: Run container with systemd generation parameters
598+
- name: Run container with systemd generation parameters v4
584599
containers.podman.podman_container:
585600
executable: "{{ test_executable | default('podman') }}"
586601
name: container1
@@ -590,30 +605,65 @@
590605
generate_systemd:
591606
path: /tmp/
592607
restart_policy: always
608+
no_header: true
609+
names: true
610+
pod_prefix: whocares
611+
separator: zzzz
612+
container_prefix: contain
613+
restart_sec: 10
614+
start_timeout: 20
615+
stop_timeout: 15
616+
register: system14
617+
when: podman_version == 4
618+
619+
- name: Run container with systemd generation parameters v3
620+
containers.podman.podman_container:
621+
executable: "{{ test_executable | default('podman') }}"
622+
name: container1
623+
image: alpine
624+
state: started
625+
command: sleep 20m
626+
generate_systemd:
627+
path: /tmp/
593628
time: 120
629+
restart_policy: always
594630
no_header: true
595631
names: true
596632
pod_prefix: whocares
597633
separator: zzzz
598634
container_prefix: contain
599-
register: system1
635+
register: system13
636+
when: podman_version == 3
600637

601638
- name: Check service file presents
602639
stat:
603640
path: /tmp/containzzzzcontainer1.service
604641
register: service_file
605642

606-
- name: Check that container has correct systemd output
643+
- name: Check that container has correct systemd output v4
644+
assert:
645+
that:
646+
- system14.podman_systemd.keys() | list | first == 'containzzzzcontainer1'
647+
- system14.podman_systemd.values() | list | length > 0
648+
- service_file.stat.exists | bool
649+
- "'Restart=always' in system14.podman_systemd.values() | list | first"
650+
- "'autogenerated by Podman' not in system14.podman_systemd.values() | list | first"
651+
- "'RestartSec=10' in system14.podman_systemd.values() | list | first"
652+
- "'TimeoutStartSec=20' in system14.podman_systemd.values() | list | first"
653+
when: podman_version == 4
654+
655+
- name: Check that container has correct systemd output v3
607656
assert:
608657
that:
609-
- system1.podman_systemd.keys() | list | first == 'containzzzzcontainer1'
610-
- system1.podman_systemd.values() | list | length > 0
658+
- system13.podman_systemd.keys() | list | first == 'containzzzzcontainer1'
659+
- system13.podman_systemd.values() | list | length > 0
611660
- service_file.stat.exists | bool
612-
- "'-t 120 container1' in system1.podman_systemd.values() | list | first"
613-
- "'Restart=always' in system1.podman_systemd.values() | list | first"
614-
- "'autogenerated by Podman' not in system1.podman_systemd.values() | list | first"
661+
- "'Restart=always' in system13.podman_systemd.values() | list | first"
662+
- "'autogenerated by Podman' not in system13.podman_systemd.values() | list | first"
663+
- "'-t 120 ' in system13.podman_systemd.values() | list | first"
664+
when: podman_version == 3
615665

616-
- name: Delete container with systemd generation parameters
666+
- name: Delete container with systemd generation parameters v3
617667
containers.podman.podman_container:
618668
executable: "{{ test_executable | default('podman') }}"
619669
name: container1
@@ -622,14 +672,36 @@
622672
command: sleep 20m
623673
generate_systemd:
624674
path: /tmp/
625-
restart_policy: always
626675
time: 120
676+
restart_policy: always
677+
no_header: true
678+
names: true
679+
pod_prefix: whocares
680+
separator: zzzz
681+
container_prefix: contain
682+
register: system1
683+
when: podman_version == 3
684+
685+
- name: Delete container with systemd generation parameters v4
686+
containers.podman.podman_container:
687+
executable: "{{ test_executable | default('podman') }}"
688+
name: container1
689+
image: alpine
690+
state: absent
691+
command: sleep 20m
692+
generate_systemd:
693+
path: /tmp/
694+
restart_policy: always
627695
no_header: true
628696
names: true
629697
pod_prefix: whocares
630698
separator: zzzz
631699
container_prefix: contain
700+
restart_sec: 10
701+
start_timeout: 20
702+
stop_timeout: 15
632703
register: system1
704+
when: podman_version == 4
633705

634706
- name: Check service file doesn't present
635707
stat:

tests/integration/targets/podman_container_idempotency/tasks/idem_systemd.yml

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313
generate_systemd:
1414
path: /tmp/
1515
restart_policy: always
16-
time: 120
1716
no_header: true
1817
names: true
1918
pod_prefix: whocares
2019
separator: zzzz
2120
container_prefix: contain
21+
restart_sec: 10
22+
start_timeout: 20
23+
stop_timeout: 15
2224
register: system0
2325

2426
- name: Check if the result is changed
@@ -35,12 +37,14 @@
3537
generate_systemd:
3638
path: /tmp/
3739
restart_policy: always
38-
time: 120
3940
no_header: true
4041
names: true
4142
pod_prefix: whocares
4243
separator: zzzz
4344
container_prefix: contain
45+
restart_sec: 10
46+
start_timeout: 20
47+
stop_timeout: 15
4448
register: system1
4549

4650
- name: Check if the result is not changed
@@ -62,12 +66,14 @@
6266
generate_systemd:
6367
path: /tmp/
6468
restart_policy: always
65-
time: 120
6669
no_header: true
6770
names: true
6871
pod_prefix: whocares
6972
separator: zzzz
7073
container_prefix: contain
74+
restart_sec: 10
75+
start_timeout: 20
76+
stop_timeout: 15
7177
register: system2
7278

7379
- name: Check if the result is changed
@@ -84,12 +90,14 @@
8490
generate_systemd:
8591
path: /tmp/
8692
restart_policy: always
87-
time: 120
8893
no_header: true
8994
names: true
9095
pod_prefix: whocares
9196
separator: zzzz
9297
container_prefix: contain
98+
restart_sec: 10
99+
start_timeout: 20
100+
stop_timeout: 15
93101
register: system3
94102

95103
- name: Check if the result is not changed
@@ -109,12 +117,14 @@
109117
generate_systemd:
110118
path: /tmp/
111119
restart_policy: always
112-
time: 120
113120
no_header: true
114121
names: true
115122
pod_prefix: whocares
116123
separator: zzzz
117124
container_prefix: contain
125+
restart_sec: 10
126+
start_timeout: 20
127+
stop_timeout: 15
118128
register: system4
119129

120130
- name: Check if the result is changed

tests/integration/targets/podman_pod/tasks/main.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -778,11 +778,13 @@
778778
generate_systemd:
779779
path: /tmp/dir1
780780
restart_policy: always
781-
time: 120
782781
no_header: true
783782
names: true
784783
pod_prefix: poditto
785784
container_prefix: ainer
785+
restart_sec: 10
786+
start_timeout: 20
787+
stop_timeout: 15
786788
register: system1
787789

788790
- name: Check systemd file exists
@@ -794,8 +796,9 @@
794796
assert:
795797
that:
796798
- system1.podman_systemd.keys() | list | length == 3
797-
- "'-t 120 ' in system1.podman_systemd['poditto-pod2']"
799+
- "'-t 15 ' in system1.podman_systemd['poditto-pod2']"
798800
- "'Restart=always' in system1.podman_systemd['poditto-pod2']"
801+
- "'RestartSec=10' in system1.podman_systemd['poditto-pod2']"
799802
- "'autogenerated by Podman' not in system1.podman_systemd['poditto-pod2']"
800803
- podsys_stat.stat.exists | bool
801804

0 commit comments

Comments
 (0)