2016-05-06 13 views
0
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**"'**

+2

'' ansible-playbook'の呼び出しの前に 'set -x'を置くと、Bashは正確な呼び出しを表示します。 – dg99

+0

@EtanReisnerは、正当な無能なプレイブックの構文を何かすることを強制しません。 – Zee

+1

'user = hostname.biz command = hostname'を' ANSARGS'に押し込み、それを分割するとスペース* 2つの引数になります。だから '$ {ANSARGS [@]:1}'は '--extra-vars'、' user = hostname.biz'、 'command = hostname'の3つの単語に展開されます。私はあなたが実際に望んでいるものではないと思います。 –

答えて

0

最初にすべてのパラメータを凝集し、後で元の配分を保持したいと同時に、分散させるのは難しいです。配列要素を分離するためにパラメータを格納する方が良いため、埋め込みブランクが維持されます(user=hostname.biz command=hostnameのように)。

 ANSARGSARR[${#ANSARGSARR[*]}]=$1 

 ANSARGS+="###$1" 

交換し

ANSARGSARR=($ANSARGS) 

を取り外して交換

ansible-playbook ${ANSIBLE_OPTS} $PLAYBOOKFILE ${TO_DISPLAY} 

- スクリプトを呼び出すことができます。 g。コマンドラインで

play -e jsmith -p hostname --extra-vars "user=hostname.biz command=hostname" 
関連する問題