community.docker.docker_containers 清单 – 用于 Docker 容器的 Ansible 动态清单插件
注意
此清单插件是 community.docker 集合(版本 4.1.0)的一部分。
如果您使用的是 ansible
包,您可能已经安装了这个集合。它不包含在 ansible-core
中。要检查是否已安装,请运行 ansible-galaxy collection list
。
要安装它,请使用:ansible-galaxy collection install community.docker
。您需要其他要求才能使用此清单插件,有关详细信息,请参阅 要求。
要在 playbook 中使用它,请指定:community.docker.docker_containers
。
community.docker 1.1.0 中的新增功能
概要
从 Docker API 读取清单。
使用以
docker.(yml|yaml)
结尾的 YAML 配置文件。
要求
本地控制器节点上需要以下要求才能执行此清单。
requests
pywin32(在 Windows 32 上使用命名管道时)
paramiko(当使用 SSH 时,且
use_ssh_client=false
)pyOpenSSL(当使用 TLS 时)
backports.ssl_match_hostname(当在 Python 2 上使用 TLS 时)
参数
参数 |
注释 |
---|---|
添加与
如果未将其设置为 选择
|
|
Docker 主机上运行的 Docker API 版本。 默认为此集合和 docker 守护进程支持的最新 API 版本。 如果在任务中未指定该值,则将使用环境变量 默认值: |
|
通过提供 CA 证书文件的路径,在执行服务器验证时使用 CA 证书。 如果任务中未指定值,且设置了环境变量 此选项最初名为 |
|
客户端 TLS 证书文件的路径。 如果任务中未指定值,且设置了环境变量 |
|
客户端 TLS 密钥文件的路径。 如果任务中未指定值,且设置了环境变量 |
|
从 Jinja2 表达式创建变量。 默认值: |
|
要使用容器的连接类型。 连接容器的一种方法是使用 SSH ( 或者, 当使用 请注意,community.docker.docker_api 不适用于 TCP TLS 套接字!有关更多信息,请参阅 https://github.com/ansible-collections/community.docker/issues/605。 选择
|
|
调试模式 选择
|
|
当容器的 SSH 端口映射到接口 “0.0.0.0” 时,要分配给 ansible_host 的 IP 地址。 仅当 默认值: |
|
用于连接 Docker API 的 URL 或 Unix 套接字路径。 要连接到远程主机,请提供 TCP 连接字符串。 例如, 如果任务中未指定值,则将改用环境变量 默认值: |
|
一个包含/排除过滤器的列表,允许为此清单选择/取消选择主机。 过滤器按顺序处理,直到找到第一个匹配的过滤器 |
|
一个 Jinja2 条件。 如果它匹配主机,则该主机被排除。 只能指定 |
|
一个 Jinja2 条件。 如果它匹配主机,则该主机被包含。 只能指定 |
|
根据 Jinja2 条件将主机添加到组。 默认值: |
|
根据变量的值将主机添加到组。 默认值: |
|
当主机变量的值为空字符串时的默认值。 此选项与 |
|
用于生成组的输入字典中的键。 |
|
键控组的父组。 |
|
键控组名称将以此前缀开头。 默认值: |
|
用于构建键控组名称的分隔符。 默认值: |
|
将此选项设置为 此选项与 选择
|
|
与 默认情况下,没有提供前缀或分隔符的键控组的名称将以下划线开头。 这是因为默认前缀为 如果未给出前缀,请将此选项设置为 如果组名派生自映射,则分隔符仍用于连接各个项。 要完全不在组名中使用分隔符,请将键控组的分隔符设置为空字符串。 选择
|
|
此插件的名称,应始终设置为 选择
|
|
如果设置为 由于可以在表达式中使用 facts,它们可能并非总是可用,因此默认情况下我们会忽略这些错误。 选择
|
|
通过使用 TLS 加密到 API 的连接,但不验证 Docker 主机服务器的真实性。请注意,如果 如果任务中未指定该值,则将使用环境变量 选择
|
|
验证 Docker 主机服务器的真实性时,请提供服务器的预期名称。 如果任务中未指定该值,则将使用环境变量 请注意,此选项在旧版本中的默认值为 |
|
将额外变量合并到可用于组合的变量中(优先级最高)。 选择
配置
|
|
对于 SSH 传输,请使用 选择
|
|
通过使用 TLS 并验证 Docker 主机服务器的真实性来保护与 API 的连接。 如果任务中未指定该值,则将使用环境变量 选择
|
|
切换以(不)包含所有可用的检查元数据。 请注意,所有顶级键都将转换为 如果此值为
选择
|
注释
注意
配置文件必须是 YAML 文件,其文件名以
docker.yml
或docker.yaml
结尾。不接受其他文件名。通过为每个任务提供参数或定义环境变量来连接到 Docker 守护程序。可以定义
DOCKER_HOST
、DOCKER_TLS_HOSTNAME
、DOCKER_API_VERSION
、DOCKER_CERT_PATH
、DOCKER_TLS
、DOCKER_TLS_VERIFY
和DOCKER_TIMEOUT
。如果正在使用 docker machine,请运行随产品附带的脚本,该脚本会设置环境。它将为您设置这些变量。有关更多详细信息,请参阅 https://docs.docker.net.cn/machine/reference/env/。此模块不使用 Docker SDK for Python 与 Docker 守护程序通信。它使用从此集合中包含的 Docker SDK 或 Python 派生的代码。
示例
# Minimal example using local Docker daemon
plugin: community.docker.docker_containers
docker_host: unix:///var/run/docker.sock
# Minimal example using remote Docker daemon
plugin: community.docker.docker_containers
docker_host: tcp://my-docker-host:2375
# Example using remote Docker daemon with unverified TLS
plugin: community.docker.docker_containers
docker_host: tcp://my-docker-host:2376
tls: true
# Example using remote Docker daemon with verified TLS and client certificate verification
plugin: community.docker.docker_containers
docker_host: tcp://my-docker-host:2376
validate_certs: true
ca_path: /somewhere/ca.pem
client_key: /somewhere/key.pem
client_cert: /somewhere/cert.pem
# Example using constructed features to create groups
plugin: community.docker.docker_containers
docker_host: tcp://my-docker-host:2375
strict: false
keyed_groups:
# Add containers with primary network foo to a network_foo group
- prefix: network
key: 'docker_hostconfig.NetworkMode'
# Add Linux hosts to an os_linux group
- prefix: os
key: docker_platform
# Example using SSH connection with an explicit fallback for when port 22 has not been
# exported: use container name as ansible_ssh_host and 22 as ansible_ssh_port
plugin: community.docker.docker_containers
connection_type: ssh
compose:
ansible_ssh_host: ansible_ssh_host | default(docker_name[1:], true)
ansible_ssh_port: ansible_ssh_port | default(22, true)
# Only consider containers which have a label 'foo', or whose name starts with 'a'
plugin: community.docker.docker_containers
filters:
# Accept all containers which have a label called 'foo'
- include: >-
"foo" in docker_config.Labels
# Next accept all containers whose inventory_hostname starts with 'a'
- include: >-
inventory_hostname.startswith("a")
# Exclude all containers that didn't match any of the above filters
- exclude: true