我正在尝试用 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
,之后一切开始按预期运行。