改进了 saltstack 中的缩放方式
Improved way of scaling in saltstack
我对 Jinja2
模板有疑问,在编写 state
或 salt
[我的确切的情况是指尝试一个接一个地写一个机器列表,在一个列表中,而不是在一个很长的行中。
我想说的是我想达到的目的:
nodegroups:
- group: 'L@adsdasdadas' +
'dasdasdasdas'
.............->imagine 10.000 names coming here
'adsasdasddsa'
与我现在必须做的方法相比:
nodegroups:
- group: 'L@adsdasdadas,dasdsadasdsa,dasdsadasdsa,......,asdqwe'
有更好的方法吗?有没有更好的方法来处理数千台机器?
你可以说 grains
,我考虑了一下,但我想知道是否有更好更优雅的方法。
任何想法或意见都会对我有很大帮助
[编辑1]:
我写了一个脚本,它获取主机名列表并将它们添加到节点组中的主配置文件 section.For 现在它可能工作
数据源的选择
我会推荐targeting with pillars because they are managed centrally from Master = convenient, rather than static custom grains (which are configured distributively on each Minion) = inconvenient - see comparison summary here。
配置文件的限制
nodegroups
是在 Salt 配置文件 /etc/salt/master
中指定的,它不是 Jinja 模板(它具有纯 YAML 格式)。因此,您无法选择 use Jinja to join 带有字符串列表的外部输入。
可能的解决方案
为什么还要提到加入?您可以立即将 "breaking a one line string over multiple lines" 的问题转化为使用列表的解决方案 - 无需中断(如果您需要 "one line string" 在某个地方,加入列表项很容易)。
换句话说,您可以通过 pillar 定义 nodegroups
(避免像您的示例中那样使用长字符串)。反过来,支柱 是由 Jinja 渲染的。因此,使用在某处定义的相同 Minion 列表,您可以通过 Jinja 在支柱中生成派生产品(无论是连接它们的字符串还是按原样列出)。有一个技巧允许 reusing the same external data in multiple pillars files.
首先感谢uvsmtid的精彩idea.Sorry也造成了混乱
所以,我所做的是用每个 minion 的名字创建一个支柱 [这恰好是它的 id] 然后在一个状态下我所做的是将该列表中的值与 minion 的实际 id 进行比较
{%for item in salt['pillar.get']('info') %}
{%if grains['id'] == item %}
something:
cmd.run:
- name: touch something
{%endif%}
{%endfor%}
我希望这个解决方案能像帮助我一样帮助别人
我对 Jinja2
模板有疑问,在编写 state
或 salt
[我的确切的情况是指尝试一个接一个地写一个机器列表,在一个列表中,而不是在一个很长的行中。
我想说的是我想达到的目的:
nodegroups:
- group: 'L@adsdasdadas' +
'dasdasdasdas'
.............->imagine 10.000 names coming here
'adsasdasddsa'
与我现在必须做的方法相比:
nodegroups:
- group: 'L@adsdasdadas,dasdsadasdsa,dasdsadasdsa,......,asdqwe'
有更好的方法吗?有没有更好的方法来处理数千台机器?
你可以说 grains
,我考虑了一下,但我想知道是否有更好更优雅的方法。
任何想法或意见都会对我有很大帮助
[编辑1]: 我写了一个脚本,它获取主机名列表并将它们添加到节点组中的主配置文件 section.For 现在它可能工作
数据源的选择
我会推荐targeting with pillars because they are managed centrally from Master = convenient, rather than static custom grains (which are configured distributively on each Minion) = inconvenient - see comparison summary here。
配置文件的限制
nodegroups
是在 Salt 配置文件 /etc/salt/master
中指定的,它不是 Jinja 模板(它具有纯 YAML 格式)。因此,您无法选择 use Jinja to join 带有字符串列表的外部输入。
可能的解决方案
为什么还要提到加入?您可以立即将 "breaking a one line string over multiple lines" 的问题转化为使用列表的解决方案 - 无需中断(如果您需要 "one line string" 在某个地方,加入列表项很容易)。
换句话说,您可以通过 pillar 定义 nodegroups
(避免像您的示例中那样使用长字符串)。反过来,支柱 是由 Jinja 渲染的。因此,使用在某处定义的相同 Minion 列表,您可以通过 Jinja 在支柱中生成派生产品(无论是连接它们的字符串还是按原样列出)。有一个技巧允许 reusing the same external data in multiple pillars files.
首先感谢uvsmtid的精彩idea.Sorry也造成了混乱
所以,我所做的是用每个 minion 的名字创建一个支柱 [这恰好是它的 id] 然后在一个状态下我所做的是将该列表中的值与 minion 的实际 id 进行比较
{%for item in salt['pillar.get']('info') %}
{%if grains['id'] == item %}
something:
cmd.run:
- name: touch something
{%endif%}
{%endfor%}
我希望这个解决方案能像帮助我一样帮助别人