追加しようとしました:
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'
しかし、何らかの理由で、この状態は実行/インストールされているように見えますが、コマンドは実行されないか、少なくともすべてではありません。
複数のコマンドを実行し、これらのいずれかが失敗した場合にデプロイメントを失敗させるソリューションが必要です。
Bashスクリプトを記述してこのbashスクリプトを含めることができることはわかっていますが、YAMLファイルのみで機能するソリューションを探していました。
あなたはこれを求めている:
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
または、これは私が好みますが、スクリプトはマスターからダウンロードされます。
cmd-test:
cmd.script:
- source: salt://foo/bar.sh
- cwd: /where/to/run
- user: fred
上記の(より良い)提案に加えて、これを行うことができます。
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
私がまだ理解していない理由で(私はSaltの初心者です)、names
は逆の順序で繰り返されるため、コマンドは逆方向に実行されます。
Danが指摘したように、パイプまたはcmd.script
状態。ただし、元の投稿に構文上の問題があることに注意してください。新しい状態ごとにname
引数が必要です。コロンの後にコマンドを置くことはできません。
mypack:
pkg:
- installed
- pkgs:
- Mercurial
- git
cmd.run:
- name: 'my first command'
cmd.run:
- name: 'my second command'
ただし、1つのIDの下に同じ状態を複数配置することはできないので、実際にはそれも失敗する可能性があります。したがって、次のように分割する必要がある場合があります。
first:
cmd.run:
- name: 'my first command'
second:
cmd.run:
- name: 'my second command'