containers.podman.podman_generate_systemd module – Generate systemd unit from a pod or a container¶
Note
This module is part of the containers.podman collection (version 1.16.2).
It is not included in ansible-core
.
To check whether it is installed, run ansible-galaxy collection list
.
To install it, use: ansible-galaxy collection install containers.podman
.
You need further requirements to be able to use this module,
see Requirements for details.
To use it in a playbook, specify: containers.podman.podman_generate_systemd
.
Synopsis¶
Generate systemd .service unit file(s) from a pod or a container
Support Ansible check mode
Requirements¶
The below requirements are needed on the host that executes this module.
Podman installed on target host
Parameters¶
Parameter |
Comments |
---|---|
Add the systemd unit after ( This option may be specified more than once. User-defined dependencies will be appended to the generated unit file But any existing options such as needed or defined by default (e.g. Only with Podman 4.0.0 and above |
|
Set the systemd unit name prefix for containers. If not set, use the default defined by podman, Refer to podman-generate-systemd(1) man page for more information. |
|
Destination of the generated systemd unit file(s). Use Use |
|
Set environment variables to the systemd unit files. Keys are the environment variable names, and values are the environment variable values Only with Podman 4.3.0 and above |
|
Default: |
|
Replace the systemd unit file(s) even if it already exists. This works with dest option. Choices:
|
|
Name of the pod or container to export |
|
Generate unit files that create containers and pods, not only start them. Refer to podman-generate-systemd(1) man page for more information. Choices:
|
|
Do not generate the header including meta data such as the Podman version and the timestamp. Choices:
|
|
Set the systemd unit name prefix for pods. If not set, use the default defined by podman, Refer to podman-generate-systemd(1) man page for more information. |
|
Set the systemd unit requires (Requires=) option. Similar to wants, but declares a stronger requirement dependency. Only with Podman 4.0.0 and above |
|
Restart policy of the service Choices:
|
|
Configures the time to sleep before restarting a service (as configured with restart-policy). Takes a value in seconds. Only with Podman 4.0.0 and above |
|
Systemd unit name separator between the name/id of a container/pod and the prefix. If not set, use the default defined by podman, Refer to podman-generate-systemd(1) man page for more information. |
|
Override the default start timeout for the container with the given value in seconds. Only with Podman 4.0.0 and above |
|
Override the default stop timeout for the container with the given value in seconds. |
|
Use name of the containers for the start, stop, and description in the unit file. Choices:
|
|
Add the systemd unit wants ( This option may be specified more than once. This option does not influence the order in which services are started or stopped. User-defined dependencies will be appended to the generated unit file But any existing options such as needed or defined by default (e.g. Only with Podman 4.0.0 and above |
Notes¶
Note
If you indicate a pod, the systemd units for it and all its containers will be generated
Create all your pods, containers and their dependencies before generating the systemd files
If a container or pod is already started before you do a
systemctl daemon-reload
, systemd will not see the container or pod as startedStop your container or pod before you do a
systemctl daemon-reload
, then you can start them withsystemctl start my_container.service
Examples¶
# Example of creating a container and systemd unit file.
# When using podman_generate_systemd with new:true then
# the container needs rm:true for idempotence.
- name: Create postgres container
containers.podman.podman_container:
name: postgres
image: docker.io/library/postgres:latest
rm: true
state: created
- name: Generate systemd unit file for postgres container
containers.podman.podman_generate_systemd:
name: postgres
new: true
no_header: true
dest: /etc/systemd/system
- name: Ensure postgres container is started and enabled
ansible.builtin.systemd:
name: container-postgres
daemon_reload: true
state: started
enabled: true
# Example of creating a container and integrate it into systemd
- name: A postgres container must exist, stopped
containers.podman.podman_container:
name: postgres_local
image: docker.io/library/postgres:latest
state: stopped
- name: Systemd unit files for postgres container must exist
containers.podman.podman_generate_systemd:
name: postgres_local
dest: ~/.config/systemd/user/
- name: Postgres container must be started and enabled on systemd
ansible.builtin.systemd:
name: container-postgres_local
scope: user
daemon_reload: true
state: started
enabled: true
# Generate the unit files, but store them on an Ansible variable
# instead of writing them on target host
- name: Systemd unit files for postgres container must be generated
containers.podman.podman_generate_systemd:
name: postgres_local
register: postgres_local_systemd_unit
# Generate the unit files with environment variables sets
- name: Systemd unit files for postgres container must be generated
containers.podman.podman_generate_systemd:
name: postgres_local
env:
POSTGRES_USER: my_app
POSTGRES_PASSWORD: example
register: postgres_local_systemd_unit
Return Values¶
Common return values are documented here, the following are the fields unique to this module:
Key |
Description |
---|---|
A copy of the podman command used to generate the systemd unit(s) Returned: always Sample: |
|
A copy of the generated systemd .service unit(s) Returned: always Sample: |