Bash脚本没有将正确的参数传递给ansible-playbook

时间:2016-05-06 20:25:10

标签: bash ansible-playbook

play -e jsmith hostname --extra-vars "user=hostname.biz command=hostname"

我正在尝试运行上面的bash脚本,它是ansible-playbook命令的包装器,它也能够运行外部命令来生成动态库存文件(我们没有使用标准的动态库存模块)。但问题似乎来自于bash。这里的剧本是"主机名"我一直存在的错误是"错误! playbook:找不到command = hostname"。这是我正在使用的脚本,我在收到-e选项后尝试将参数存储到脚本中。

编辑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显示要传递给ansible-playbook的正确参数,但set-x显示错误的引用,并且使用以下命令调用此脚本时命令失败:

play -e jsmith -p status --extra-vars '"script=start hello=world"'

$TO_DISPLAY显示--extra-vars "script=start hello=world"

设置-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**"'**

1 个答案:

答案 0 :(得分:0)

首先凝聚并随后驱散所有参数同时希望保留其原始分配是很困难的。更好地将参数存储到单独的数组元素中,从而保持嵌入的空格(如user=hostname.biz command=hostname中所示)。取代

      ANSARGS+="###$1"

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

并删除

ANSARGSARR=($ANSARGS)

并替换

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

    ansible-playbook ${ANSIBLE_OPTS} $PLAYBOOKFILE "${ANSARGSARR[@]}"

- 所以你可以调用你的脚本e。 G。使用命令行

play -e jsmith -p hostname --extra-vars "user=hostname.biz command=hostname"