我想使用Ansible配置UFW以允许从IP地址列表连接到端口80:
tasks:
- name: Allow port 80 HTTP
action: shell ufw allow from {{item}} to any 80/tcp
with_items: allowed_ips
IP地址列表作为哈希存储在YAML文件中,在我的playbook的vars/
目录中:
---
allowed_ips:
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
我正在使用with_items
将IP地址拉入命令,但是当Ansible运行playbook时,它会连接IP地址,在每个IP之间插入一个空格:
ufw allow from xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx to any 80/tcp
ufw
不接受此语法,因此我想为每个IP地址运行ufw
一次。我怎么能这样做?
答案 0 :(得分:5)
Ansible 1.6有一个管理ufw
的模块。 http://docs.ansible.com/ufw_module.html它支持您尝试实现的列表。
ufw: rule=allow src={{ item }} port=80 proto=tcp
with_items:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
或者,您可以尝试https://galaxy.ansible.com ufw
,其中有一些可以使用的{{1}}角色,其中一些也支持IP列表。
答案 1 :(得分:2)
Ansible行为正确,因为当前allowed_ips
不是列表而是单个变量。将变量设为YAML列表:
---
allowed_ips:
- xxx.xxx.xxx.xxx
- xxx.xxx.xxx.xxx
现在,该动作的执行次数与allowed_ips
列表中的项目一样多。