Copiando vários arquivos de pastas na mesma pasta usando o fantoche

1

Estou tentando criar um módulo de fantoches sensu_client que instala e configura o cliente sensu em uma instância.

A estrutura de diretórios do módulo é assim:

.
|-- examples
|-- files
|   |-- client-ssl
|   |-- custom_plugins
|   |   |-- common
|   |   '-- <env>
|   '-- default_plugins
|-- manifests
|-- spec
|   '-- classes
'-- templates
    '-- custom_plugins
        |-- common
        '-- <env>

Pastas e suas descrições são algo assim:

files/default_plugins/ : plugins padrão da internet
files/custom_plugins/common : plugins que escrevemos, independentemente do ambiente
files/custom_plugins/<env> : plugins específicos do ambiente que escrevemos

e a mesma ideia para o diretório de modelos.

Se possível, gostaria de copiar todos esses plugins para a mesma pasta /etc/sensu/plugins em clientes porque em nossos outros ambientes (que gerenciamos usando ansible), padronizamos a localização do plugin sensu para ser a pasta /etc/sensu/plugins .

Quando executo o manifesto que escrevi, recebo esta mensagem de erro:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Evaluation Error: Error while evaluating a Resource Statement, Cannot alias File[copy common custom plugins] to ["/etc/sensu/plugins/"] at /etc/puppetlabs/code/environments/<env>/modules/sensu_client/manifests/config.pp:46; resource ["File", "/etc/sensu/plugins/"] already declared at /etc/puppetlabs/code/environments/<env>/modules/sensu_client/manifests/config.pp:46 at /etc/puppetlabs/code/environments/<env>/modules/sensu_client/manifests/config.pp:46:3 on node <fqdn>

que é óbvio agora, porque eu tenho vários blocos de arquivos em que estou tentando copiar arquivos / modelos para o diretório /etc/sensu/plugins .

Vocês podem me indicar a maneira recomendada de fazer isso?

Outra pequena coisa relacionada que estou tentando alcançar, mas não sendo feita, é isso. Eu quero gerar /etc/sensu/conf.d/client.json arquivo que se parece com isso

{
  "client": {
    "name": "<hostname>",
    "address": "<ip address>",
    "subscriptions": ["<hostname>", "all", "<env>", "<service>"]
  }
}

Existem dois ambientes em que executamos o fantoche, e a convenção de nomenclatura segue esse padrão.

Ambiente 1: o FQDN é <env>-<service><index>.<domain-name1>.tld e o nome do host é <env>-<service><index>
Ambiente 2: o FQDN é <service><index>.<domain-name2>.tld e o nome do host é <service><index>

Meu arquivo de modelo para o mesmo se parece com isto:

{
  "client": {
    "name": "<%= @hostname %>",
    "address": "<%= @ipaddress %>",
    "subscriptions": <%= @pr_subscription_array %>
  }
}

onde estou recebendo o pr_subscription_array no meu manifesto usando este bloco:

$pr_service_name = regsubst("${facts[hostname]}", '^(.*?)-([a-zA-Z]*)[0-9]*', '')
$pr_subscription_array = [ "${facts[hostname]}", "all", "${facts['agent_specified_environment']}", "$pr_service_name" ]

Isso está gerando a assinatura assim: "subscriptions": ["<hostname>", "all", "<env>", "<service><index>"]

Algumas informações sobre como o campo de serviço não está sendo exibido corretamente. Ele vem com o número do índice. Alguma sugestão sobre como fazer isso usando fantoche?

Obrigado antecipadamente.

    
por AbhinavK 17.07.2016 / 12:34

0 respostas

Tags