使用p将现有用户添加到组中


16

是否可以使用人偶2.7.18将现有用户添加到组中?

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

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

我们想将用户foo添加到模块“ subversion”内的svn组中。

我尝试了现有功能请求中所述的Membership参数:

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

但是我收到以下错误:

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

这个功能已经实现了吗?如果没有,是否有一个好的解决方法?

Answers:


15

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

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

然后使用then收集语法实现该虚拟用户:

User <| title == foo |>

在其他地方,您可以使用加引号将其添加到该虚拟资源的参数中:

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

因此,我想目前除了虚拟资源之外别无选择:(非常感谢您的回答

1
在Puppet版本之间有一个错字或属性更改:它不是组而是组(复数)。使用Puppet 3.2.2
Goran Miskovic

1
有人可以用一个简短的例子对此进行扩展吗?
mschuett

21

使用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命令添加它。


1
木偶可能会重新获得可执行文件的标准路径。编辑以反映这一点。
h7r

2
可怕而骇人,但确实有帮助。我希望不必学习一种新的语言结构就可以将用户添加到组中,从而在概念上简单一些。
BillMan

1
也许一种更合适的方法(当然仍然是hacky)将getent group somegroup|cut -d: -f4|grep -q foo用于不假设我们正在使用/etc/group
falstro 2014年

超级有帮助-谢谢。我必须更改“除非”和“ usermod”以包括完整路径,如下所示:除非=>“ / user / bin / grep ...”命令=>“ / user / bin / usermod ...”
JNP Web Developer

对于@jnpWebDeveloper以及类似的对象:根据文档,您还可以指定一个path参数。我建议设置全局资源默认值,也许这是$PATH从事实中得出的。
cincodenada

2

谢谢-确实很丑陋,但是可以完成工作。这是将“ nrpe”添加到“ nagios”组的示例(结合以上注释)。我使用了require软件包,因为这里的用户是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'],
  }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.