Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将参数传递给Ansible';动态库存_Python_Bash_Ansible Playbook - Fatal编程技术网

Python 将参数传递给Ansible';动态库存

Python 将参数传递给Ansible';动态库存,python,bash,ansible-playbook,Python,Bash,Ansible Playbook,我正在使用Ansible配置一些虚拟机。我编写了一个Python脚本,用于从REST服务检索主机。 我的虚拟机是在“环境”中组织的。例如,我有“测试”、“红色”和“集成”环境,每个环境都有一个子集VM 此Python脚本需要自定义--environment参数来检索所需环境的主机 我遇到的问题是将传递给ansible playbook命令。 实际上,下面的命令不起作用 ansible-playbook thePlaybook.yml -i ./inventory/FromREST.py --en

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

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

我遇到的问题是将
传递给
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
脚本接受以下参数:

  • --list
    参数或
    --host
    参数,根据
  • --environment
    参数,我将其添加到Ansible管理不同环境所需的参数中

使用
$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
返回集群
cl_01
JSON
库存


我知道不是很漂亮,但很管用。

我也有类似的问题,我没有找到任何解决方案,所以我只是修改了我的动态清单,以便在用户未通过
--env

在您的库存中捕获环境变量,如下所示:

import os
print os.environ['ENV']
将环境变量传递给ansible

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