2016-04-26 3 views
0

У меня возникают проблемы, когда мои управляемые файлы записываются в каждом запуске состояния, даже если в файле ничего не обновлено. Как ни странно, я не могу найти ничего об остановке этого от Google или в солевых документах.SaltStack - управляемый файл записывается на каждом прогоне, как писать файл только в том случае, если есть обновления?

Мои состояния разделены на init.sls для развертывания пакета и config.sls для настройки пакета, причем значения конфигурации по умолчанию и среды разделены на столбик. Ниже приведены примеры.

Config State Example: 
{% from "amq/map.jinja" import amq with context %} 
camelxml_conf: 
    file.managed: 
    - name: {{ amq.camelxml }} 
    - source: salt://amq/conf/camel.xml.tmpl 
    - template: jinja 
    - user: omapp 
    - group: omapp 
    - mkdirs: True 
    - recurse: 
     - user 
     - group 

Pillar Example: 
default_routes: 
    Route1: 
    from_uri: 'activemq:inputqueue1' 
    process_ref: 'myprocessor1' 
    to_uri: 'activemq:outputqueue1' 
    Route2: 
    from_uri: 'activemq:inputqueue2' 
    process_ref: 'myprocessor2' 
    to_uri: 'activemq:outputqueue2' 

{% if 'qa' in grains['env'] %} 
env_routes: 
    route1: 
    from_uri: 'activemq:inputqueue3' 
    process_ref: 'myprocessor3' 
    to_uri: 'activemq:outputqueue3' 
{% endif %} 

Camel.xml Template Example: 
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> 
     <!-- routes common across all environments --> 
     {% for route, args in pillar.get('default_routes', {}).items() %} 
     <route> 
      <from uri="{{ args.from_uri }}"/> 
      <process ref="{{ args.process_ref }}"/> 
      <to uri="{{ args.to_uri }}"/> 
     </route> 
     {% endfor %} 

     <!-- routes unique to this environment --> 
     {% for env_route, args in pillar.get('env_routes', {}).items() %} 
     <route> 
      <from uri="{{ args.from_uri }}"/> 
      <process ref="{{ args.process_ref }}"/> 
      <to uri="{{ args.to_uri }}"/> 
     </route> 
     {% endfor %} 

ли я делаю что-то совершенно неправильно здесь? Должен ли я не устанавливать значения динамически в моем столбе? Я думаю, что это может быть причиной того, что новый файл записывается в каждом штатном режиме, но я не уверен.

+0

Что вы хотите сказать? Нет никакой разницы между старым и новым файлом, даже строчным порядком? Время модификации файла обновляется каждый раз, когда вы запускаете свое состояние без каких-либо изменений? У вас есть результат запуска? Какую версию ты используешь? Поведение Salt - не обновлять не измененный файл, поэтому, если он будет продолжать его обновлять, это может быть ошибка. –

ответ

2

Если вы запустите свое состояние с помощью теста = True, добавленного в команду, он покажет вам разницу в изменениях, которые он собирается сделать. Это может помочь вам найти причину, в которой он нуждается в изменении.

+0

Спасибо - это заставило меня понять, что я использовал cmd.run вместо cmd.wait в моем состоянии инициализации, и это, в свою очередь, приводило к тому, что файл конфигурации рассматривался как измененный для каждого прогона. – user797963