web-dev-qa-db-ja.com

Salt Stackを使用して複数のコマンドを実行するにはどうすればよいですか?

追加しようとしました:

 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ファイルのみで機能するソリューションを探していました。

17
sorin

あなたはこれを求めている:

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
50
Dan Garthwaite

上記の(より良い)提案に加えて、これを行うことができます。

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は逆の順序で繰り返されるため、コマンドは逆方向に実行されます。

10
Steve Bennett

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'
5
Colton Myers