我正在尝试为puppet使用类继承。有一个名为 foo 的基类和一个名为 bar 的继承类。覆盖file
或package
资源非常好并且正常运行。但与此同时,我正在使用自定义模块来配置sudo
。
当我尝试从类栏中覆盖sudo
类时出现问题。 Puppet类如下:
class foo {
$nrpe_plugin_pkgs = [ .... ]
service { 'nrpe service':
..
}
package { $nrpe_plugin_pkgs:
..
}
file { '/etc/nagios/nrpe.cfg':
..
}
file { '/etc/resolv.conf':
..
}
class { 'sudo':
purge => true,
config_file_replace => true,
}
sudo::conf { 'sudo_conf':
priority => 10,
content => [
'%gr1 ALL=(userfoo) NOPASSWD: ALL',
'%gr1 ALL=(root) NOPASSWD: /usr/bin/wbinfo *',
]
}
}
class bar inherits foo {
File['/etc/resolv.conf'] {
..
}
sudo::conf { 'sudo_conf':
priority => 10,
content => [
'%gr2 ALL=NOPASSWD:/bin/chown userbar\:gr2 /dirbar/*',
'%gr2 ALL=NOPASSWD:/bin/chown -R userbar\:gr2 /dirbar/*',
'%gr2 ALL=NOPASSWD:/bin/chmod * /dirbar/*',
]
}
}
我只想自定义 resolv.conf 和 sudo 配置,但我收到的错误如下:
预计会创建评估资源声明时出错,评估错误:错误 在评估资源声明时,重复声明: Sudo :: Conf [sudo_conf]已在文件中声明 /etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:80; 无法重新声明 /etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:335 在 /etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:335:3 在节点foobartest01
/etc/sudoers.d/10_sudo_conf 文件。我怎样才能做到这一点?
使用:Puppet 4.9社区版。
任何帮助表示感谢。
答案 0 :(得分:2)
resolv.conf覆盖在这里工作,因为你正在使用the correct syntax:
class bar inherits foo {
File['/etc/resolv.conf'] {
..
}
但是你尝试覆盖的下一行的语法是不同的,所以它失败了:
sudo::conf { 'sudo_conf':
这是declare a new resource的语法(因此你得到重复错误的原因)而不是to override an existing resource。它应该是:
Sudo::Conf['sudo_conf'] {
priority => 10,
content => [
'%gr2 ALL=NOPASSWD:/bin/chown userbar\:gr2 /dirbar/*',
'%gr2 ALL=NOPASSWD:/bin/chown -R userbar\:gr2 /dirbar/*',
'%gr2 ALL=NOPASSWD:/bin/chmod * /dirbar/*',
]
}