iptables.j2
いくつかのコア ルール (SSH 接続の許可など) を含むテンプレート ファイルがあります。ただし、ノードの役割によっては、そのテンプレートには、変数を使用して管理できない追加のルールが含まれます。たとえば、mongo ノードはポート 27000 を開く必要があり、nginx ノードはポート 80 & 443 などを開く必要があります。
問題を解決できる基本テンプレートへの追加コンテンツの条件付きインクルードの例はありますか?
iptables.j2
いくつかのコア ルール (SSH 接続の許可など) を含むテンプレート ファイルがあります。ただし、ノードの役割によっては、そのテンプレートには、変数を使用して管理できない追加のルールが含まれます。たとえば、mongo ノードはポート 27000 を開く必要があり、nginx ノードはポート 80 & 443 などを開く必要があります。
問題を解決できる基本テンプレートへの追加コンテンツの条件付きインクルードの例はありますか?
あなたの iptables.j2 ファイルはこのように見えるでしょうか?
# default SSH rules, etc.
{% if inventory_hostname in groups['nginx'] %}
# rules for nginx servers
{% endif %}
{% if inventory_hostname in groups['mongo'] %}
# rules for mongo servers
{% endif %}
もちろん、これはホストが適切なグループに属しているかどうかによって異なります。
inventory_hostname
desired で可変かどうかを確認できますgroup
。例えば:
---
- hosts: all
gather_facts: no
tasks:
- name: Custom iptables
template: src=iptables.j2 dest="./table-{{ inventory_hostname }}"
delegate_to: 127.0.0.1
[all-hosts]
ansible ansible_ssh_host=192.168.42.2
webapp ansible_ssh_host=192.168.42.10
postgresql ansible_ssh_host=192.168.42.20
[ansible-host]
ansible
[webapp-hosts]
webapp
[postgresql-hosts]
postgresql
次に、テンプレートは次のようになります。
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
{% if inventory_hostname in groups['webapp-hosts'] %}
Open 443 port
{% endif %}
{% if inventory_hostname in groups['postgresql-hosts'] %}
Open 5432 port
{% endif %}
上記の Playbook を実行すると、それぞれが異なる 3 つのファイルが生成されます。