使用ansible with file模块创建目录列表很慢
我有一个角色,它必须创建一个目录列表。列表中的最终目录取决于运行时评估的几个条件 当我使用使用ansible with file模块创建目录列表很慢,ansible,Ansible,我有一个角色,它必须创建一个目录列表。列表中的最终目录取决于运行时评估的几个条件 当我使用文件模块时,如图所示,速度非常慢。创建甚至检查每个目录的存在大约需要半秒钟,在我遇到的场景中,这很容易总结为几分钟 已启用管道 - name: Create directories file: path: "{{ item }}" state: directory with_items: - "{{ dirs }}" when: - dirs is defi
文件
模块时,如图所示,速度非常慢。创建甚至检查每个目录的存在大约需要半秒钟,在我遇到的场景中,这很容易总结为几分钟
已启用管道
- name: Create directories
file:
path: "{{ item }}"
state: directory
with_items:
- "{{ dirs }}"
when:
- dirs is defined
有人提出了一个类似的问题,但是,正如这里所建议的那样,使用同步
或非归档
,对于事先未知的目录来说似乎非常尴尬,因为要同步的目录结构首先必须在本地主机的某个地方创建
有没有其他方法可以解决这个问题,我可能错过了
编辑:
我知道
shell
和command
和mkdir-p
恰好是幂等的。尽管如此,我还是更喜欢ansible管理目录状态的方法。一个选项是使用“command creates”结构
- name: Create directories
command: mkdir -p "{{ item }}"
args:
creates: "{{ item }}"
loop: "{{ dirs }}"
幂等性、命令模块和“工具无策略”。
在对该答案的评论中以及在问题中提到的中,都讨论了命令模块的幂等性,并且首选ansible模块的本机幂等性
“我知道shell和command,而mkdir-p恰好是幂等的。不过我更喜欢ansible管理目录状态的方法。”
“您应该提到使用本机文件模块的这种松散幂等特性。”
命令创建的构造是幂等的。仅当项目不存在时才执行该命令。此外,在我看来,在类似的情况下,这种构造应该是首选的,因为它确实做了需要的事情,做得很快,并且容易理解。这符合可持续发展所必需的。我遇到了同样的问题,必须基于
find
模块生成目录列表。我没有读过代码,所以我要写的只是猜测。慢度与每个目录的执行器有关,连接到目标并进行身份验证,将python生成的代码推送到客户端,签入尚未创建的目录,如果没有,则创建它。向执行者报告,执行者将收集信息等等。@Baptiste Mille Mathias在我链接的问题中,第一个回答者得出了相同的结论。你应该提到,使用本机文件module@Vladimir博特卡:我现在确实同意你的解释。很抱歉没有早点理解你的观点,但我实际上想到了一个简单的mkdir-p{{dirs}
。如果您的解决方案确实缓解了提到的性能问题,我现在需要花一些时间来测试。它花费的时间与文件模块所花费的时间相同,每个创建的目录都要等待几秒钟。