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

2024-05-21 01:57:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Ansible配置一些虚拟机。我编写了一个Python脚本,它从REST服务检索主机。
我的虚拟机是在“环境”中组织的。例如,我有“Test”、“Red”和“Integration”环境,每个环境都有一个子集vm。

此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所需的参数中,以管理不同的环境

Tags: pytest命令env脚本rest参数environment
2条回答

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

在库存中捕获env var,如下所示:

import os print os.environ['ENV']

将env var传递给ansibe

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

使用$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_01JSON库存。

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

相关问题 更多 >