将参数传递给Ansible的动态广告资源

时间:2015-11-25 15:35:40

标签: python bash ansible-playbook

我正在使用Ansible配置一些虚拟机。我写了一个Python脚本,它从REST服务中检索主机 我的虚拟机在“环境”中组织。例如,我有“测试”,“红色”和“集成”环境,每个环境都有一部分虚拟机。

此Python脚本需要自定义--environment <ENV>参数来检索所需环境的主机。

我遇到的问题是将<ENV>传递给ansible-playbook命令。 实际上以下命令不起作用

ansible-playbook thePlaybook.yml -i ./inventory/FromREST.py --environment Test

我收到错误:

Usage: ansible-playbook playbook.yml

ansible-playbook: error: no such option: --environment

将变量传递给动态库存脚本的正确语法是什么?

更新

为了更好地解释,FromREST.py脚本接受以下参数:

  • 根据Dynamic Inventory guidelines
  • --list参数或--host <HOST>参数
  • --environment <ENVIRONMENT>参数,我添加到Ansible管理不同环境所需的参数

2 个答案:

答案 0 :(得分:4)

我有类似的问题,我没有找到任何解决方案,所以我只是修改了我的动态库存以使用OS环境变量,如果用户没有通过--env

在您的广告资源中捕获env var,如下所示:

import os print os.environ['ENV']

将env var传递给ansible

export ENV=dev ansible -i my_custom_inv.py all --list-host

答案 1 :(得分:3)

使用$PPID从流程快照中解析-e / --extra-vars的解决方法。

ansible-playbook -i inventory.sh deploy.yml -e cluster=cl_01

inventory.sh档案

#!/bin/bash
if [[ $1 != "--list" ]]; then exit 1; fi
extra_var=`ps -f -p $PPID | grep ansible-playbook | grep -oh "\w*=\w*" | grep cluster | cut -f2 -d=`
./inventory.py --cluster $extra_var

inventory.py会为群集JSON返回cl_01广告资源。

我不知道,但是很有效。