首页 > 解决方案 > 使用 ansible 打乱 dns 服务器列表

问题描述

我继承了这段模板代码:

supersede domain-name-servers
      {% set comma = joiner(", ") -%}
      {%- for host in groups['consul_server_true'] -%}
        {%- if host in groups[dc_grp] -%}
          {{ comma() }}{{ hostvars[host]['private_ip_address']  }}
        {%- endif -%}
      {%- endfor -%};

它做它应该做的,生成一条supersede domain-name-servers ip,ip,ip;线。

我们想要做的是把 a| shuffle(seed=inventory_ansible_hostname)放在那里,这样顺序就变得可以预见地随机了。我的模板 foo 不太适合,因为我设法做的是自己打乱 ip 地址的数字:(。

谁能告诉我如何正确地对事物进行分组并将它们喂给洗牌,以便元素的顺序被洗牌,而不是元素本身?

标签: ansiblejinja2

解决方案


我不知道您将过滤器放在模板中的哪个位置,但如果您在循环中随机播放服务器的输入列表,它应该按预期随机化:

supersede domain-name-servers
      {% set comma = joiner(", ") -%}
      {%- for host in groups['consul_server_true'] | shuffle(seed=inventory_hostname) -%}
        {%- if host in groups[dc_grp] -%}
          {{ comma() }}{{ hostvars[host]['private_ip_address']  }}
        {%- endif -%}
      {%- endfor -%};

推荐阅读