如何将变量从shell传递给Ansible playbooks

时间:2015-06-26 10:56:51

标签: shell ansible ansible-playbook

我有一个deploy.sh脚本,我调用它来触发使用ansible的部署任务。在简化形式中,这是由deploy.sh

触发的部署命令

DEPLOY_CMD="ansible-playbook -i hosts/$1 deploy.yml --extra-vars="site=$2 theme=$3""

这是任务的一个片段:

project_pre_build_commands_local:
   - path: "{{ project.local_path }}/web/app/themes/{{ theme }}"
     cmd: npm install
   - path: "{{ project.local_path }}/web/app/themes/{{ theme }}"
     cmd: bower install
   - path: "{{ project.local_path }}/web/app/themes/{{ theme }}"
     cmd: gulp --production

不幸的是,shell出错了:

  

msg:无法更改到目录   “/家/ ltarasiewicz的/ dev /基岩堆栈/基岩ansible / {#   project.local_path#} / web / app / themes / {#theme#}':path确实如此   不存在

我传递给theme的{​​{1}}变量是'cpkg'。指定的目录存在。更重要的是,如果我定义路径,如: deploy.sh(摆脱- path: "{{ project.local_path }}/web/app/themes/cpkg"变量),一切顺利 - 过程完成且没有错误。

我真的很困惑。非常感谢您的建议。

1 个答案:

答案 0 :(得分:3)

DEPLOY_CMD中的引号存在问题。

当您在echo $DEPLOY_CMD脚本中deploy.sh时,您会看到类似这样的内容:

ansible-playbook -i hosts/ deploy.yml --extra-vars=site=

变量不包含您的参数。

要解决此问题,您可以改为使用单引号:

DEPLOY_CMD="ansible-playbook -i hosts/$1 deploy.yml --extra-vars='site=$2 theme=$3'"