Создание символьных ссылок каталога во вложенном цикле
Я был бы признателен, если бы кто-нибудь мог указать мне правильное направление. Я пытаюсь найти список каталогов в каталоге $HOME/dotfiles для каждого из списка пользователей, а затем из этого списка создать символическую ссылку на этот каталог в $HOME.
# Get list of directories in $HOME/dotfiles
- name: Get list of directories in $HOME/dotfiles
find:
paths: "/home/{{ user.username }}/dotfiles"
file_type: directory
recurse: false
register: dirs_matched
become: "{{ user.username }}"
loop: "{{ users|flatten(levels=1)}}"
loop_control:
loop_var: user
# Symlink any directories in dotfiles to $HOME
- name: Symlink dirs in ~/dotfiles to $HOME
file:
src: "{{item.0.path}}"
dest: "/home/{{item.1.username}}/{{item.0.path|basename}}"
state: link
force: true
loop: "{{ dirs_matched.files |product(users)|list }}"
when: dirs_matched.matched > 0
Я получаю результаты, но они находятся в dirs_matched.results.files. Я не уверен, как сопоставить результаты с циклом файлового модуля.
1 ответ
Решение
Тебе нужно subelements
петля но не nested/(product)
,
Для каждого элемента верхнего уровня (пользователя) итерируйте каждый подэлемент (файлы).
- name: Symlink dirs in ~/dotfiles to $HOME
file:
src: "{{ item.1.path }}"
dest: "/home/{{ item.0.user.username }}/{{ item.1.path | basename }}"
state: link
force: true
loop: "{{ dirs_matched.results | subelements('files') }}"
when
условие не требуется, потому что цикл над нулевыми элементами ничего не делает.