使用继承时覆盖 Puppet Class
Overriding a Puppet Class when using Inheritance
我正在尝试对人偶使用 class 继承。有一个名为 foo 的基础 class 和一个名为 bar 的继承 class。覆盖 file
或 package
资源非常好并且工作正常。但与此同时,我正在使用自定义模块来配置 sudo
。
当我尝试从 class bar 中覆盖 sudo
class 时出现问题。傀儡class如下:
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 配置,但出现如下错误:
Error while evaluating a Resource Statement, Evaluation Error: Error
while evaluating a Resource Statement, Duplicate declaration:
Sudo::Conf[sudo_conf] is already declared in file
/etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:80;
cannot redeclare at
/etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:335
at
/etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:335:3
on node foobartest01
预计将创建 /etc/sudoers.d/10_sudo_conf 文件。我怎样才能做到这一点?
使用:Puppet 4.9 社区版。
感谢任何帮助。
resolv.conf 覆盖在这里有效,因为您使用的是 the correct syntax:
class bar inherits foo {
File['/etc/resolv.conf'] {
..
}
但是您尝试覆盖的下一行的语法不同,因此失败:
sudo::conf { 'sudo_conf':
这是 declare a new resource (hence why you get a duplicate error) rather than 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/*',
]
}
我正在尝试对人偶使用 class 继承。有一个名为 foo 的基础 class 和一个名为 bar 的继承 class。覆盖 file
或 package
资源非常好并且工作正常。但与此同时,我正在使用自定义模块来配置 sudo
。
当我尝试从 class bar 中覆盖 sudo
class 时出现问题。傀儡class如下:
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 配置,但出现如下错误:
预计将创建Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Resource Statement, Duplicate declaration: Sudo::Conf[sudo_conf] is already declared in file /etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:80; cannot redeclare at /etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:335 at /etc/puppetlabs/code/environments/foobar_servers/manifests/foobar.pp:335:3 on node foobartest01
/etc/sudoers.d/10_sudo_conf 文件。我怎样才能做到这一点?
使用:Puppet 4.9 社区版。
感谢任何帮助。
resolv.conf 覆盖在这里有效,因为您使用的是 the correct syntax:
class bar inherits foo {
File['/etc/resolv.conf'] {
..
}
但是您尝试覆盖的下一行的语法不同,因此失败:
sudo::conf { 'sudo_conf':
这是 declare a new resource (hence why you get a duplicate error) rather than 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/*',
]
}