使用木偶将现有用户添加到组中

是否有可能添加一个现有的用户与木偶2.7.18组?

我们有两个模块,每个模块定义一个类:

  • 模块“用户”创build所有用户,包括用户foo和用户栏。
  • 模块“subversion”处理各种conf文件并创build组svn。

我们想添加用户foo在模块“subversion”中将svn分组。

我已经尝试了现有function请求中所述的成员参数:

group { "svn": ensure => present, gid => xxxxx; } user { "foo": group => ["svn"], membership => minimum; } 

但是我得到以下错误:

err:无法从远程服务器检索目录:SERVER上的错误400:重复声明:User [foo]已经在xx行的文件/pathto/modules/subversion/manifests/init.pp中声明; 无法在节点myserver.example.com上的/pathto/modules/users/manifests/init.pp:xxx处重新声明

这个function是否已经实现? 如果没有,是否有一个很好的解决方法?

如果将用户声明为虚拟资源 ,则可以使用“实现”或集合语法(用户<| … |>)。 这是一个例子:

 @user { 'foo': groups => ['somegroup'], membership => minimum, } 

然后用这个集合语法来实现这个虚拟用户:

 User <| title == foo |> 

而在其他地方,您可以使用加号为该虚拟资源添加参数:

 User <| title == foo |> { groups +> "svn" } 

使用Puppet虚拟资源是正确的方式 – 但是如果你不能改变用户定义,同时需要一个解决方法修复,以下是可怕的和黑客,但将工作:

 exec { 'foo somegroup membership': unless => '/bin/grep -q "somegroup\\S*foo" /etc/group', command => '/sbin/usermod -aG somegroup foo', require => User['foo'], } 

从本质上讲,我们只是检查一些组是否包含用户foo呢…如果不是,除了foo所属的现有组外,还可以使用普通的usermod命令来添加它。

感谢 – 丑陋的黑客肯定,但它完成了工作。 下面是一个有趣的例子(结合上面的评论)将“nrpe”添加到“nagios”组。 我使用了一个包,因为这里的用户是提供RPM而不是puppet。

  exec {"nrpe nagios membership": unless => "/bin/getent group nagios|/bin/cut -d: -f4|/bin/grep -q nrpe", command => "/usr/sbin/usermod -a -G nagios nrpe", require => Package['nrpe'], }