想通过 Ansible 构建多个 Dockerfile
Want to build multiple Dockerfile via Ansible
我正在尝试制作构建多个 Dockerfile 的 Ansible-Playbook
│ ├── aa
│ │ ├── 11
│ │ │ └── ubuntu.18.04
│ │ │ └── Dockerfile
│ │ ├── 22
│ │ │ ├── ubuntu.16.04
│ │ │ │ └── Dockerfile
│ │ │ └── ubuntu.20.04
│ │ │ └── Dockerfile
│ │ ├── 33
│ │ │ └── ubuntu.20.04
│ │ │ └── Dockerfile
│ │ └── 44
│ │ │ └── ubuntu.18.04
│ │ │ └── Dockerfile
我附上我的树结构。
有aa bb等多个目录
是否有更有效的方法来获取列表并生成构建命令?
我现在正在制作每一本剧本。
我认为这不是一个好方法,但至少按手头的每个构建命令仍然更好。
- name: Build aa 11 ubuntu 18.04 images
command: docker build -t "{{basic_directory}}/aa/11/ubuntu.18.04:{{version}}" .
- name: Build aa 22 ubuntu 16.04 images
command: docker build -t "{{basic_directory}}/aa/22/ubuntu.16.04:{{version}}" .
- name: Build aa 22 ubuntu 18.04 images
command: docker build -t "{{basic_directory}}/aa/22/ubuntu.18.04:{{version}}" .
添加代码
- find:
path: "{{basic_directory}}"
recurse: true
patterns: 'Dockerfile'
register: result
给定树
shell> tree conf/
conf/
└── aa
├── 11
│ └── ubuntu.18.04
│ └── Dockerfile
├── 22
│ ├── ubuntu.16.04
│ │ └── Dockerfile
│ └── ubuntu.20.04
│ └── Dockerfile
├── 33
│ └── ubuntu.20.04
│ └── Dockerfile
└── 44
└── ubuntu.18.04
└── Dockerfile
和变量
basic_directory: conf
version: '1.0'
使用find模块获取路径列表
- find:
path: "{{ basic_directory }}"
recurse: true
pattern: Dockerfile
register: result
result.files|map(attribute='path')|list:
- conf/aa/11/ubuntu.18.04/Dockerfile
- conf/aa/33/ubuntu.20.04/Dockerfile
- conf/aa/44/ubuntu.18.04/Dockerfile
- conf/aa/22/ubuntu.20.04/Dockerfile
- conf/aa/22/ubuntu.16.04/Dockerfile
迭代列表
- debug:
msg: >-
command: docker build -t {{ item|dirname }}:{{ version }} .
loop: "{{ result.files|map(attribute='path')|list }}"
给出(删节)
msg: 'command: docker build -t /tmp/aa/11/ubuntu.18.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/33/ubuntu.20.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/44/ubuntu.18.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/22/ubuntu.20.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/22/ubuntu.16.04:1.0 .'
可选地,可以只查找目录,例如
- find:
path: "{{ basic_directory }}"
recurse: true
file_type: directory
patterns: ubuntu*
register: result
result.files|map(attribute='path')|list:
- conf/aa/11/ubuntu.18.04
- conf/aa/33/ubuntu.20.04
- conf/aa/44/ubuntu.18.04
- conf/aa/22/ubuntu.20.04
- conf/aa/22/ubuntu.16.04
迭代列表
- debug:
msg: >-
command: docker build -t {{ item }}:{{ version }} .
loop: "{{ result.files|map(attribute='path')|list }}"
给出相同的结果
msg: 'command: docker build -t /tmp/aa/11/ubuntu.18.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/33/ubuntu.20.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/44/ubuntu.18.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/22/ubuntu.20.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/22/ubuntu.16.04:1.0 .'
我正在尝试制作构建多个 Dockerfile 的 Ansible-Playbook
│ ├── aa
│ │ ├── 11
│ │ │ └── ubuntu.18.04
│ │ │ └── Dockerfile
│ │ ├── 22
│ │ │ ├── ubuntu.16.04
│ │ │ │ └── Dockerfile
│ │ │ └── ubuntu.20.04
│ │ │ └── Dockerfile
│ │ ├── 33
│ │ │ └── ubuntu.20.04
│ │ │ └── Dockerfile
│ │ └── 44
│ │ │ └── ubuntu.18.04
│ │ │ └── Dockerfile
我附上我的树结构。
有aa bb等多个目录
是否有更有效的方法来获取列表并生成构建命令?
我现在正在制作每一本剧本。 我认为这不是一个好方法,但至少按手头的每个构建命令仍然更好。
- name: Build aa 11 ubuntu 18.04 images
command: docker build -t "{{basic_directory}}/aa/11/ubuntu.18.04:{{version}}" .
- name: Build aa 22 ubuntu 16.04 images
command: docker build -t "{{basic_directory}}/aa/22/ubuntu.16.04:{{version}}" .
- name: Build aa 22 ubuntu 18.04 images
command: docker build -t "{{basic_directory}}/aa/22/ubuntu.18.04:{{version}}" .
添加代码
- find:
path: "{{basic_directory}}"
recurse: true
patterns: 'Dockerfile'
register: result
给定树
shell> tree conf/
conf/
└── aa
├── 11
│ └── ubuntu.18.04
│ └── Dockerfile
├── 22
│ ├── ubuntu.16.04
│ │ └── Dockerfile
│ └── ubuntu.20.04
│ └── Dockerfile
├── 33
│ └── ubuntu.20.04
│ └── Dockerfile
└── 44
└── ubuntu.18.04
└── Dockerfile
和变量
basic_directory: conf
version: '1.0'
使用find模块获取路径列表
- find:
path: "{{ basic_directory }}"
recurse: true
pattern: Dockerfile
register: result
result.files|map(attribute='path')|list:
- conf/aa/11/ubuntu.18.04/Dockerfile
- conf/aa/33/ubuntu.20.04/Dockerfile
- conf/aa/44/ubuntu.18.04/Dockerfile
- conf/aa/22/ubuntu.20.04/Dockerfile
- conf/aa/22/ubuntu.16.04/Dockerfile
迭代列表
- debug:
msg: >-
command: docker build -t {{ item|dirname }}:{{ version }} .
loop: "{{ result.files|map(attribute='path')|list }}"
给出(删节)
msg: 'command: docker build -t /tmp/aa/11/ubuntu.18.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/33/ubuntu.20.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/44/ubuntu.18.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/22/ubuntu.20.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/22/ubuntu.16.04:1.0 .'
可选地,可以只查找目录,例如
- find:
path: "{{ basic_directory }}"
recurse: true
file_type: directory
patterns: ubuntu*
register: result
result.files|map(attribute='path')|list:
- conf/aa/11/ubuntu.18.04
- conf/aa/33/ubuntu.20.04
- conf/aa/44/ubuntu.18.04
- conf/aa/22/ubuntu.20.04
- conf/aa/22/ubuntu.16.04
迭代列表
- debug:
msg: >-
command: docker build -t {{ item }}:{{ version }} .
loop: "{{ result.files|map(attribute='path')|list }}"
给出相同的结果
msg: 'command: docker build -t /tmp/aa/11/ubuntu.18.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/33/ubuntu.20.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/44/ubuntu.18.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/22/ubuntu.20.04:1.0 .'
msg: 'command: docker build -t /tmp/aa/22/ubuntu.16.04:1.0 .'