我的AWS部署有问题,对于AWS和Puppet来说是相当新颖的。
所以来到我的问题 – 你可以区分傀儡节点与AWS机器标签或CNAME域?
关于这个计划的一点背景:
所以在AWS中,你会得到这些超级讨厌的公共/私人机器的DNS …没办法,你可以识别那些机器。 为了缓解这个问题,像AWS这样的接缝想要你标记所有东西 – 所以我做了。 find了一个脚本,为每个带有“ShortName”标签的机器创build一个CNAMElogging,这要归功于Route53 API。
每台机器都有一个ShortName标签,成为其CNAME,不幸的是puppet仍然可以parsing私人DNS名称。
我想要
node 'perl-cluster'{}
在傀儡里,任何人都有线索来达到这个目的?
谢谢
我这样做的方式是写服务器的自定义事实,以从用户数据中识别它的angular色,可以在169.254.169.254上访问它,查看您自己的用户数据 …
AWS用户数据文档
curl http://169.254.169.254/latest/
所以当我inputfacter facter role时,无论如何获取'dbserver','webserver',然后使用它来定义一个节点,重要的是不要让autoscaling组丝毫不在乎服务器的名字。
/etc/puppet/manifests/nodes.pp
node default{ include nodes::type }
/etc/puppet/modules/nodes/manifests/init.pp
import “type.pp”
/etc/puppet/modules/nodes/manifests/type.pp
class nodes::type{ case $role { “dbserver” : { include mysql } } case $role { “webserver” : { include httpd } } }
/etc/puppet/manifests/modules.pp
import nodes
我不想告诉你如何在你的情况下做到这一点,但在这里我会告诉你如何创build一个自定义事实来报告EC2实例ID。
装饰,curl,安装。
mkdir -p /home/ec2-user/lib/ruby/facter export FACTERLIB=/home/ec2-user/lib/ruby/facter cat > /home/ec2-user/lib/ruby/facter/instance_id < EOF # instance_id.rb # require 'facter' Facter.add("instance_id") do setcode "/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id" end EOF
而且,我写了一个习惯性的事实。
现在我可以使用它来获取ec2实例ID:
$ facter instance_id i-a1c0ffee
我没有在这台机器上安装puppet,但是如果我想把它提供给傀儡,id放在它/ var / lib / puppet / lib / facter,并分发给客户端id确保puppet.conf中的pluginsync = true。
请记住,所有我说的是非常主观的,它只是我如何做,如果更好的方式,我会感兴趣。
在1.7(2013年4月发布)中,有内置的事实报告了EC2实例的各种细节。
参考: http : //docs.puppetlabs.com/facter/1.7/core_facts.html#ec2ec2-instance-data
我同意西格的观点,在这一点上,自定义的事实似乎是要走的路。 AWS在以下url描述使用Cloud形成事实:
https://s3.amazonaws.com/cloudformation-examples/IntegratingAWSCloudFormationWithPuppet.pdf
这是一个有趣的,如果困难的阅读。 自定义的事实是:
# cfn.rb require 'rubygems' require 'json' filename = "/var/lib/cfn-init/data/metadata.json" if not File.exist?(filename) return end parsed = JSON.load(File.new(filename)) parsed.default = Hash.new parsed[\"Puppet\"].each do |key, value| actual_value = value if value.is_a? Array actual_value = value.join(',') end Facter.add(\"cfn_\" + key) do setcode do actual_value end end end
然后他们configuration他们的节点,如:
node basenode { include cfn } node /^.*internal$/ inherits basenode { case $cfn_roles { ...cloud formation include... } }
我更倾向于通过hiera实现这个:
--- :backends: - yaml :yaml: :datadir: /etc/puppet/hiera :hierarchy: - "roles/%{::cfn_roles}" - common
然后有像common.yaml:
classes: cfn # or whatever your custom fact class is
angular色/ dbserver.yaml:
classes: mysql
angular色/ webserver.yaml:
classes: httpd httpd::port: 8080 ...
杰夫