我有一个角色,必须创建目录列表。哪些目录最终出现在列表中,取决于在运行时评估的几种条件。
当我使用file
模块时,如图所示,这非常慢。创建甚至检查每个目录是否存在大约需要半秒钟,在我遇到的情况下,这很容易总计几分钟。
管道启用。
- name: Create directories
file:
path: "{{ item }}"
state: directory
with_items:
- "{{ dirs }}"
when:
- dirs is defined
有人问过类似的问题here,但是如此处建议的那样使用synchronize
或unarchive
对于事先未知的目录来说似乎很尴尬,因为要同步的目录结构,首先必须在本地主机上的某个地方创建。
还有其他解决方法,我可能会错过吗?
编辑:
我知道shell
和command
和mkdir -p
恰好是幂等的。我仍然更喜欢ansible管理目录状态的方法。
答案 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的要求,对于可持续发展是必不可少的。