用文件模块创建带有ansible的目录列表很慢

时间:2018-09-10 13:46:31

标签: ansible

我有一个角色,必须创建目录列表。哪些目录最终出现在列表中,取决于在运行时评估的几种条件。

当我使用file模块时,如图所示,这非常慢。创建甚至检查每个目录是否存在大约需要半秒钟,在我遇到的情况下,这很容易总计几分钟。

管道启用。

- name: Create directories
  file:
    path:   "{{ item }}"
    state:  directory
  with_items:
    - "{{ dirs }}"
  when:
    - dirs is defined

有人问过类似的问题here,但是如此处建议的那样使用synchronizeunarchive对于事先未知的目录来说似乎很尴尬,因为要同步的目录结构,首先必须在本地主机上的某个地方创建。

还有其他解决方法,我可能会错过吗?

编辑: 我知道shellcommandmkdir -p恰好是幂等的。我仍然更喜欢ansible管理目录状态的方法。

1 个答案:

答案 0 :(得分:1)

一种选择是使用“命令创建”构造。

- name: Create directories
  command: mkdir -p "{{ item }}"
  args:
    creates: "{{ item }}"
  loop: "{{ dirs }}"

幂等,命令模块和“无工具无工具”。

在对该答案的注释中以及在命令模块的问题等幂中提到的thread中都进行了讨论,并且首选了ansible模块的本机幂等。

  

“我知道shell和命令,而mkdir -p恰好是幂等的。但我还是更喜欢用ansible管理目录状态的方法。”

     

“您应该提到使用本机文件模块的这种宽松的幂等功能。”

命令创建构造是幂等的。仅当 item 不存在时才执行 command 。而且,我认为,在类似的情况下,应优先使用此构造,因为它可以准确地完成所需的操作,快速且易于理解。这符合norms of minimalist, modular software development的要求,对于可持续发展是必不可少的。