使用SaltStack自动生成haproxy.cfg

时间:2015-11-22 05:12:38

标签: python jinja2 haproxy salt-stack

我正在使用salt 2015.8.1(Beryllium)并使用SaltStacks文档,启用haproxy.cfg autogenertion。但是我希望在配置文件中有A侧和B侧布局。我试图使用以下方法完成此任务:

...
// where x is 10.00 and y is 10.25
...
unsigned char carryOver = 0;
int totalLen = x._numbers.size();
for (size_t i = totalLen; i > 1 ; --i )
{
    unsigned char sum = x._numbers[i-1] + y._numbers[i-1] + carryOver;
    carryOver = 0;
    if (sum > _base)
    {
     sum -= _base;
     carryOver = 1;
    }
    numbers.insert( number.begin(), sum);
}

// any left over?
if (carryOver > 0)
{
  numbers.insert( number.begin(), 1 );
}

// decimal pos is the same for this number as x and y

...

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

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

此处的文件可以在这里找到:

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

再次,先谢谢。

*编辑* 我想声明我有以下工作没有问题,因此我的数据正在拉动应有的方式:

    # 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 %}

1 个答案:

答案 0 :(得分:1)

您可以在循环中使用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。