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

Ansible:如何从查找文件创建变量,ansible,jinja2,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

我们有许多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}}
我想使用从上面的查找创建的变量来在模板中使用。如何做到这一点或最好的方法?

您可以使用

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

(来自官方文件)

查找筛选器返回一个数组,其中每行由键值对象表示。您可以使用创建一个键值列表:

对对象序列应用过滤器或查找属性。 这在处理对象列表时很有用,但实际上 只对它的某个价值感兴趣

(来自官方文件)


这应该是你所需要的一切,尽管不是一个复制粘贴的答案。

包含csv的
模块听起来像你正在寻找的。

请解释什么是“查找文件”作为一个开始。hi lookup只是一个csv文件,我在文章中举了一个例子。所以你只是用了一个名为“查找文件”的普通文件,对吗?可能会把读者(和搜索引擎的用户)和Ansible混淆,对吗?“从上面查找”并不是指实际的查找。很好的沟通技巧!希望得到一些技术上的答案,而不是交流技巧课。我将等待几天,等待其他有帮助的人。嗨,max,我已经完成了查找过滤器,如果我使用变量,它会工作。但我想在两者之间创建复杂变量,然后将这些复杂/串联变量用于最终模板。您可以使用
set\u fact
动态添加事实。Jinja2模板字符串可以在那里使用。如果你更新你的问题,让它包含到目前为止你所写的实际ansible代码,我可以试着找出一些答案。