Puppet中具有单个虚拟资源的多用户角色

Puppet中具有单个虚拟资源的多用户角色,puppet,hiera,Puppet,Hiera,为了管理不同节点上的用户,我在Puppet中使用了一个类似的/定制的模块,如下所示: 在本例中,有两个角色。如果已将一个角色分配给用户,则无法将其他角色分配给该用户(因为已创建虚拟资源) 在我的例子中,我有不同的角色(如sudo、webdev、mysql),每个角色都为用户分配特定的组 但正如前面提到的,我只能为用户分配一个角色。如果我向该用户添加另一个角色,该用户仍将只有一个角色(因为具有来自一个角色的组的用户已被分配给该用户,并且已创建资源) 如何解决这一问题,以便为一个用户分配无限的角色

为了管理不同节点上的用户,我在Puppet中使用了一个类似的/定制的模块,如下所示:

在本例中,有两个角色。如果已将一个角色分配给用户,则无法将其他角色分配给该用户(因为已创建虚拟资源)

在我的例子中,我有不同的角色(如sudo、webdev、mysql),每个角色都为用户分配特定的组

但正如前面提到的,我只能为用户分配一个角色。如果我向该用户添加另一个角色,该用户仍将只有一个角色(因为具有来自一个角色的组的用户已被分配给该用户,并且已创建资源)


如何解决这一问题,以便为一个用户分配无限的角色?

我通常通过在集中的位置定义虚拟用户(例如,
profile::users
)并在Hiera中存储用户/组信息来解决这一问题。然后代码中每个需要用户的地方都可以通过相应的标签来实现。不过,这假设您关心的所有服务器上都存在必需的组

这里有一个最小的例子

其数据在Hiera中定义:

# common.yaml
---
profile::users::users:
  auser:
    groups: ['webserver', 'mysql']
    tags:   ['users::webserver', 'users::mysql']
  anotheruser:
    groups: ['webserver']
    tags:   ['users::webserver']
它们在公共配置文件中声明:

class profile::users (
  $users,
) {
  $users.each |$username, $info| {
    @user { $username:
      ensure => present,
      groups => $info['groups'],
      tags   => $info['tags'],
    }
  }
}
在需要它们的地方实现它们:

class role::webserver {
  include profile::base
  include profile::webserver

  User <| tag == 'users::webserver' |>
}
类角色::Web服务器{
include profile::base
包含概要文件::Web服务器
使用者
}

您还可以通过编程方式完成很多工作,例如根据组成员身份定义标记。

为什么需要虚拟资源来收集用户角色?因为当我需要Web服务器和mysql中的用户时,我需要为这两个用户创建用户(不可能,因为资源只能指定一个)。有了虚拟资源,我可以在不同的“地方”定义这个用户。你对如何解决我的问题有更好的想法吗?