延迟执行命令,直到其他命令运行完毕

延迟执行命令,直到其他命令运行完毕

我正在尝试用 salt 编写一个部署脚本。它基本上可以正常工作。我必须运行几次 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?还是我遇到了顺序问题?

答案1

我终于搞明白了。这似乎是文件/文件夹权限问题。我file.managed为 中的所有文件夹设置了/var/www,使其位于 组中www-data。还确保一切都按 执行www-data,之后一切开始按预期运行。

相关内容