Salt:文件列表中的 file.replace(通配符)

Salt:文件列表中的 file.replace(通配符)

我用文件替换并且不想将其用于单个文件,而是用于文件列表。文件列表来自通配符。

例如:我想修改/etc/ImageMagick*/policy.xml

该文件可以是/etc/ImageMagick-6/policy.xml/etc/ImageMagick/policy.xml或...

据我所知,“file.replace”中的“name”只能是一个文件名。

如何用盐解决这个问题?

salt-users 列表中的相关讨论:https://groups.google.com/forum/#!topic/salt-users/75OpiflpObA

答案1

您可以分两个步骤进行:

  1. 获取符合搜索条件的文件列表file.find
  2. 创建一个循环将您的函数file.replace应用于该列表中的每个文件

注意:这只是实现你的目标的方法论,我没有为你准备技术解决方案。

答案2

这会起作用:

/etc/foo.test:
  file.managed:
    - source: salt://tmp/dummy

{% for file in salt['cmd.run']('ls -1 /etc/foo*.test').splitlines() %}
{{ file }}_dummy_to_real:
  file.replace:
    - name: {{ file }}
    - pattern: dummy
    - repl: hitme
{% endfor %}

但它只有/etc/foo.test在 salt 开始执行之前已经存在的情况下才有效。

如果 /etc/foo.test在同一次 salt 运行期间创建,那么这将会失败。

相关内容