我在 Linux 机器上使用 SaltStack,想要定义节点组。我了解复合匹配和 minion 列表等。
这正是我需要的,而且它是这样工作的,但是在有大量服务器的情况下很难维护
nodegroups:
group1: 'srv1,srv2,srv3,srv4,dev1,dev2,stage1,stage2'
为了简单起见,我尝试这样定义它们:
nodegroups:
group1: 'srv*,dev*,stage*'
但我找不到正确的方法。有什么想法吗?
-=编辑=-
我试过丹·加思韦特的解决方案,但不起作用。我甚至在我的私人开发服务器上尝试过,该服务器安装了 Salt 版本 2014.1.4。这就是我得到的结果。
尝试正常列表(完整主机名)
fmohr@salt-master:~$ sudo salt -v -C 'L@dns01,apache' test.ping
Executing job with jid 20140708072832751715
-------------------------------------------
dns01:
True
apache:
True
带有一个通配符
fmohr@salt-master:~$ sudo salt -v -C 'L@dns*,apache' test.ping
Executing job with jid 20140708072837257646
-------------------------------------------
apache:
True
使用所有通配符
fmohr@salt-master:~$ sudo salt -v -C 'L@dns*' test.ping
No minions matched the target. No command was sent, no jid was assigned.
fmohr@salt-master:~$ sudo salt -v -C 'L@dns*,apach*' test.ping
No minions matched the target. No command was sent, no jid was assigned.
我认为您不能在列表中使用通配符,但我不知道如何让 salt 针对目标 dns* 和 apach*(作为示例)。
答案1
您应该使用或来连接它们,如下所示:
nodegroups:
group1: 'srv* or dev* or stage*'
salt -C 'srv* or dev* or stage*' test.ping
在我的计算机上测试过。
答案2
节点组使用如下定义的复合匹配:
http://docs.saltstack.com/en/latest/topics/targeting/compound.html
你的答案是:
nodegroups:
group1: L@srv*,dev*,stage*
请记住,您还可以使用谷物和/或柱子通过复合匹配器来瞄准小兵。
答案3
我现在用谷物做了。我只是加了
grains:
group: groupname
在我的 minion 上的 /etc/salt/minion.d/minion.conf 中。这并不是我真正想要的,因为这定义了 minion 在 minion 端获得哪些角色,从安全角度来看这不是最佳选择(此外,在 master 上定义所有组会更方便。)
积极的一面是,我可以将不属于任何组的服务器的粒度设置为未定义,这样就更容易获取所有未定义服务器的列表。
谢谢你的帮助。我会让它保持未解决状态,因为它并没有真正解决(如果有人知道如何在主服务器上执行此操作,请告诉我)