Assim, você deseja que determinados hosts obtenham informações dos fatos de outro host, mas os anfitriões dos quais os fatos vêm variam dependendo da configuração do host específico. Isso está correto?
Em caso afirmativo, recomendo também o uso de recursos exportados e o uso de tags para especificar o recurso específico a ser usado. A razão para isso é que existem basicamente duas maneiras de um host obter os dados de outro host. Ambos requerem a ativação de storeconfigs. Uma é para o mestre de marionetes fazer pesquisas explícitas em qualquer que seja o seu backend storeconfigs; Eu não sei de nenhum módulo que encapsule isso, então você pode ter que escrever o seu próprio. A outra é que o host de origem exporte recursos que contenham seus fatos; isso é mais fácil e eu vou descrever abaixo.
Isso será mais fácil se você criar seu próprio tipo de recurso para agrupar as regras de firewall. Isso evita colisões com quaisquer outras classes que estejam exportando regras de firewall.
define site_firewall ($ipaddr) {
firewall { '500 allow site access':
chain => 'OUTPUT',
destination => $ipaddr,
proto => 'tcp',
port => 10000,
}
}
Em seguida, cada um dos seus sites deve exportar sua própria definição para site_firewall
:
@@site_firewall { $hostname:
ipaddr => $ipaddress,
}
Em hiera, você define em algum lugar em sua hierarquia o site do qual cada host é membro:
sitename: site1
Em seguida, nas suas classes de host, você instancia a definição site_firewall
apropriada:
Site_firewall <<| name == hiera('sitename', 'default') |>>
Uma configuração semelhante seria aplicada aos hosts compartilhados.
Se você precisar de regras de firewall no site e em hosts compartilhados, deverá usar tags em vez de nomes, pois haverá várias regras de firewall para um determinado host. Nos anfitriões específicos:
@@firewall { "500 allow site traffic from ${hostname}":
tag => hiera('sitename', 'default-site'),
source => $ipaddress,
proto => 'tcp',
port => 10000,
}
@@firewall { "500 allow shared traffic from ${hostname}":
tag => hiera('sharedname', 'default-shared'),
source => $ipaddress,
proto => 'tcp',
port => 8080,
}
Nos hosts do site, você só precisa coletar as regras de firewall para esses hosts:
Firewall <<| tag == $hostname |>>
Editar: Aha. Acho que encontrei o problema que você estava enfrentando com recursos exportados. No mínimo, isso é uma pegadinha que documentarei aqui para uma boa medida.
Se você tiver um recurso com parâmetros padrão e exportar esse recurso sem definir explicitamente esses parâmetros, os padrões de parâmetro serão fornecidos pelo host realizando o recurso, não o exportando.
Em outras palavras, se você tiver essa definição de tipo de recurso:
define foo ($bar = $fqdn) {
notice($bar)
}
E você o exporta do host baz.example.com:
@@foo { 'title': }
E você percebe isso no host quux.example.com:
Foo <<| |>>
Em seguida, o valor de $bar
será "quux.example.com".
Se, em vez disso, você exportá-lo de baz.example.com assim:
@@foo { 'title': bar => $fqdn }
Em seguida, o valor de $bar
será de fato "baz.example.com".