Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ansible with file模块创建目录列表很慢_Ansible - Fatal编程技术网

使用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}
。如果您的解决方案确实缓解了提到的性能问题,我现在需要花一些时间来测试。它花费的时间与文件模块所花费的时间相同,每个创建的目录都要等待几秒钟。