Как выполнить несколько команд с помощью Соляного стека?
Я попытался добавить:
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 script и включить этот bash script, но я искал решение, которое будет работать только с файлом YAML.
Ответы
Ответ 1
Вы хотите:
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
Или это, что я бы предпочел, где script загружается от ведущего:
cmd-test:
cmd.script:
- source: salt://foo/bar.sh
- cwd: /where/to/run
- user: fred
Ответ 2
В дополнение к вышеуказанным (лучшим) предложениям вы можете сделать это:
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
повторяются в обратном порядке, поэтому команды выполняются в обратном направлении.
Ответ 3
Вы можете сделать, как указал Дэн, используя трубку или состояние cmd.script
. Но следует отметить, что у вас есть проблемы с синтаксисом в вашем исходном сообщении. Каждое новое состояние нуждается в аргументе name
, вы не можете просто поместить команду после двоеточия:
mypack:
pkg:
- installed
- pkgs:
- mercurial
- git
cmd.run:
- name: 'my first command'
cmd.run:
- name: 'my second command'
Тем не менее, это может также потерпеть неудачу, потому что я не думаю, что вы можете поместить несколько одинаковых состояний под один ID. Поэтому вам, возможно, придется разделить их так:
first:
cmd.run:
- name: 'my first command'
second:
cmd.run:
- name: 'my second command'