play -e jsmith hostname --extra-vars "user=hostname.biz command=hostname"
Я пытаюсь запустить выше Баш скрипт, который является оберткой анзибля-Playbook команды, которая также способно выполнить внешнюю команду для создания динамических файлов инвентаризация (мы не используем стандартный динамический модуль инвентаризации). Проблема, похоже, исходит от bash. Плей-лист здесь - «имя хоста», а ошибка, которую я сохраняю, - «ОШИБКА! Playbook: command = hostname не удалось найти». Вот сценарий, который я использую, где я пытаюсь сохранить аргументы скрипту после получения опции -e.Bash скрипт не передавая правильные параметры анзибля-сборник пьес
EDIT 1
#!/bin/bash
#
# Description: Abstraction of ansible-playbook with knowledge of environment specific variables.
#
prelude export
export PATH=$PATH:$ANSIBLE_HOME/bin
ANSARGS=""
ENVIRONMENT=$(envname)
while [[ $# -gt 0 ]]; do
case "$1" in
-e)
ENVIRONMENT=$2
shift 2
;;
-p)
PLAYBOOK=$2
shift 2
;;
*)
ANSARGS+="###$1"
shift
;;
esac
done
REPLACE=' '
ANSARGSARR=($ANSARGS)
TO_DISPLAY="${ANSARGS//'###'/$REPLACE}"
echo $TO_DISPLAY
PLAYBOOKFILE=$IR_ANSIBLE_PLAYBOOKS/"$PLAYBOOK".yml
ANSIBLE_OPTS="-M $IR_ANSIBLE_MODULES -i $(dynamicinventory -e $ENVIRONMENT)"
if [ ! -f $PLAYBOOKFILE ]; then
ansible-playbook ${ANSIBLE_OPTS} $*
else
set -x
ansible-playbook ${ANSIBLE_OPTS} $PLAYBOOKFILE ${TO_DISPLAY}
fi
$TO_DISPLAY
показывает правильный параметр, который будет передан анзибль-сборник пьес, но набор-х отображает неправильное цитирование и команда не выполняется, когда этот сценарий вызывается с помощью следующих действий:
play -e jsmith -p status --extra-vars '"script=start hello=world"'
$TO_DISPLAY
показывая --extra-vars "script=start hello=world"
сек et -x, показывающий + ansible-playbook -M ansible-conf/modules -i ansible-conf/custom_inventory/jsmith/inventory ansible-conf/playbooks/status.yml --extra-vars **'"**script=start**'** **'**hello=world**"'**
Попробуйте положить 'set -x' перед вызовом' ansible-playbook', поэтому Bash распечатает точный вызов, который он делает. ('set + x' для отмены) – dg99
@EtanReisner im не заставляет людей делать что-либо, что является законным синтаксисом синтаксиса. – Zee
Когда вы переводите' user = hostname.biz command = hostname' в 'ANSARGS', а затем разделяете это на пробелы - это * два аргумента. Поэтому '$ {ANSARGS [@]: 1}' расширяет на * три слова: '--extra-vars',' user = hostname.biz' и 'command = hostname'. Я предполагаю, что это не то, что вы на самом деле хотите. –