Ansible: принудительное выполнение pipefail

Ранее сегодня мы столкнулись с неприятной проблемой, вызванной следующей оболочкой:

- name: get remote branches
  shell: git ls-remote -h [email protected]:orga/repo.git | sed 's_.*refs/heads/__g'
  register: branches_remote

Команда git не выполнена, но код возврата всего канала равен 0. Это поведение bash /sh по умолчанию .

Чтобы исправить это, в sh /bash вы можете set -o pipefail или set -e. Можно ли сделать это в ANSIBLE, желательно глобально для всех моих команд shell?

4 голоса | спросил Nico Schlömer 23 +03002015-10-23T17:29:44+03:00312015bEurope/MoscowFri, 23 Oct 2015 17:29:44 +0300 2015, 17:29:44

1 ответ


0

В общем, вы должны пытаться использовать команды оболочки как последнее средство, поскольку они, как правило, немного ломкие. Если вам нужно использовать модуль оболочки с какими-либо параметрами оболочки, просто отправьте его как часть своего конвейера команд, как показано ниже. Исполняемый параметр заставляет использовать оболочку bash.

[[email protected] ~]$ ansible myhost -m shell -a "executable=/bin/bash set -o pipefail && false | echo hello there"
myhost | FAILED | rc=1 >>
hello there

[[email protected] ~]$ ansible myhost -m shell -a "executable=/bin/bash set -o pipefail && true | echo hello there"
myhost | success | rc=0 >>
hello there
ответил Dave Snigier 24 +03002015-10-24T00:42:52+03:00312015bEurope/MoscowSat, 24 Oct 2015 00:42:52 +0300 2015, 00:42:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132