Não é possível atribuir variáveis em outros namespaces

3

Eu tenho uma classe principal de fantoches que é adicionada a todos os servidores da minha rede, vamos chamá-la: profile :: base.pp:

class profile::base { ... $agent_zbx_templates = ['OS Linux'] ... include profile::zabbix::agent }

Eu hiera arquivo para nó específico que eu tenho: classes: - profile::haproxy

E class profile :: haproxy.pp Eu gostaria de adicionar algo ao $ agent_zbx_templates definido no profile :: base.pp, por exemplo:

class profile::haproxy { $local_agent_zbx_templates = $profile::base::agent_zbx_templates + ['APP HAProxy'] class {'profile::base': agent_zbx_templates => $local_agent_zbx_templates } }

E, claro, quando tento fazer um agente de marionetes - no nó eu recebo: [root@stress1 ~]# puppet agent -t Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Loading facts Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Resource Statement, Duplicate declaration: Class[Profile::Base] is already declared; cannot redeclare at /etc/puppetlabs/code/environments/production/modules/profile/manifests/haproxy.pp:48 at /etc/puppetlabs/code/environments/production/modules/profile/manifests/haproxy.pp:48:3 on node stress1.lb.dc2 Warning: Not using cache on failed catalog Error: Could not retrieve catalog; skipping run

Como posso alterar o agent_zbx_templates (de profile :: base) de outra classe?

Atenciosamente, p.

    
por Przemysław Ciesielski 23.02.2017 / 15:18

1 resposta

0

Você não pode declarar uma classe duas vezes no mesmo nó.

No entanto, o que você pode fazer é adicionar um nó ou um arquivo hiera específico do ambiente. Hiera passa pela hierarquia e usa a primeira declaração que encontra, ignorando as duplicatas posteriores.

hiera.yaml:

:hierarchy:
  - "node/%{::fqdn}"
  - "environment/%{::environment}"
  - ...

Em seguida, crie a pasta node em seu datadir hiera, por exemplo: /etc/puppetlabs/hieradata/node . Sempre que você colocar um arquivo yaml com o fqdn como nome, as declarações de classe serão usadas e as declarações da mesma classe serão ignoradas.

    
por 23.02.2017 / 17:44

Tags