Хотите создать несколько Dockerfile через Ansible

Я пытаюсь сделать 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
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 .'

Спасибо за вашу помощь. Это кажется довольно сложным, чем я думал. Если бы вы дали мне только модуль «найти», решить эту проблему было бы сложнее. Я должен учиться более усердно. Хорошего дня

Kyroo0 10.05.2022 10:21

Собственно, в файле есть не только Dockerfile. тогда я должен попробовать добавить опцию «шаблоны» внутри модуля поиска? Я отредактировал свой пост.

Kyroo0 10.05.2022 10:33

Другие вопросы по теме