我尝试使用多个角色组装适合iptables-restore的iptables文件:
setup-iptables
,它创建一个包含一些常用规则的初始文件(即允许SSH)。该文件是从一个大模板创建的。setup-httpd
为端口80和443添加规则)。 Playbooks首先应导入角色setup-iptables
,然后导入配置主机所需的较小角色。
我的问题是,每次运行playbook时都会重新创建此文件。如果游戏中断并且应用了不完整的规则,这可能是危险的。它也很丑陋,因为ansible会显示对主机的更改,即使生成的文件与其原始状态相同。
简单地使用初学者的lineinfile
和blockinfile
不是一种选择,因为iptable规则高度依赖于规则的排序。初始模板是必需的,因为它提供了许多标记'。然后,后续角色的lineinfile
语句使用这些标记来正确定位其规则。
我目前的解决方法是在本地组合文件,并在游戏结束时刷新'它到远程主机。
有更好的方法吗?什么是' ansible方式'这样做?
答案 0 :(得分:1)
您可以检查文件是否存在,如果存在,请跳过重新创建...
- name: check if the file exists
stat:
path: /etc/sysconfig/iptables #Example path
register: iptables_file
- name: Create the file if it doesnt exists
copy:
content: "your initial rules"
dest: /etc/sysconfig/iptables
when: iptables_file.stat.exists == False