Eu recomendaria que você se afastasse das definições do nó do manifesto para o Hiera. Você precisará ajustar um pouco as coisas para se afastar de ter esse tipo definido chamado diretamente de seu nó, mas parece que isso não está sendo usado várias vezes em um catálogo, portanto, a conversão para uma classe deve funcionar bem. / p>
Portanto, com um hiera.yaml
como este ...
---
:backends:
- yaml
:hierarchy:
- '%{::clientcert}'
- 'os-%{::osfamily}'
- common
:yaml:
:datadir: /etc/puppet/hieradata
E um site.pp
com apenas:
hiera_include(classes)
.. seus nós serão lidos dos arquivos YAML em /etc/puppet/hieradata
. Por exemplo, digamos que você queira tmp::params
em todos os nós que reportam ao Puppet, mas talvez você queira tmp::gtp
apenas em determinados nós. E você deseja definir centralmente o parâmetro version
, mas deixe os outros parâmetros a serem definidos por nó. Então, colocaremos tmp::params
e version
parameter /etc/puppet/hieradata/common.yaml
:
classes:
- tmp::params
tmp::gtp::version: 6.0.0.0
Então você terá um arquivo para cada nó.
/etc/puppet/hieradata/test1.yaml
:
classes:
- tmp::gtp
tmp::gtp::name : node1
tmp::gtp::ip : 168.1.193.97
tmp::gtp::port : 1255
/etc/puppet/hieradata/test2.yaml
:
classes:
- tmp::gtp
tmp::gtp::name : node2
tmp::gtp::ip : 168.1.193.98
tmp::gtp::port : 1255
E sim, ele selecionará as alterações nos arquivos Hiera sem a reinicialização do serviço. Parece que você precisa?
Editar : para usar o Hiera para configurar várias instâncias de um tipo definido, você vai querer fazer algo assim:
/etc/puppet/hieradata/test1.yaml
:
classes:
- gtpsetup
gtp_instances:
- node1_instance1
- node1_instance2
gtp_instanceconfig:
node1_instance1:
ip : 168.1.193.97
port : 1255
version : 5.3.2.1
node1_instance2:
ip : 168.1.193.97
port : 1268
version : 6.0.0.0
/etc/puppet/modules/gtpsetup/manifests/init.pp
:
class gtpsetup {
gtp_instances = hiera('gtp_instances')
gtp_instanceconfig = hiera('gtp_instanceconfig')
define gtp_instance {
# this is using your existing defined type, but you can just move the stuff it's doing to here.
tmp::gtp { $title:
name => $title,
version => gtp_instanceconfig[$title]['version'],
ip => gtp_instanceconfig[$title]['ip'],
port => gtp_instanceconfig[$title]['port'],
}
}
gtp_instance { $gtp_instances: }
}