使用继承时覆盖Puppet类

时间:2017-03-23 10:40:13

标签: linux inheritance puppet sudo

我正在尝试为puppet使用类继承。有一个名为 foo 的基类和一个名为 bar 的继承类。覆盖filepackage资源非常好并且正常运行。但与此同时,我正在使用自定义模块来配置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社区版。

任何帮助表示感谢。

1 个答案:

答案 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/*',
  ]
}