containers.podman.podman_image 模块 – 拉取 Podman 可用的镜像

注意

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

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

要安装它,请使用: ansible-galaxy collection install containers.podman

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

概要

  • 使用 Podman 构建、拉取或推送镜像。

参数

参数

注释

arch

字符串

容器镜像的 CPU 架构

auth_file

别名:authfile

路径

指向包含远程注册表授权凭据的文件的路径。

build

别名:build_args, buildargs

字典

控制镜像构建的参数。

默认值: {}

annotation

字典

要添加到镜像的键值对字典。仅适用于 OCI 镜像。对于 Docker 容器,将被忽略。

cache

布尔值

构建镜像时是否使用缓存层

选项

  • false

  • true ← (默认值)

container_file

字符串

要用于构建镜像的 Containerfile 内容。与 file 选项(指向现有 Containerfile 的路径)互斥。

extra_args

字符串

如果执行,则传递给构建的额外参数。不会幂等地检查新的构建参数。

file

路径

如果 Containerfile 不在构建上下文目录中,则指向 Containerfile 的路径。与 container_file 选项互斥。

force_rm

布尔值

即使构建失败,也始终在构建后删除中间容器。

选项

  • false ← (默认值)

  • true

format

字符串

构建镜像的格式。

选项

  • "docker"

  • "oci" ← (默认值)

rm

布尔值

在成功构建后删除中间容器

选项

  • false

  • true ← (默认值)

target

字符串

指定要构建的目标构建阶段。

volume

列表 / 元素=字符串

指定多个卷/挂载选项,以将一个或多个挂载点挂载到容器。

ca_cert_dir

路径

指向包含要使用的 TLS 证书和密钥的目录的路径。

executable

字符串

如果 podman 可执行文件不在运行 podman 的机器上的 $PATH 中,则指向 podman 可执行文件的路径。

默认值: "podman"

force

布尔值

是否强制推送或拉取镜像。

在构建时,即使镜像已存在,也强制构建。

选项

  • false ← (默认值)

  • true

name

字符串 / 必需

要拉取、推送或删除的镜像的名称。它可以使用 image:tag 格式包含标签。

password

字符串

对远程注册表进行身份验证时使用的密码。

路径

字符串

构建上下文目录的路径。

pull

布尔值

是否拉取镜像。

选项

  • false

  • true ← (默认值)

pull_extra_args

字符串

要传递给 pull 命令的额外参数。

push

布尔值

是否推送镜像。

选项

  • false ← (默认值)

  • true

push_args

字典

控制推送镜像的参数。

默认值: {}

compress

布尔值

使用 'dir' 传输方式推送至目录时,是否压缩 tarball 镜像层。

选项

  • false

  • true

dest

别名:destination

字符串

将镜像推送到的路径或 URL。

extra_args

字符串

如果执行,则传递给 push 的额外参数。不会幂等地检查新的 push 参数。

format

字符串

使用“dir”传输方式推送镜像时使用的清单类型(默认为源的清单类型)

选项

  • “oci”

  • “v2s1”

  • “v2s2”

remove_signatures

布尔值

丢弃镜像中任何预先存在的签名

选项

  • false

  • true

sign_by

字符串

用于签署镜像的密钥文件路径。

transport

字符串

推送镜像时使用的传输方式。如果没有设置传输方式,将尝试推送到远程注册表

选项

  • “dir”

  • "docker"

  • “docker-archive”

  • “docker-daemon”

  • “oci-archive”

  • “ostree”

quadlet_dir

路径

写入 quadlet 文件的目录路径。默认情况下,对于 root 用户,它将设置为 /etc/containers/systemd/,对于非 root 用户,将设置为 ~/.config/containers/systemd/

quadlet_file_mode

任意

quadlet 文件的权限。

quadlet_file_mode 可以指定为八进制数或符号模式(例如,u+rwxu=rw,g=r,o=r)。对于八进制数格式,必须添加前导零,以便 Ansible 的 YAML 解析器知道它是一个八进制数(例如 064401777),或者将其用引号括起来(例如 '644''1777'),以便 Ansible 接收到一个字符串,并可以自行将字符串转换为数字。如果不遵循这些规则之一而直接给 Ansible 提供数字,最终将得到一个十进制数,这将导致意外的结果。

如果未指定 quadlet_file_mode 并且 quadlet 文件**不存在**,则在设置新创建文件的模式时,将使用默认的 '0640' 掩码。

如果未指定 quadlet_file_mode 并且 quadlet 文件**存在**,则将使用现有文件的模式。

指定 quadlet_file_mode 是确保文件以正确的权限创建的最佳方法。

quadlet_filename

字符串

要写入的 quadlet 文件名。默认情况下,它采用不带前缀和标签的镜像名称。

quadlet_options

列表 / 元素=字符串

quadlet 文件的选项。提供通常网络参数选项中缺少的选项,作为要添加的行列表。

state

字符串

镜像是否存在、不存在或是否已构建。

选项

  • "present" ← (默认)

  • “absent”

  • “build”

  • “quadlet”

tag

字符串

要拉取、推送或删除的镜像的标签。

默认值: "latest"

username

字符串

用于向远程注册表进行身份验证的用户名。

validate_certs

别名:tlsverify,tls_verify

布尔值

拉取或推送时要求使用 HTTPS 并验证证书。如果需要拉取或推送,则在构建过程中也会使用。

选项

  • false

  • true

示例

- name: Pull an image
  containers.podman.podman_image:
    name: quay.io/bitnami/wildfly

- name: Remove an image
  containers.podman.podman_image:
    name: quay.io/bitnami/wildfly
    state: absent

- name: Remove an image with image id
  containers.podman.podman_image:
    name: 0e901e68141f
    state: absent

- name: Pull a specific version of an image
  containers.podman.podman_image:
    name: redis
    tag: 4

- name: Build a basic OCI image
  containers.podman.podman_image:
    name: nginx
    path: /path/to/build/dir

- name: Build a basic OCI image with advanced parameters
  containers.podman.podman_image:
    name: nginx
    path: /path/to/build/dir
    build:
      cache: no
      force_rm: true
      format: oci
      annotation:
        app: nginx
        function: proxy
        info: Load balancer for my cool app
      extra_args: "--build-arg KEY=value"

- name: Build a Docker formatted image
  containers.podman.podman_image:
    name: nginx
    path: /path/to/build/dir
    build:
      format: docker

- name: Build and push an image using existing credentials
  containers.podman.podman_image:
    name: nginx
    path: /path/to/build/dir
    push: true
    push_args:
      dest: quay.io/acme

- name: Build and push an image using an auth file
  containers.podman.podman_image:
    name: nginx
    push: true
    auth_file: /etc/containers/auth.json
    push_args:
      dest: quay.io/acme

- name: Build and push an image using username and password
  containers.podman.podman_image:
    name: nginx
    push: true
    username: bugs
    password: "{{ vault_registry_password }}"
    push_args:
      dest: quay.io/acme

- name: Build and push an image to multiple registries
  containers.podman.podman_image:
    name: "{{ item }}"
    path: /path/to/build/dir
    push: true
    auth_file: /etc/containers/auth.json
    loop:
    - quay.io/acme/nginx
    - docker.io/acme/nginx

- name: Build and push an image to multiple registries with separate parameters
  containers.podman.podman_image:
    name: "{{ item.name }}"
    tag: "{{ item.tag }}"
    path: /path/to/build/dir
    push: true
    auth_file: /etc/containers/auth.json
    push_args:
      dest: "{{ item.dest }}"
    loop:
    - name: nginx
      tag: 4
      dest: docker.io/acme

    - name: nginx
      tag: 3
      dest: docker.io/acme

- name: Pull an image for a specific CPU architecture
  containers.podman.podman_image:
    name: nginx
    arch: amd64

- name: Build a container from file inline
  containers.podman.podman_image:
    name: mycustom_image
    state: build
    build:
      container_file: |-
        FROM alpine:latest
        CMD echo "Hello, World!"

- name: Create a quadlet file for an image
  containers.podman.podman_image:
    name: docker.io/library/alpine:latest
    state: quadlet
    quadlet_dir: /etc/containers/systemd
    quadlet_filename: alpine-latest
    quadlet_file_mode: '0640'
    quadlet_options:
      - Variant=arm/v7
      - |
        [Install]
        WantedBy=default.target

返回值

常见的返回值已在此处 记录,以下是此模块独有的字段

描述

image

字典

已拉取、推送或构建的镜像的镜像检查结果。

返回:成功

示例: [{"Annotations": {}, "Architecture": "amd64", "Author": "", "Comment": "", "Config": {"ArgsEscaped": true, "Cmd": ["/bin/sh"], "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"]}, "Created": "2019-03-07T22:19:53.447205048Z", "Digest": "sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10", "GraphDriver": {"Data": {"UpperDir": "/home/user/.local/share/containers/storage/overlay/3fc6.../diff", "WorkDir": "/home/user/.local/share/containers/storage/overlay/3fc6.../work"}, "Name": "overlay"}, "History": [{"created": "2019-03-07T22:19:53.313789681Z", "created_by": "/bin/sh -c #(nop) ADD file:aa17928... in / "}, {"created": "2019-03-07T22:19:53.447205048Z", "created_by": "/bin/sh -c #(nop)  CMD [\"/bin/sh\"]", "empty_layer": true}], "Id": "6d1ef012b5674ad8a127ecfa9b5e6f5178d171b90ee462846974177fd9bdd39f", "Labels": null, "ManifestType": "application/vnd.docker.distribution.manifest.v2+json", "NamesHistory": ["docker.io/library/alpine:3.7"], "Os": "linux", "Parent": "", "RepoDigests": ["docker.io/library/alpine@sha256:8421...", "docker.io/library/alpine@sha256:9225..."], "RepoTags": ["docker.io/library/alpine:3.7"], "RootFS": {"Layers": ["sha256:3fc6..."], "Type": "layers"}, "Size": 4467084, "User": "", "Version": "18.06.1-ce", "VirtualSize": 4467084}]

作者

  • Sam Doran (@samdoran)