В моем тестировании ansible-playbook --syntax-check
правильно установил код выхода на основании синтаксических ошибок в playbook. Вы можете поверить мне на слово, что хороший -пример и плохой -пример плейбуков ведут себя так, как указано.
Хороший файл:
$ ansible-playbook --syntax-check good-example.yaml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'
playbook: good-example.yaml
$ echo $?
0
... и битый файл:
$ ansible-playbook --syntax-check bad-example.yaml
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'
ERROR! 'xhosts' is not a valid attribute for a Play
The error appears to have been in '/.../bad-example.yaml': line 2, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
---
- xhosts: all
^ here
$ echo $?
4
Итак, я считаю, что вы могли бы выполнить проверку синтаксиса -так, как вы предлагаете:
ansible-playbook --syntax-check example.yml && ansible-playbook example.yml
... хотя может быть спокойнее отказаться от вывода из части проверки синтаксиса:
ansible-playbook --syntax-check example.yml >/dev/null 2>&1 && ansible-playbook example.yml
Примечание:Вы можете обернуть все это в функцию, чтобы не печатать:
safe-ansible() {
ansible-playbook --syntax-check "$@" > /dev/null 2>&1 &&
ansible-playbook "$@"
}
Вам нужно будет создать сценарий и вызвать эту оболочку, вызывающую ваш сценарий в качестве параметра. Например:
$ echo "echo hi" > my_echo.subshell
$ echo "enter-subshell -c my_echo.subshell" > my_script.bash
$./my_script.bash
Способ передачи параметров в подоболочку (в моем примере "-c
" )будет зависеть от вашей подоболочки, каждая оболочка может использовать разные параметры.
В качестве альтернативы, если вы не хотите создавать второй сценарий, вы также можете перенаправить инструкции в оболочку. Это также будет варьироваться и зависеть от оболочки, которую вы хотите вызвать. Например:
enter-subshell -e <<EOF
echo hi
EOF
Подробнее об этом методе можно прочитать в «Здесь документы ». Опять же, вы найдете правильный способ выполнения конкретной подоболочки (в моем примере "-e
" ).