У меня возникла проблема с развертыванием AWS, довольно новая для AWS и Puppet.
Итак, переходя к моему вопросу - можете ли вы различать марионеточные узлы с машинными тегами AWS или доменами CNAME?
Немного предыстории о плане:
Таким образом, в AWS вы получаете эти супер-неприятные DNS-адреса общедоступных / частных машин ... на них невозможно идентифицировать машины. Чтобы решить эту проблему, швы вроде AWS хотят, чтобы вы пометили все - я так и сделал. Нашел скрипт, который делает запись CNAME для каждой машины с тегом «ShortName» благодаря Route53 API.
У каждого компьютера есть тег ShortName, который становится его CNAME, к сожалению, марионетка все еще разрешает частное имя DNS.
Я бы хотел иметь
node 'perl-cluster'{}
в марионетке, кто-нибудь знает, как достичь этого?
Спасибо
Я сделал это так, чтобы написать пользовательский факт для сервера, чтобы определить его роль по пользовательским данным, к которым можно получить доступ на 169.254.169.254, см. Свой собственный данные пользователя...
Документация по пользовательским данным AWS
curl http://169.254.169.254/latest/
поэтому когда я печатаю facter role
Я получаю «dbserver», «webserver» что угодно, а затем используйте это для определения узла, важно, чтобы группы автомасштабирования не заботились о том, какое имя сервера.
/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
Я не хочу рассказывать вам, как именно это сделать в вашем случае, но здесь я покажу вам, как создать собственный факт для сообщения идентификатора экземпляра EC2.
Фастер, завиток, установлены.
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:
$ facter instance_id
i-a1c0ffee
У меня нет установленной марионетки на этом компьютере, но если я хочу, чтобы она была доступна для марионетки, введите в нее id / var / lib / puppet / lib / facter, а для распространения среди клиентов убедитесь, что pluginsync = true в puppet.conf.
Имейте в виду, все, что я сказал, очень субъективно, просто я это делаю, если есть лучший способ, мне было бы интересно.
Начиная с facter 1.7 (выпущенного в апреле 2013 года), есть встроенные факты, которые сообщают различные детали вашего экземпляра EC2.
Ссылка: http://docs.puppetlabs.com/facter/1.7/core_facts.html#ec2ec2-instance-data
Я согласен с Сирчем в том, что на данном этапе обычаи кажутся подходящим вариантом. AWS описывает использование фактов формирования облака по адресу:
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
Затем они настраивают свои узлы следующим образом:
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
роли / dbserver.yaml:
classes: mysql
роли / webserver.yaml:
classes: httpd
httpd::port: 8080
...
Джефф