Как я могу вручную запускать сценарии cmd.wait в Salt?

Скажем, у меня есть скрипт cmd.wait, который следит за изменениями в управляемом репозитории git. Как лучше всего запустить этот скрипт, даже если репозиторий не изменился?

Вот сценарий:

my-repo:
  git.latest:
    - name: [email protected]:my/repo.git
    - rev: master
    - target: /opt/myrepo
    - user: me
    - require:
        - pkg: git


syncdb:
  cmd.run:
    - name /opt/bin/syncdb.sh


load-resources:
  cmd.wait:
    - name: /opt/bin/load_script.py /opt/myrepo/resources.xml
    - require:
      - cmd: syncdb
    - watch:
      - git: my-repo


index-resources:
  cmd.wait:
    - name: /opt/bin/indexer.sh
    - watch:
        - cmd: load-resources

Скажем, я запускаю это состояние, но syncdb терпит неудачу. load-resources и index-resources также терпят неудачу из-за отсутствия предварительных условий. Но my-repo удалось, и теперь у него последняя проверка репозитория.

Итак, я исправляю проблему, которая вызывала сбой syncdb, и это удается. Но теперь мои cmd.watch скрипты не запускаются, потому что my-repo не сообщает об изменениях.

Мне нужно запустить только один раз, load-resources, и в будущем я хочу, чтобы он запускался только при изменении репо. Теперь я мог бы просто изменить его, чтобы использовать cmd.run, но на самом деле у меня есть куча этих cmd.wait скриптов в похожем состоянии, и я действительно не хочу проходить и переключать их все а затем переключите их обратно. То же самое касается внесения искусственных изменений в репозиторий git. Задействовано несколько репозиториев, и это раздражает во многих отношениях. Наконец, я могу предвидеть, что что-то подобное произойдет снова, и мне нужно надежное решение для обработки этого случая, которое не требует множества подверженных ошибкам ручных вмешательств.

Итак, есть ли способ запустить эти cmd.watch скрипты вручную? Или есть умный способ переставить зависимости, чтобы можно было запускать их вручную?


person David Eyk    schedule 31.10.2014    source источник


Ответы (1)


Предполагая, что указанный выше sls находится в: /srv/salt/app.sls, вы сможете выполнить load-resources, выполнив следующее:

$: salt '*appserver*' state.sls_id load-resources app base

Тем не менее, наверняка есть много лучших способов сделать это, чтобы вам не приходилось вручную обрабатывать сбои.

Вы можете изменить свой load-resources, чтобы использовать cmd.run с командой unless, которая фактически проверяет, загружены ли ресурсы или нет. Если это невозможно сделать с точки зрения бизнеса (т. е. нет простого способа проверить), то можно сделать что-то общее, это может быть так же просто, как файл, который вы создаете в конце load_script.py. Файл может содержать идентификатор фиксации репозитория git во время импорта, и если файл не существует или идентификатор фиксации в файле отличается от идентификатора текущего репозитория git, вы знаете, что вам нужно повторно импорт.

Лучшим вариантом было бы даже запечь логику unless в load_script.py, что сделало бы этот скрипт идемпотентным. Как и все солевые модули. Тогда ваш SLS-файл будет еще проще.

person Amr Mostafa    schedule 01.11.2014