如何为不同的节点分离数据包项?

时间:2017-01-10 11:41:17

标签: chef databags

基本数据包结构为:/data_bags/[data bag name]/[data bag items]

假设我想为名为users的数据包中所有节点的所有可能管理员创建一个数据包。 即。

/data_bags/users/admin1.json
/data_bags/users/admin2.json
/data_bags/users/admin3.json

现在node1我只想admin1 and admin3node2我想要admin2admin3作为我的管理员。

如何以可以为每个不同节点指定或拆分数据包项目的方式分离或构建配置?

我有一个想法,就是我们可以做这样的事情。

/data_bags/node1/users/...
/data_bags/node2/users/...

我是厨师的首发,所以如果我想要的是愚蠢的,应该以其他方式处理,我感谢任何信息指出我正确的方向。

2 个答案:

答案 0 :(得分:1)

您需要按用户或按主机进行分组。我们有以下数据包结构(更多docs):

{
    "id": "a-srv123-admin",
    ...
    "nodes": {
            "srv123.example.org": {
                    "sudo": "true"
            }
    }
}

可以将更多节点添加到node哈希。然后,相应的recipe会搜索与其自己的node['fqdn']匹配的数据包项目:

users = search('users', "nodes:#{node['fqdn']}")

当然,如果让它按节点分组更为重要,只需反过来选择与fqdn或类似属性匹配的数据包项目。

答案 1 :(得分:1)

社区users cookbook支持此功能。在每台服务器上,您可以指定要管理的用户组,而食谱将在数据库项目中搜索匹配的组成员资格。

举个例子,看一下这个答案:

更新

"用户" cookbook有一个LWRP,用于定义应在服务器上安装哪组用户。

users_manage "admins1"

然后在数据包中指定用户所属的组。例如" user1"将包含在需要admins1或admins2组的服务器中。

{
  "id": "user1",
  "ssh_keys": [
    "ssh-rsa I AM A DUMMY KEY 1"
  ],
  "groups": [
    "admins1",
    "admins2"
  ],
  "uid": 2001
}

您当然可以创建一个特定于每个服务器的组,但这不会非常好地扩展。我个人建议根据用户角色建立群组名称。

  • 管理员
  • DEVOPS
  • 开发
  • 部署者