我有Jenkins
注入的环境变量,如:
CUSTOMERS="foo,bar"
现在我需要循环遍历这些值。
有没有办法在ansible
?
欢迎任何帮助,包括其他建议如何解决这个问题。
答案 0 :(得分:1)
您可以使用--extra-vars
将环境变量传递给ansible,但这只是解决方案的一部分,您需要将字符串值转换为ansible可理解的数据格式。
一个简单的选择是编写一个简单的Python(或您的首选语言)脚本,将环境变量转换为JSON列表,并将JSON文件作为额外的vars传递给ansible --extra-vars "@customers.json"
(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中定义自定义过滤器以处理输入值。您可以创建一个过滤器,将变量值转换为列表,然后在引用变量时使用playbook中的过滤器(可能通过--extra-vars
传入)。