Ansible playbook для запуска команды для каждого подкаталога в каталоге - PullRequest
0 голосов
/ 28 апреля 2020

У меня следующая структура каталогов:

parent_dir/
├── subdir_1
├── subdir_2
└── subdir_3

Подкаталоги не имеют фиксированного имени, и их может быть произвольное число.

Как заставить ansible запускать задачу для каждого подкаталога?

(подойдет любая задача, в конечном итоге каждый каталог будет python пакетом для установки, но это не так важно для контекста этого вопроса)

1 Ответ

1 голос
/ 28 апреля 2020

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

Копирование, вставляя следующий код, создаст структура каталогов с минимальной ansible playbook, которая выполняет необходимые функции. (проверено на Ubuntu / da sh)

mkdir action_per_dir
cd action_per_dir 
mkdir -p parent_dir/subdir_1 parent_dir/subdir_2 parent_dir/subdir_3

cat > action_per_dir.yml << "EOF"
---
# Gets all the directories and stores all the return values of `find`
# into the results_of_find
# The return value will consist of: 
# https://docs.ansible.com/ansible/latest/modules/find_module.html#return-values
- hosts: localhost
  tasks:
  - name: Get all dirs
    find:
      paths: parent_dir
      file_type: directory
    register: result_of_find

# We're interested only in the `files` part of results of find.
# In pseudo code what's happening here is:
#     for each item in result_of_find.files:
#         print item.path
#
# The output will be very verbose but for debugging purposes it can be filtered
# ansible-playbook action_per_dir.yml | grep msg
  - name: Print all the dirs
    debug:
      msg: "{{ item.path }}"
    with_items: "{{ result_of_find.files }}"
EOF


После этого его просто нужно запустить:

ansible-playbook action_per_dir.yml | grep msg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...