containers.podman.podman_generate_systemd 模块 – 从 Pod 或容器生成 systemd 单元

注意

此模块是 containers.podman 集合(版本 1.16.2)的一部分。

如果您正在使用 ansible 包,您可能已经安装了此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install containers.podman。您需要更多要求才能使用此模块,请参阅要求 了解详细信息。

要在 playbook 中使用它,请指定:containers.podman.podman_generate_systemd

概要

  • 从 Pod 或容器生成 systemd .service 单元文件

  • 支持 Ansible 检查模式

要求

在执行此模块的主机上需要以下要求。

  • 目标主机上安装了 Podman

参数

参数

注释

after

列表 / 元素=字符串

在列表的依赖项和此服务之间添加 systemd 单元 after ( After= ) 选项,用于排序依赖项。

此选项可以指定多次。

用户定义的依赖项将附加到生成的单元文件中

但是,任何现有选项(例如默认需要或定义的选项)(例如 online.target)都不会被删除或覆盖。

仅适用于 Podman 4.0.0 及更高版本

container_prefix

字符串

设置容器的 systemd 单元名称前缀。

如果未设置,则使用 Podman 定义的默认值 container

有关更多信息,请参阅 podman-generate-systemd(1) 手册页。

dest

路径

生成的 systemd 单元文件的目标位置。

对于系统范围的 systemd 实例,请使用 /etc/systemd/system

对于每个用户的 systemd 实例,请使用 /etc/systemd/user~/.config/systemd/user

env

字典

将环境变量设置为 systemd 单元文件。

键是环境变量名称,值是环境变量值

仅适用于 Podman 4.3.0 及更高版本

executable

字符串

Podman 可执行文件名或完整路径

默认值: "podman"

force

布尔值

即使 systemd 单元文件已存在,也替换它。

这适用于 dest 选项。

选项

  • false ←(默认)

  • true

name

字符串 / 必需

要导出的 Pod 或容器的名称

new

布尔值

生成创建容器和 Pod 的单元文件,而不仅仅是启动它们。

有关更多信息,请参阅 podman-generate-systemd(1) 手册页。

选项

  • false ←(默认)

  • true

no_header

布尔值

不生成包含元数据(例如 Podman 版本和时间戳)的标头。

选项

  • false ←(默认)

  • true

pod_prefix

字符串

设置 Pod 的 systemd 单元名称前缀。

如果未设置,则使用 Podman 定义的默认值 pod

有关更多信息,请参阅 podman-generate-systemd(1) 手册页。

requires

列表 / 元素=字符串

设置 systemd 单元 requires (Requires=) 选项。

类似于 wants,但声明了更强的要求依赖性。

仅适用于 Podman 4.0.0 及更高版本

restart_policy

字符串

服务的重启策略

选项

  • "no-restart"

  • "on-success"

  • "on-failure"

  • "on-abnormal"

  • "on-watchdog"

  • "on-abort"

  • "always"

restart_sec

整数

配置在重新启动服务之前(使用 restart-policy 配置)休眠的时间。

以秒为单位取值。

仅适用于 Podman 4.0.0 及更高版本

separator

字符串

容器/Pod 的名称/ID 和前缀之间的 Systemd 单元名称分隔符。

如果未设置,则使用 Podman 定义的默认值 -

有关更多信息,请参阅 podman-generate-systemd(1) 手册页。

start_timeout

整数

以给定的秒数为单位覆盖容器的默认启动超时。

仅适用于 Podman 4.0.0 及更高版本

stop_timeout

整数

以给定的秒数为单位覆盖容器的默认停止超时。

use_names

布尔值

在单元文件中使用容器的名称进行启动、停止和描述。

选项

  • false

  • true ←(默认)

wants

列表 / 元素=字符串

添加 systemd 单元 wants (Wants=) 选项,此服务(弱)依赖于该选项。

此选项可以指定多次。

此选项不影响启动或停止服务的顺序。

用户定义的依赖项将附加到生成的单元文件中

但是,任何现有选项(例如默认需要或定义的选项)(例如 online.target)都不会被删除或覆盖。

仅适用于 Podman 4.0.0 及更高版本

注意

注意

  • 如果您指示一个 Pod,将为其及其所有容器生成 systemd 单元

  • 在生成 systemd 文件之前,创建所有 Pod、容器及其依赖项

  • 如果容器或 Pod 在您执行 systemctl daemon-reload 之前已经启动,则 systemd 不会将容器或 Pod 视为已启动

  • 在执行 systemctl daemon-reload 之前,请停止您的容器或 pod,然后您可以使用 systemctl start my_container.service 启动它们。

示例

# 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

返回值

常见的返回值记录在这里,以下是此模块特有的字段

描述

podman_command

字符串

用于生成 systemd 单元的 podman 命令的副本

返回: 总是

示例: "podman generate systemd my_webapp"

systemd_units

字典

生成的 systemd .service 单元的副本

返回: 总是

示例: {"container-postgres_local": " #postgres_local 容器的 systemd .servec 单元的内容", "pod-my_webapp": " #my_webapp pod systemd .servec 单元的内容"}

作者

  • Sébastien Gendre (@CyberFox001)