使用 Puppet 将现有用户添加到组

使用 Puppet 将现有用户添加到组

是否可以使用 puppet 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 上重新声明

此功能已实现吗?如果没有,有没有什么好的解决方法?

答案1

如果你将用户声明为虚拟资源然后,您可以使用 'realize' 或集合语法 (User <| ... |>)。以下是示例:

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

然后用then集合语法实现虚拟用户:

User <| title == foo |>

您还可以在其他地方使用 plusignment 添加该虚拟资源的参数:

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

答案2

使用 Puppet 虚拟资源是正确的方法 - 但如果您无法更改用户定义并且同时需要解决方法,则下面的方法很糟糕而且很老套,但可以起作用:

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

本质上我们只是检查某个组是否包含用户 foo...如果不包含,则使用常规的 usermod 命令将其添加到 foo 所属的现有组之外。

答案3

谢谢 - 确实很丑陋,但可以完成工作。这是一个带路径的示例(结合上述评论),用于将“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'],
  }

相关内容