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

问题描述 投票:2回答:1

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

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

流水线已启用。

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

有一个类似的问题被问到here,但是正如那里建议的那样使用synchronizeunarchive,对于事先不知道的目录来说似乎很尴尬,因为要同步的目录结构,首先必须在本地主机上创建。

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

编辑:我知道shellcommandmkdir -p碰巧是幂等的。仍然我更喜欢一种方式,其中ansible管理目录的状态。

ansible
1个回答
1
投票

一个选项是使用“命令创建”构造。

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

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

在对这个答案的评论中以及在问题中提到的thread中,都讨论了命令模块的幂等性,并且对ansible模块的本地幂等性进行了讨论。

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

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

命令创建构造是幂等的。仅当项目不存在时才执行该命令。此外,在我看来,这种结构在类似情况下应该是首选,因为它完全符合所需要的,快速且易于理解。这符合可持续发展所必需的norms of minimalist, modular software development

© www.soinside.com 2019 - 2024. All rights reserved.