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

字典

要添加到镜像的 key=value 对的字典。仅适用于 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"

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

字符串

如果执行推送操作,则传递给推送的额外参数。不会以幂等方式检查新的推送参数。

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)