J'ai essayé d'ajouter:
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'
Mais pour une raison quelconque, l'état semble exécuter/installer mais les commandes ne sont pas exécutées, ou du moins pas toutes.
J'ai besoin d'une solution pour exécuter plusieurs commandes et échouer le déploiement si l'une d'elles échoue.
Je sais que je pourrais écrire un script bash et inclure ce script bash, mais je cherchais une solution qui ne fonctionnerait qu'avec le fichier YAML.
Tu veux ça:
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
Ou ceci, que je préférerais, où le script est téléchargé depuis le maître:
cmd-test:
cmd.script:
- source: salt://foo/bar.sh
- cwd: /where/to/run
- user: fred
En plus des (meilleures) suggestions ci-dessus, vous pouvez faire ceci:
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
Pour des raisons que je ne comprends pas encore (je suis un novice de Salt), les names
sont itérés dans l'ordre inverse, donc les commandes sont exécutées à l'envers.
Vous pouvez faire comme Dan l'a souligné, en utilisant le tuyau ou un cmd.script
Etat. Mais il convient de noter que vous avez des problèmes de syntaxe dans votre message d'origine. Chaque nouvel état a besoin d'un argument name
, vous ne pouvez pas simplement mettre la commande après les deux points:
mypack:
pkg:
- installed
- pkgs:
- Mercurial
- git
cmd.run:
- name: 'my first command'
cmd.run:
- name: 'my second command'
Cependant, cela peut également échouer, car je ne pense pas que vous puissiez mettre plusieurs du même état sous un seul ID. Vous devrez donc peut-être les répartir comme suit:
first:
cmd.run:
- name: 'my first command'
second:
cmd.run:
- name: 'my second command'