我试着添加:
mypack:
pkg:
- installed
- pkgs:
- mercurial
- git
cmd.run:
- name: 'mkdir -p /opt/mypack'
cmd.run: 'hg pull -u -R /opt/mypack || hg clone -R /opt https://...'
cmd.run: 'ln -s /opt/mypack/etc/init.d/xxx /etc/init.d/xxx'
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,状态似乎执行/安装但命令没有执行,或者至少不是全部执行.
我需要一个运行多个命令的解决方案,如果其中任何一个失败,则会使部署失败.
我知道我可以写一个bash脚本并包含这个bash脚本,但我一直在寻找一个只能用于YAML文件的解决方案.
Dan*_*ite 50
你要这个:
cmd-test:
cmd.run:
- name: |
mkdir /tmp/foo
chown dan /tmp/foo
chgrp www-data /tmp/foo
chmod 2751 /tmp/foo
touch /tmp/foo/bar
Run Code Online (Sandbox Code Playgroud)
或者这是我希望从主服务器下载脚本的地方:
cmd-test:
cmd.script:
- source: salt://foo/bar.sh
- cwd: /where/to/run
- user: fred
Run Code Online (Sandbox Code Playgroud)
除了上述(更好)的建议,你可以这样做:
cmd-test:
cmd.run:
- names:
- mkdir -p /opt/mypack
- hg pull -u -R /opt/mypack || hg clone -R /opt https://...
- ln -s /opt/mypack/etc/init.d/xxx /etc/init.d/xxx
Run Code Online (Sandbox Code Playgroud)
由于我还不理解的原因(我是Salt新手),names它们以相反的顺序迭代,因此命令向后执行.
小智 5
你可以像Dan指出的那样,使用管道或cmd.script状态.但应该注意的是,您的原始帖子中存在一些语法问题.每个新状态都需要一个namearg,你不能只是把命令放在冒号后面:
mypack:
pkg:
- installed
- pkgs:
- mercurial
- git
cmd.run:
- name: 'my first command'
cmd.run:
- name: 'my second command'
Run Code Online (Sandbox Code Playgroud)
但是,实际上这也可能会失败,因为我认为你不能在同一个ID下放置多个相同的状态.所以你可能需要将它们拆分成这样:
first:
cmd.run:
- name: 'my first command'
second:
cmd.run:
- name: 'my second command'
Run Code Online (Sandbox Code Playgroud)