【问题标题】:ansible loop over comma separated list from jenkins来自jenkins的逗号分隔列表的ansible循环
【发布时间】:2014-05-31 21:20:31
【问题描述】:

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

CUSTOMERS="foo,bar"

现在我需要遍历这些值。 有没有办法在ansible 中访问这些值作为项目?

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

【问题讨论】:

    标签: jenkins ansible


    【解决方案1】:

    您可以使用--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 传入)。

    【讨论】:

    • 生成 json 文件的脚本运行良好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2012-04-17
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多