Назад | Перейти на главную страницу

Соль: file.replace в списке файлов (подстановка)

я использую file.replace и хотелось бы использовать это не для отдельного файла, а для списка файлов. Список файлов получается из подстановки.

Пример: я хочу изменить /etc/ImageMagick*/policy.xml.

Файл может быть /etc/ImageMagick-6/policy.xml или /etc/ImageMagick/policy.xml или ...

AFAIK "name" в "file.replace" может быть только одним именем файла.

Как решить эту проблему с солью?

Связанное обсуждение в списке пользователей соли: https://groups.google.com/forum/#!topic/salt-users/75OpiflpObA

Вы можете сделать это в два этапа:

  1. Получите список файлов, соответствующих вашему запросу, с file.find
  2. Сделайте цикл для применения вашей функции file.replace к каждому файлу в этом списке

Примечание: это всего лишь методика достижения вашей цели, у меня нет готового технического решения для вас.

Это сработает:

/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 уже существует до того, как соль начнет выполняться.

Если /etc/foo.test создается во время того же солевого прогона, тогда это не удастся.