Я пытаюсь сделать Ansible-Playbook, который создает несколько файлов Dockerfile.
│ ├── 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


Given the tree
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
and the variables
basic_directory: conf
version: '1.0'
Используйте модуль найти, чтобы получить список путей
- 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. тогда я должен попробовать добавить опцию «шаблоны» внутри модуля поиска? Я отредактировал свой пост.
Спасибо за вашу помощь. Это кажется довольно сложным, чем я думал. Если бы вы дали мне только модуль «найти», решить эту проблему было бы сложнее. Я должен учиться более усердно. Хорошего дня