从jenkins以逗号分隔列表的ansible循环

时间:2014-04-16 19:58:19

标签: jenkins ansible

我有Jenkins注入的环境变量,如:

CUSTOMERS="foo,bar"

现在我需要循环遍历这些值。 有没有办法在ansible

中访问这些值AS项目

欢迎任何帮助,包括其他建议如何解决这个问题。

1 个答案:

答案 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传入)。