saltstack - ¿Cómo puedo ejecutar múltiples comandos usando Salt Stack?
saltstack open source (3)
Intenté añadir:
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''
Pero por alguna razón, este estado parece ejecutarse / instalarse pero los comandos no se ejecutan, o al menos no todos.
Necesito una solución para ejecutar varios comandos y fallar la implementación si alguno de estos falla.
Sé que podría escribir un script de bash e incluir este script de bash, pero estaba buscando una solución que funcionara solo con el archivo YAML.
Además de las sugerencias (mejores) anteriores, puede hacer esto:
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
Por razones que aún no entiendo (soy un principiante de Salt), los names
se iteran en orden inverso, por lo que los comandos se ejecutan al revés.
Puede hacer lo que Dan señaló, usando la tubería o un estado cmd.script
. Pero debe tenerse en cuenta que tiene algunos problemas de sintaxis en su publicación original. Cada nuevo estado necesita un name
arg, no puede simplemente poner el comando después de los dos puntos:
mypack:
pkg:
- installed
- pkgs:
- mercurial
- git
cmd.run:
- name: ''my first command''
cmd.run:
- name: ''my second command''
Sin embargo, en realidad eso también puede fallar, porque no creo que puedas poner múltiples del mismo estado debajo de una única ID. Así que puede que tengas que dividirlos así:
first:
cmd.run:
- name: ''my first command''
second:
cmd.run:
- name: ''my second command''
Tu quieres esto:
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
O esto, que preferiría, donde el script se descarga desde el master:
cmd-test:
cmd.script:
- source: salt://foo/bar.sh
- cwd: /where/to/run
- user: fred