在嵌套循环中创建目录符号链接

时间:2019-01-30 14:17:54

标签: ansible ansible-2.x

如果有人能指出正确的方向,我将不胜感激。我试图在$ 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 个答案:

答案 0 :(得分:0)

您需要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条件不是必需的,因为循环零个元素不会执行任何操作。