linux - 使用继承时覆盖 Puppet 类

标签 linux inheritance puppet sudo

我正在尝试对 puppet 使用类继承。有一个名为 foo 的基类和一个名为 bar 的继承类。覆盖 filepackage 资源非常好并且工作正常。但与此同时,我正在使用自定义模块来配置 sudo

当我尝试从 bar 类内部覆盖 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.confsudo 配置,但出现如下错误:

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 的语法(因此为什么会出现重复错误)而不是 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/*',
  ]
}

关于linux - 使用继承时覆盖 Puppet 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42973667/

相关文章:

linux - 如何使用 zip -T 检查多个 zip 文件的 CRC

linux -/proc/iomem 显示的 "System RAM"是不是像未分配的内存?

Java继承问题

ssl - 手动运行后 puppet 代理坏了

linux - Puppet 代理 3.8.1 在 Ubuntu 14.04 上安装失败

puppetlabs/postgresql 示例不起作用

linux - shell脚本引号消失

linux - 是否有可能突破受限(自定义) shell ?

java - Java中的继承和静态成员

所有 Activity 的Android父抽屉导航