У меня есть основной класс марионеток, который добавляется ко всем серверам в моей сети, назовем его: profile :: base.pp:
class profile::base {
...
$agent_zbx_templates = ['OS Linux']
...
include profile::zabbix::agent
}
Я получил файл для конкретного узла:
classes:
- profile::haproxy
И класс profile::haproxy.pp
Я хотел бы добавить кое-что к $agent_zbx_templates
определено в profile::base.pp
, например:
class profile::haproxy {
$local_agent_zbx_templates = $profile::base::agent_zbx_templates + ['APP HAProxy']
class {'profile::base':
agent_zbx_templates => $local_agent_zbx_templates
}
}
И, конечно же, когда я пытаюсь использовать марионеточный агент -t на узле, я получаю:
[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
Как я могу изменить agent_zbx_templates (из profile :: base) из другого класса?
С уважением, стр.
Вы не можете объявить класс дважды на одном и том же узле.
Однако вы можете добавить файл hiera для конкретного узла или среды. Хиера проходит по иерархии и использует первое найденное объявление, игнорируя более поздние повторяющиеся.
hiera.yaml:
:hierarchy:
- "node/%{::fqdn}"
- "environment/%{::environment}"
- ...
Затем создайте папку node
в вашем hiera datadir, например: /etc/puppetlabs/hieradata/node
. Всякий раз, когда вы помещаете туда yaml-файл с именем fqdn, объявления классов в нем будут использоваться, а объявления того же класса позже игнорируются.