我最近让我的 puppetmaster 和客户端启动并运行,并让客户端正确签名,然后请求并应用简单的更改,一切都很好。
我的机器数量在不断增加(>100 台)。它们的名称不一致(历史原因)。它们分为几个类别(可以这样理解:dataserver_type1、dataserver_type2、webserver_type1、webserver_type2....)。每周都会添加这些类型的机器的新实例。
我不明白(目前)或无法看到如何声明一个包含所需模块的“通用”节点(例如“dataserver_type1”),并在客户端 puppet.conf 中设置一些内容,说明“我是 dataserver_type1”,而无需使用主机名/FQDN
如果我将目录中的节点名称设置为(例如)“my-data-server-type1”——经过认证的主机名——它就会选择并运行。我知道您可以使用主机名模式,但正如我所说,我的服务器名称不一致,我无法更改它们。
当服务器不断增长时,必须编辑文件并手动为每台服务器添加节点,这似乎是不诚实的。
编辑:
深入挖掘,似乎角色可能是我想要的。但似乎仍然有一个元素,即主服务器包含特定命名服务器应执行的角色列表。也许我想问的是,客户端如何说“我想成为这个角色”,而服务器无需更新?
答案1
节点始终是集中定义的,无论是在你的清单中还是外部节点分类器(或两者)。
我想您可以整理一个允许客户指定其角色的 ENC...但为什么您要触摸每台计算机进行本地配置呢?
听起来你可能只需要对节点清单进行更好的组织。也许你的系统“角色”需要一些节点继承,以减少每次创建新节点时的重复,以及一些涵盖系统名称集的良好正则表达式节点名称(例如,你可能无法用一个正则表达式涵盖每个 webserver_type2,但可以放置一个涵盖你用于新节点的命名约定的正则表达式)。
答案2
带着解决方案回来,供未来的谷歌员工参考。感谢其他人提供的意见。
有一个讨论在这里这导致了暗示解决方案的一组文件。
然而,我有限的经验表明,就文件位置而言,这有点过时了。在客户端上,您需要一个如下文件:
root@vbox1-test:/etc/puppet# cat custom_facts.yml
servertype: webserver-type1
在服务器 (puppetmaster) 上,如果您按照提供的第二个链接中的文件操作,则 .rb 可以正常工作,但位置错误 (我使用的是 v3.x)。尝试将其移动到:
ubuntu@puppetmaster:/etc/puppet/modules/custom/lib/facter$ ls custom_facts.rb
custom_facts.rb
在你的任何一个模块 .pp 文件等中,只需添加类似
...
notify { "My servertype is: ${servertype}" : }
...
第二个链接再次暗示您可以进行“case”语句,然后选择要使用的模块/清单。因此,我可以将一组基本规则应用于大多数机器,然后针对某些类型应用一些自定义规则,而无需触及服务器清单。
你在客户端得到的效果是这样的:
root@vbox1-test:/etc/puppet# puppet agent --test
Info: Retrieving plugin
/File[/var/lib/puppet/lib/facter]/ensure: created
/File[/var/lib/puppet/lib/facter/custom_facts.rb]/ensure: defined content as '{md5}xxxxxxxxxxxxxxxxxxxxxxx'
Info: Loading facts in /var/lib/puppet/lib/facter/custom_facts.rb
Info: Caching catalog for vbox1-test
Info: Applying configuration version '1351762428'
My servertype is: webserver-type1
/Stage[main]//Node[default]/Notify[My servertype is: webserver-type1]/message: defined 'message' as 'My servertype is: webserver-type1'
Finished catalog run in 0.05 seconds
我非常乐观地认为这会给我我想要的东西,而且我可以让清单中没有服务器名称,这些服务器名称是遗留的并且不断增长。