Как марионетка и различие без fqdn?
У меня есть одна проблема, как управлять агентами-узлами с помощью Puppet?
Я использую openstack для автоматической генерации vms, а затем puppet с несколькими кодами кукол в специальном шаблоне.
например.
Система предоставляет несколько vms, каждый vm имеет два атрибута:
fqdn
: может быть, повторить (вы знаете, VMS генерируются системой в сложной env)
uuid
: он будет уникальным и хранится в постоянном файле. это не изменится
и ниже два из них.
VM1:
fqdn: api-server.expamle.com
uuid: 20a558f1-2cd9-4068-b5fc-8d252c3f3262
VM2:
fqdn: api-server.expamle.com
uuid: 096359d6-5dc9-47e9-946a-bd702fe7c2d5
(Также я могу указать имя хоста с uuid
, но я думаю, что это не очень хорошая идея.)
и теперь я хочу марионетку их puppet kick
или же mcollective puppet runonce
,
с mco
, я могу выбрать facu uuid, который будет отличаться от VM1 и VM2.
mco pupppetd runonce --with-facter uuid=20a558f1-2cd9-4068-b5fc-8d252c3f3262
но я все еще ДОЛЖЕН жестко закодировать FQDN в коде кукол
узел api-server.expamle.com { ... }
но на самом деле я просто хочу использовать его в следующем стиле:
facter 20a558f1-2cd9-4068-b5fc-8d252c3f3262 {... } facter 096359d6-5dc9-47e9-946a-bd702fe7c2d5 {... }
как я могу написать куклу? или какие-то изменения в архитектуре?
1 ответ
Существует несколько способов назначения ролей / классификации узла в марионетке.
Решение, более близкое к приведенному вами примеру, заключается в использовании следующего файла node.pp
node default {
case $::uuid {
"20a558f1-2cd9-4068-b5fc-8d252c3f3262": {
include apache
...
}
"096359d6-5dc9-47e9-946a-bd702fe7c2d5": {
include ngnix
...
}
default: {
...
}
}
}
Сказав это, я не уверен, что это лучшее решение. Существуют лучшие способы назначения классов / ролей узлу.
Я бы посоветовал взглянуть на кукольного иера ( http://docs.puppetlabs.com/hiera/1/complete_example.html) или ENC ( http://docs.puppetlabs.com/guides/external_nodes.html) для улучшения механизмов.