我使用geerlingguy.firewall ansible galaxy角色添加iptables规则。在那里有一个firewall_additional_rules列表变量,我在一些脚本中添加允许从某些ips,我想提供另一个列表变量
white_listed_ips:
- 1.1.1.1
- 1.1.1.2
等
我希望能够通过循环生成white_listed_ips列表中的firewall_additional_rules列表。但是我找不到任何办法。你可以循环遍历变量并添加到yaml中的数组吗?
所以我想在var文件中做这样的事情(我知道这不起作用,放纵我)
firewall_additional_rules:
{% for ip in white_listed_ips %}
- iptables -A INPUT -p tcp -s {{ ip }} --dport ssh -j ACCEPT
- iptables -A INPUT -p tcp -s {{ ip }} --dport 80 -j ACCEPT
{% endfor %}
这是进入角色的jinja2模板,你可以在这里看到: https://github.com/geerlingguy/ansible-role-firewall/blob/master/templates/firewall.bash.j2
答案 0 :(得分:1)
Ansible playbooks,vars文件等不是jinja2模板,所以正如你所说的那样jinja2构造像{% for ... %}
一样在其中工作。但话说回来,将jinja2代码简单地移动到应该属于它的模板中是一件简单的事情。
如果您查看firewall.bash.j2中的firewall_additional_rules
,则仅在此处引用:
# Additional custom rules.
{% for rule in firewall_additional_rules %}
{{ rule }}
{% endfor %}
你需要做的就是改变它,或者在它之前或之后添加另一个包含你已经写过的确切代码的for循环:
{% for ip in white_listed_ips %}
- iptables -A INPUT -p tcp -s {{ ip }} --dport ssh -j ACCEPT
- iptables -A INPUT -p tcp -s {{ ip }} --dport 80 -j ACCEPT
{% endfor %}