【问题标题】:Ansible jinja2 filter ipaddressAnsible jinja2 过滤 ipaddress
【发布时间】:2017-01-20 17:55:50
【问题描述】:

我有 3 台服务器 A、B、C。当我在 j2 模板中运行以下内容时,它会拉取所有 3 台服务器。

如何忽略运行模板的服务器?

例如,如果服务器 A 运行,它应该只获取服务器 B 和 C。

"retry_join": ["
                {% for host in groups['servers']%}
                  {{ hostvars[host]['ansible_ssh_host'] }}
                  {% if not loop.last %}, {% endif %}
                {% endfor %}
              "]

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

    从您的服务器列表中排除 inventory_hostname

    {% for host in groups['servers'] | difference([inventory_hostname]) %}
    

    【讨论】:

    • 哦,不错!这是一个非常巧妙的解决方案!
    • 我正在使用动态清单脚本拉取服务器列表。使用差异([inventory_hostname])时,列表中没有任何变化。 "retry_join": ["A, B,C"]
    • 听起来很奇怪...调试 groups['servers']inventory_hostname 以查看当前主机是否真的在服务器组中。
    【解决方案2】:

    您可以尝试这样的检查来验证您的循环变量不是当前主机:

    {% if host != inventory_hostname %}
      {{ hostvars[host]['ansible_ssh_host'] }}
    {% endif %}
    

    【讨论】:

    • 是的 :) 删除评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 2017-12-11
    • 2021-07-19
    相关资源
    最近更新 更多