Создание символьных ссылок каталога во вложенном цикле

Я был бы признателен, если бы кто-нибудь мог указать мне правильное направление. Я пытаюсь найти список каталогов в каталоге $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 условие не требуется, потому что цикл над нулевыми элементами ничего не делает.

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