我如何引用与 ansible 角色任务 YAML 文件相关的 Dockerfile?

How can I reference a Dockerfile relative to the ansible role task YAML file?

我有一个具有以下目录路径的 Ansible 存储库

.
├── kube-init.sh
├── provisioning
│   ├── group_vars
│   │   └── all.yml
│   ├── roles
│   │   └── app_deploy
│   │       ├── files
│   │       │   ├── secretfile
│   │       ├── tasks
│   │       │   ├── docker
│   │       │   │   ├── Dockerfile
│   │       │   └── main.yml
│   │       └── vars
│   │           └── main.yaml
│   └── site.yml
├── README.md

我正尝试在 provisioning/roles/app_deploy/tasks/main.yaml 定义 docker 构建映像任务,如下所示

- name: Build image and with build args
  vars:
    ansible_python_interpreter: /usr/bin/python3
  docker_image:
    name: app-name
    build:
      path: docker
      dockerfile: Dockerfile
      args:
        log_volume: /var/log/svm
        listen_port: 8080
    state: present
    source: build

我无法完全让 Dockerfile/context 可用于 ansible 任务。尝试了 pathdockerfile 组合的 relative/absolute 值的各种组合。

我认为最明显的选择是跳过使用 dockerfile 并仅使用 path 作为 ./docker,这并没有让我感到惊讶。

将 Ansible 与 Python3 配合使用 Docker v5 以上的 SDK

更多上下文。我实际上是在使用带有 Openstack 插件的 Vagrant 来为我的 Ansible 任务提供新的计算。该插件将 repo (Ansible) 的内容复制到目标机器上的路径 /home/vagrant,并从那里运行配置脚本。

我通过以下方式找到了 docker 模块的正确路径。我在下面添加了一个调试任务,以确定我的 app_deploy/tasks/main.yml 从 as

运行的当前工作目录
- name: Find out playbook's path
  shell: pwd
  register: playbook_path_output
- debug: var=playbook_path_output.stdout

返回我 provisioning/roles。我意识到 site.yml 所在的路径将其中一个角色定义为 app_deploy.

因此,我将 docker 模块路径修改为

- name: Build image and with build args
  vars:
    ansible_python_interpreter: /usr/bin/python3
  docker_image:
    name: app-name
    build:
      path: ./roles/app_deploy/tasks/docker/
      args:
        log_volume: /var/log/svm
        listen_port: 8080
    state: present
    source: build

但是根据 ,以上可能不是将 Dockerfile 及其组成文件存储在特定角色目录中的正确做法。