gpt4 book ai didi

jinja2 - 如何使用与 Salt State 文件中的grain 匹配的机器的 IP 地址

转载 作者:行者123 更新时间:2023-12-02 04:46:35 26 4
gpt4 key购买 nike

我正在创建一个添加 iptables 规则的公式/状态文件:

ipt_allow:
iptables.append:
- table: filter
- chain: INPUT
- jump: ACCEPT
- match: state
- connstate: 'NEW,ESTABLISHED'
- dport: 6666
- proto: tcp
- source: 'ip1, ip2, ip3, ...'

我不想在中对IP地址进行硬编码。 ip1ip2ip3 是与grain role:role1 匹配的 Minions 的 IP 地址。这样,如果我以后添加更多带有 role1 颗粒的 Minion,一旦我重新运行此状态文件,它们就会被添加到 iptables 规则中。我该怎么做?

最佳答案

明白了。这可以使用 salt 矿函数来完成。

  1. /srv/pillar/mines.sls:

    mine_functions:
    network.ip_addrs:
    - eth1

    这使得network.ip_addrs可供master和minions使用,特别是eth1接口(interface)。

  2. /srv/pillar/top.sls:

    base:
    '*':
    - mines

    这会将支柱(因此是地雷功能)应用于所有小兵。

  3. 现在您可以使用状态文件中的 mine.get 函数来调用该 mine 函数。这是我在我的案例中使用的:

    {% for server, addrs in salt['mine.get']('role:role1', 'network.ip_addrs', expr_form='grain').items() %}ipt_allow_{{ server }}:  iptables.append:    - table: filter    - chain: INPUT    - jump: ACCEPT    - match: state    - connstate: 'NEW,ESTABLISHED'    - dport: 6666    - proto: tcp    - source: {{ addrs[0] }}{% endfor %}

    地点:

    • salt['mine.get'] 调用 mine.get 函数,
    • ('role:role1', 'network.ip_addrs', expr_form='grain').items() 告诉函数匹配具有 role1 的 Minion role 的值是一个grain (expr_form='grain') 并获取其network.ip_addrs
    • 输出是匹配的minion id(我相信)和network.ip_addrs的结果,因此我们将其存储在serveraddrs中>.
    • for 循环每次使用 {{ server }} 中的值创建一个新的 ID 并替换 {{ addrs 中的 IP 地址[0] }}

有帮助的链接:

关于jinja2 - 如何使用与 Salt State 文件中的grain 匹配的机器的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com