【问题标题】:Use Jinja2 template with ini host file使用带有 ini 主机文件的 Jinja2 模板
【发布时间】:2021-04-12 13:52:03
【问题描述】:

我正在创建一个 ansible 角色,它允许用户列出要创建和 ipset 的所需组

我的第一个想法是使用 ini 查找插件,但这根本不起作用。我需要做一些正则表达式,在主机行中有一些变量,我得到了所有的模板,但我没有弄清楚的是下面。

给定一个.ini 文件和一个组列表,我想制作一个可以打印出组中所有主机行的模板。我似乎找不到在匹配变量之后打印行的方法,直到出现空白行。

例如inventory.ini和group_1和group_3

[group_1]
host1 ansible_host=X.X.X.X
host2 ansible_host=X.X.X.X
host3 ansible_host=X.X.X.X

[group_2]
host4 ansible_host=X.X.X.X
host5 ansible_host=X.X.X.X
host6 ansible_host=X.X.X.X

[group_3]
host7 ansible_host=X.X.X.X
host8 ansible_host=X.X.X.X
host9 ansible_host=X.X.X.X

将模板用于:

host1 ansible_host=X.X.X.X
host2 ansible_host=X.X.X.X
host3 ansible_host=X.X.X.
host7 ansible_host=X.X.X.X
host8 ansible_host=X.X.X.X
host9 ansible_host=X.X.X.X

目前我使用文件查找插件将我们的库存文件添加到一个变量中,并在模板文件中使用该变量。下面的示例适用于清单文件中的所有主机。

{% for line in inventory.split('\n') %}
{% if 'ipv4_public=' in line %}
add {{ ipset_name }} {{  line | regex_search( '(?<=ipv4_public=).[^ ]*' ) }}
{% if 'ansible_host=' in line %}
add {{ ipset_name }} {{  line | regex_search( '(?<=ansible_host=).[^ ]*' ) }}
{% endif %}
{% endfor %}

【问题讨论】:

  • 像{% for host in groups['group1'] %} 这样遍历库存的组名要简单得多。你试过了吗?
  • 要添加到 @seshadri_c :遍历您的库存并使用 hostvars dictionnary 从所需主机获取变量。
  • 我的团队告诉我,在运行 playbook 时循环主机变量需要很长时间。所以我正在使用正则表达式来剪掉运行速度更快的 ansible_host IP
  • 我建议您自己尝试一下,并确定您的团队所说的是否有意义。

标签: ansible jinja2 ini


【解决方案1】:

按照我的评论,简而言之,只是为了让你走上正轨:

编辑:我想当然地认为你会提供一个host_groups var,这将是你想要工作的所有组的列表,例如

host_groups:
  - group1
  - group3

还有(例如,未经测试的)模板:

{% for host in (host_groups | map('extract', groups) | flatten | unique) %}
{% if hostvars[host].ipv4_public is defined %}
add {{ ipset_name }} {{ hostvars[host].ipv4_public }}
{% endif %}
add {{ ipset_name }} {{ hostvars[host].ansible_host }}

请注意,如果您的清单中未明确定义 ansible_host,则最后一行将返回 inventory_name。适应您的确切需求。

【讨论】:

  • 问题是我不知道将来会使用哪些组,所以我有一个变量“host_groups”,它是可用于制作 ipset 的组名列表。它可以是 group_1,或者 group_2 和 group_45。
  • 这通常不应该出现在不稳定的评论中,而是出现在您问题的edit 中,MCVE 显示您正在尝试使用代码而不是试图解释的文字它。更新了答案以适应这一新要求。
猜你喜欢
  • 2020-10-25
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多