play -e jsmith hostname --extra-vars "user=hostname.biz command=hostname"
私もダイナミックインベントリファイルを生成するための外部コマンドを実行することができますansible-脚本コマンドのラッパーである(上記のbashスクリプトを実行しようとしています標準動的インベントリモジュールは使用していません)。しかし問題はbashから来ているようだ。ここのプレイブックは「ホスト名」で、私が持っているエラーは「エラー!プレイブック:コマンド=ホスト名が見つかりませんでした」です。ここで私が-eオプションを受け取った後にスクリプトに引数を格納しようとしている場所で使用しているスクリプトを示します。このスクリプトは、以下のものを使用して呼び出されたときにEDIT 1bashスクリプトはansible、脚本には、正しいパラメータを渡していない
#!/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
が正しいパラメータを示していることansible-脚本をするために渡されるが、設定-xが引用間違って表示され、コマンドは失敗します。
--extra-vars "script=start hello=world"
Sを示す
play -e jsmith -p status --extra-vars '"script=start hello=world"'
$TO_DISPLAY
et -x showing + ansible-playbook -M ansible-conf/modules -i ansible-conf/custom_inventory/jsmith/inventory ansible-conf/playbooks/status.yml --extra-vars **'"**script=start**'** **'**hello=world**"'**
'' ansible-playbook'の呼び出しの前に 'set -x'を置くと、Bashは正確な呼び出しを表示します。 – dg99
@EtanReisnerは、正当な無能なプレイブックの構文を何かすることを強制しません。 – Zee
'user = hostname.biz command = hostname'を' ANSARGS'に押し込み、それを分割するとスペース* 2つの引数になります。だから '$ {ANSARGS [@]:1}'は '--extra-vars'、' user = hostname.biz'、 'command = hostname'の3つの単語に展開されます。私はあなたが実際に望んでいるものではないと思います。 –