将参数传递给Ansible的动态库存

gvd*_*vdm 7 python bash ansible-playbook

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

此Python脚本需要custom --environment <ENV>参数来检索所需环境的主机.

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

ansible-playbook thePlaybook.yml -i ./inventory/FromREST.py --environment Test
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Usage: ansible-playbook playbook.yml

ansible-playbook: error: no such option: --environment
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

  • 无论是--list参数或--host <HOST>参数,按照该动态清单指南
  • --environment <ENVIRONMENT> 参数,我添加到Ansible管理不同环境所需的参数

Rah*_*til 5

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

在您的清单中捕获 env var,如下所示:

import os
print os.environ['ENV']
Run Code Online (Sandbox Code Playgroud)

将 env var 传递给 ansible

export ENV=dev
ansible -i my_custom_inv.py all --list-host
Run Code Online (Sandbox Code Playgroud)


小智 3

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

ansible-playbook -i inventory.sh deploy.yml -e cluster=cl_01
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

inventory.py返回JSONcluster 的库存cl_01

我知道不漂亮,但是有效。