是否有可能添加一个现有的用户与木偶2.7.18组?
我们有两个模块,每个模块定义一个类:
我们想添加用户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'], }