如何使用Ansible 2.x

时间:2017-10-02 12:08:23

标签: ansible ansible-2.x

除此之外还有另一种方法是在root_dir目录的目录上循环而不是递归

- name: loop over directories
  debug: var=item
  with_filetree: "{{root_dir}}"
  when: (item.path.split('/') | length == 1) and (item.state == 'directory')

因为这看起来很牵强,也许有更好的方法(不会深深地遍历目录)?

注意:我也尝试使用with_fileglobitem.state = 'directory'的组合,但没有成功。

编辑:

  • 使用bash命令然后使用Ansible解析它(如find作为@techraf在评论中提出,或ls -l | grep '^d')也可以满足需要,但我更多地要求使用Ansible模块与shellcommand不同。

1 个答案:

答案 0 :(得分:1)

使用带有参数的command: find来限制搜索深度(afair,它们在GNU和BSD的find版本中有所不同。)

或使用两个Ansible的原生find任务,均使用recurse: false

  • 第一个:file_type: directory

  • 中的root_dir
  • 第二个:在paths: "{{ item }}"的第一个结果的循环中

由于第二个任务中存在循环,您最终会得到存储在层次结构中的结果,因此要访问展平结果,请使用以下模板(请参阅this answer):

{{ second_task.results | sum(attribute='files', start=[]) | map(attribute='path') | list }}

您可以添加第三个set_fact - 任务,以简化后续任务中对变量的引用。