我用文件替换并且不想将其用于单个文件,而是用于文件列表。文件列表来自通配符。
例如:我想修改/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
您可以分两个步骤进行:
- 获取符合搜索条件的文件列表
file.find
- 创建一个循环将您的函数
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 运行期间创建,那么这将会失败。