【发布时间】:2014-05-31 21:20:31
【问题描述】:
我有一个由Jenkins 注入的环境变量,例如:
CUSTOMERS="foo,bar"
现在我需要遍历这些值。
有没有办法在ansible 中访问这些值作为项目?
欢迎任何帮助,包括如何解决此问题的其他建议。
【问题讨论】:
我有一个由Jenkins 注入的环境变量,例如:
CUSTOMERS="foo,bar"
现在我需要遍历这些值。
有没有办法在ansible 中访问这些值作为项目?
欢迎任何帮助,包括如何解决此问题的其他建议。
【问题讨论】:
您可以使用--extra-vars 将环境变量传递给ansible,但这只是解决方案的一部分,您需要将字符串值转换为ansible 可以理解的数据格式。
一个简单的选择是编写一个简单的 Python(或您的首选语言)脚本来将环境变量转换为 JSON 列表,并将 JSON 文件作为带有 --extra-vars "@customers.json" 的额外变量传递给 ansible(JSON 文件输入在 ansible 中可用1.3),见Ansible Variable documentation。
import sys
import os
import json
DEFAULT_VAR="CUSTOMERS"
def var_to_json(var_name, list_sep = ','):
var_dict = {var_name: os.environ[var_name].split(list_sep)}
return json.dumps(var_dict)
var_name=DEFAULT_VAR
if len(sys.argv) > 1:
var_name = sys.argv[1]
print var_to_json(var_name)
上面的脚本可以进一步推广(或根据您的情况定制)。我将不得不将它留给您,以便在您的构建环境中将各个部分连接在一起。
或者,正如this previous answer 解释的那样,您可以在 ansible 中定义一个自定义过滤器来处理输入值。您可以创建一个将变量值转换为列表的过滤器,然后在引用变量时在您的剧本中使用该过滤器(可能通过--extra-vars 传入)。
【讨论】: