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

nlu*_*nlu 7 ansible

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

当我使用该file模块时,如图所示,速度非常慢。创建甚至检查每个目录是否存在大约需要半秒,在我遇到的场景中很容易就达到几分钟。

流水线已启用。

- name: Create directories
  file:
    path:   "{{ item }}"
    state:  directory
  with_items:
    - "{{ dirs }}"
  when:
    - dirs is defined
Run Code Online (Sandbox Code Playgroud)

这里已经提出了类似的问题,但是,按照那里的建议,使用synchronizeor unarchive,对于事先未知的目录来说似乎非常尴尬,因为要同步的目录结构首先必须在本地主机上的某个地方创建。

还有其他替代方案可以解决这个问题吗?我可能错过了?

编辑:我知道shell并且command恰好mkdir -p是幂等的。不过我更喜欢一种方式,由 ansible 管理目录的状态。

Vla*_*tka 2

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

- name: Create directories
  command: mkdir -p "{{ item }}"
  args:
    creates: "{{ item }}"
  loop: "{{ dirs }}"
Run Code Online (Sandbox Code Playgroud)

幂等性、命令模块和“工具无策略”。

在这个答案的评论和问题中提到的线程中都讨论了命令模块的幂等性,并且优先考虑 ansible 模块的本机幂等性。

“我知道 shell 和命令,并且 mkdir -p 恰好是幂等的。但我仍然更喜欢一种方式,让 ansible 管理目录的状态。”

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

命令创建的构造是幂等的。仅当该项目不存在时才执行该命令。此外,在我看来,在类似的情况下,这种结构应该是首选,因为它完全满足了需要,速度快并且易于理解。这符合可持续发展所必需的简约、模块化软件开发规范。