使用 SaltStack 自动生成 haproxy.cfg

Autogenerate haproxy.cfg using SaltStack

我正在使用 salt 2015.8.1 (Beryllium) 并使用 SaltStacks 文档,启用 haproxy.cfg 自动生成。但是我想在我的配置文件中有 A 面和 B 面类型的布局。我尝试使用以下方法完成此操作:

    # Side A
{% for server, addrs in salt['mine.get']('roles:docker', 'network.ip_addrs', expr_form='grain').items() %}
    {% if '*web1*' in server %}
    server {{ server }} {{ addrs[0] }}:443 check inter 2000 rise 2 fall 5
    {% endif %}
{% endfor %}

    # Side B
{% for server, addrs in salt['mine.get']('roles:docker', 'network.ip_addrs', expr_form='grain').items() %}
    {% if '*web2*' in server %}
    server {{ server }} {{ addrs[0] }}:443 check inter 2000 rise 2 fall 5
    {% endif %}
{% endfor %}

问题是,虽然 运行 并完成了它实际上并没有生成任何东西。我环顾四周并在 IRC 中询问,但已经找到了可靠的解决方案。如果有人能指出我正确的方向,我将永远感激不已。完整的 haproxy.cfg 可以在这个要点中找到:

https://gist.github.com/beardedeagle/8b19a34f332ed26ac859

可以在此处找到从中提取的文档:

https://docs.saltstack.com/en/latest/topics/mine/

再次感谢。

* 编辑 * 我想声明我有以下工作没有问题所以我的数据正在按照它应该的方式进行:

{% for server, addrs in salt['mine.get']('roles:docker', 'network.ip_addrs', expr_form='grain').items() %}
    server {{ server }} {{ addrs[0] }}:443 check inter 2000 rise 2 fall 5
{% endfor %}

您可以在循环中使用 compound matching,因此如果您没有其他特定粒度来分隔 web1/web2,您可以尝试

{% for server, addrs in salt['mine.get']('G@roles:docker' and L@web1*.domain.com', 'network.ip_addrs', expr_form='compound').items() %}
server {{ server }} {{ addrs[0] }}:443 check inter 2000 rise 2 fall 5
{% endfor %}

web2 相同。