Ansible:如何从查找文件创建变量

时间:2017-11-03 12:45:42

标签: ansible jinja2

我们有许多csv文件,包含各种配置的查找数据。

#eg of lookup file csv
hostname,ip,country,type,port
atlanta1,1.2.3.4,US,ui,8080
toronto1,1.2.3.5,CA,ui,8080
toronto2,1.2.3.9,CA,db,8000
another3,1.2.3.6,UK,db,8000

我们需要填充复杂的&然后需要在其他剧本中使用的连接变量

# Eg. concatenated variables  http:{{hostname}}:{{port}} from above lookup csv file
ui_cluster = http://atlanta1:8080;http://toronto1:8080
db_cluster = http://atlanta1:8000;http://toronto1:8000

..最后,连续变量用于最终的剧本

#configurations in final customer template
my_build_script_UIcluster= {{ui_cluster}}
my_build_script_DBcluster= {{db_cluster}}

我想使用从上面查找创建的这些变量在模板中使用。如何做到这一点或最佳方法?

2 个答案:

答案 0 :(得分:2)

include_csv模块https://github.com/mkouhei/ansible-role-includecsv听起来就像您正在寻找的那样。

答案 1 :(得分:1)

您可以使用 jinja2 csv lookup filter

  

csvfile查找以CSV格式读取文件的内容   (逗号分隔值)格式。查找查找其中的行   第一列匹配keyname,并返回第二列中的值   列,除非指定了不同的列。

     

(来自官方文档)

查找过滤器返回一个数组,其中每一行由键值对象表示。您可以使用 jinja2 map filter 创建一个键值的列表:

  

对一系列对象应用过滤器或查找属性。   这在处理对象列表时非常有用,但您确实是这样   只对它的某个值感兴趣。

     

(来自官方文档)

这应该是你需要的一切,而不是复制和粘贴答案。