jenkins的逗号分隔列表上的ansible循环

jenkins的逗号分隔列表上的ansible循环,jenkins,ansible,Jenkins,Ansible,我有一个由Jenkins注入的环境变量,比如: CUSTOMERS="foo,bar" 现在我需要循环这些值。 是否有任何方法可以访问这些值作为ansible中的项目 欢迎提供包括如何解决此问题的其他建议在内的任何帮助。您可以将环境变量传递给ansible with--extra vars,但这只是解决方案的一部分,您需要将字符串值转换为ansible能够理解的数据格式 一个简单的选项是编写一个简单的Python(或您的首选语言)脚本,将环境变量转换为JSON列表,并使用--extra-var

我有一个由Jenkins注入的环境变量,比如:

CUSTOMERS="foo,bar"
现在我需要循环这些值。 是否有任何方法可以访问这些值作为
ansible
中的项目


欢迎提供包括如何解决此问题的其他建议在内的任何帮助。

您可以将环境变量传递给ansible with
--extra vars
,但这只是解决方案的一部分,您需要将字符串值转换为ansible能够理解的数据格式

一个简单的选项是编写一个简单的Python(或您的首选语言)脚本,将环境变量转换为JSON列表,并使用
--extra-vars“@customers.JSON”
将JSON文件作为额外变量传递给ansible(ansible 1.3中提供了JSON文件输入),请参阅

上面的脚本可以进一步推广(或根据您的情况定制)。我必须让您在构建环境中将各个部分连接起来


或者,如前所述,您可以在ansible中定义自定义筛选器来处理输入值。您可以创建一个过滤器,将变量值转换为列表,然后在引用变量时使用playbook中的过滤器(可能是通过
--extra vars
传入的)。

生成json文件的脚本工作得非常好。非常感谢。
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)