2017-05-04 149 views
0

一个单一的虚拟资源Multipe用户角色对于不同的节点上管理用户,我使用类似的/定制模块中木偶,如下所示:与木偶

puppet_users_with_virtual_resources

在该示例中,有两个角色。如果一个角色已分配给用户,则无法为用户分配额外的角色(因为虚拟资源已经创建)。

就我而言,我有不同的角色(如sudo,web-dev,mysql),每个角色都将特定的组分配给用户。

但是,如前所述,我只能将一个单一角色分配给用户。如果我为用户添加另一个角色,用户仍然只有一个角色(因为具有来自一个角色的组的用户已分配给用户并且已创建资源)。

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

+0

为什么你需要一个虚拟资源来收集用户角色? –

+0

当我需要用户时webserver和mysql,我需要为两者创建用户(不可能,因为资源只能指定一个)。通过虚拟资源,我可以在不同的“地方”定义这个用户。 您对如何解决我的问题有更好的想法吗? – Studentus

回答

0

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

下面是一个简单的例子。

他们的数据在Hiera定义:

class profile::users (
    $users, 
) { 
    $users.each |$username, $info| { 
    @user { $username: 
     ensure => present, 
     groups => $info['groups'], 
     tags => $info['tags'], 
    } 
    } 
} 

他们意识到,他们需要的地方:

# common.yaml 
--- 
profile::users::users: 
    auser: 
    groups: ['webserver', 'mysql'] 
    tags: ['users::webserver', 'users::mysql'] 
    anotheruser: 
    groups: ['webserver'] 
    tags: ['users::webserver'] 

他们是在一个共同的轮廓宣布

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

    User <| tag == 'users::webserver' |> 
} 

你可以也可以通过编程来做很多事情,例如根据组成员资格定义标签。