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

Отложить выполнение команды до тех пор, пока не запустится что-то еще

Я пытаюсь написать сценарий развертывания с солью. В основном это работает. Мне нужно пару раз запустить highstate, чтобы он работал полностью. Моя самая большая проблема заключается в том, как выполнять команды одну за другой на основе конкретной первой, и они фактически заканчивают / работают.

Вот мое солевое состояние demo.sls:

{% set web_root = "/var/www/demo/" %}

/var/www/venv/demo:
  virtualenv.managed:
    - system_site_packages: False
    - require:
      - pkg: python-virtualenv

demo:
  git.latest:
    - name: git://localhost/demo.git
    - target: {{ web_root }}

demo_pip:
  cmd.wait:
    - name: 'source /var/www/venv/demo/bin/activate && pip install -r requirements.txt'
    - cwd: {{ web_root }}
    - watch:
      - git: demo

run_migrations:
  cmd.wait:
    - name: 'source /var/www/venv/demo/bin/activate && python manage.py syncdb --noinput'
    - cwd: {{ web_root }}
    - watch:
      - cmd: demo_pip

restart_gunicorn:
  cmd.wait:
    - name: supervisorctl restart gunicorn
    - watch:
      - cmd: run_migrations

Я установил так, чтобы demo_pip запускается после вызова git (который отлично работает), но если честно demo_pip на самом деле не работает. Результатом работы salt является то, что он запустился, но ни одно из требований в файле requirements.txt не было установлено.

Я попытался изложить требования в virtualenv.managed раздел, чтобы запустить его, но в этот момент мне нужно запустить 2 высоких состояния. 1) чтобы получить последнюю версию от git, похоже, бот запускается исключительно 2) для установки требований. Почему-то даже после установки virtualenv.managed раздел после demo он по-прежнему не регистрирует новый файл требований.

Я неправильно использую cmd? Или у меня проблема с заказом?

Я наконец понял это. Похоже, это была проблема с правами доступа к файлу / папке. Я установил file.managed для всех папок в /var/www быть в группе www-data. Также убедился, что все выполнено как www-data, и после этого все заработало как положено.