我正在使用 geerlingguy.firewall ansible Galaxy 角色来添加 iptables 规则。其中有一个firewall_additional_rules列表变量,我在其中添加一些脚本以允许来自某些ip,我想为其提供另一个列表变量
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
最佳答案
Ansible playbook、vars 文件等不是 jinja2 模板,因此正如您所说,像 {% for ... %}
这样的 jinja2 结构在其中不起作用。但话虽如此,只需将 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 %}
关于loops - 使用循环添加到 yaml 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29700363/