Posso acumular uma matriz de valores no fantoche de um colecionador

1

Eu preciso instanciar uma classe relacionada ao firewall que leva uma matriz dos hosts com permissão para acessar uma porta de banco de dados em um servidor db. O que está nessa lista depende de quais dos vários aplicativos da Web estão ativados, em quais hosts.

Eu gostaria de colocar algo entre a lógica do aplicativo que diz "verifique se o ip desse servidor está na lista de quais deles podem acessar o db", mas sem poder declarar novamente as variáveis, Não sei como acumular essa informação.

Isso é como o que o concat faz, embora, na melhor das hipóteses, eu conseguisse um arquivo que eu pudesse incluir nas regras do firewall. Eu poderia reescrever o módulo de firewall para que eu possa fazer isso dessa maneira, mas é bastante confuso, e estou esperando evitar isso.

Definir recursos virtuais na lógica do aplicativo e, em seguida, colecioná-los parece um caminho mais agradável, mas não tenho certeza de como obter de um coletor instanciando um monte de recursos de um determinado tipo para ter uma matriz de algum valor de cada um desses recursos?

WebApp::FirewallHole <| dbhost == $fqdn |>

$app_hosts = ???

Firewall::Hole {'mysql':
  proto => 'tcp',
  dport => '3306',
  saddr=> $app_hosts,
}

Nesse código, WebApp::FirewallHole existe apenas para extrair essas informações e pode ser definido de qualquer maneira que ajude. Firewall::Hole tem, para os propósitos atuais, uma interface fixa.

O texto acima encobre alguns dos detalhes da lógica do firewall. Eu não posso simplesmente instanciar a classe Firewall :: Hole repetidamente aqui, e mudar a interface para permitir que isso simplesmente empurre o problema mais para baixo na lógica do firewall, então a questão é sobre como eu posso construir uma matriz dos valores de uma conjunto de recursos coletados.

    
por mc0e 21.07.2015 / 08:02

1 resposta

0

Assumindo que você tenha configurado o PuppetDB para o seu cluster, você pode facilmente usar Puppetdbquery

puppet module install dalen-puppetdbquery

em seguida, no código do Puppet, pode consultar várias informações, por ex. com base em fatos, neste caso, todos os servidores Linux:

   $ary = query_nodes('(kernel="Linux")')

o resultado será uma matriz de FQDN:

['foo.example.org', 'bar.example.org']

No exemplo acima, kernel é apenas um fato do Puppet. Veja facter -y -p para fatos em seu nó. Você poderia usar, por exemplo:

query_nodes('(processors.count=12 and os.architecture=amd64)')

A consulta pode ser muito mais complexa, considerando o seu exemplo e usando o CLI algo assim deveria fazer o trabalho:

puppet query nodes '(Firewall::Hole['mysql'])'

PuppetDB pode parecer bastante complexo, mas tentar navegar RAL levaria a muito mais complicado (e mais lenta).

    
por 05.12.2016 / 01:05

Tags