0

iptables.j2いくつかのコア ルール (SSH 接続の許可など) を含むテンプレート ファイルがあります。ただし、ノードの役割によっては、そのテンプレートには、変数を使用して管理できない追加のルールが含まれます。たとえば、mongo ノードはポート 27000 を開く必要があり、nginx ノードはポート 80 & 443 などを開く必要があります。

問題を解決できる基本テンプレートへの追加コンテンツの条件付きインクルードの例はありますか?

4

2 に答える 2

3

あなたの 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 %}

もちろん、これはホストが適切なグループに属しているかどうかによって異なります。

于 2015-07-10T19:26:06.010 に答える
2

inventory_hostnamedesired で可変かどうかを確認できますgroup。例えば:

playbook.yml

---

- 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

次に、テンプレートは次のようになります。

iptables.j2

-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 つのファイルが生成されます。

于 2015-07-10T19:25:38.603 に答える