【问题标题】:How to separate data bag item for different nodes?如何区分不同节点的数据包项?
【发布时间】:2017-01-13 06:17:18
【问题描述】:

一个基本的数据包结构是:/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 admin3,对于node2,我希望拥有admin2admin3 作为我的管理员。

如何分离或构造我的配置,以便为每个不同的节点指定或拆分我的数据包项?

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

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

我是厨师的初学者,所以如果我想做的事情很愚蠢并且应该以其他方式处理,我很感激任何信息可以为我指明正确的方向。

【问题讨论】:

  • 这之后的主要目标是什么?或者换一种说法:你将如何使用这些用户信息?这听起来更像是 RBAC 管理的 XY 问题,而不是结构问题。您仍然可以在每个节点上拥有一个属性,告诉您希望每个节点有哪些管理员,并通过此列表获取 data_bag_item。

标签: chef-infra databags


【解决方案1】:

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

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

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

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

当然,如果按节点分组对您来说更重要,只需反过来选择与fqdn 或类似属性匹配的数据包项即可。

【讨论】:

  • 所以节点需要在item本身内部分离?看起来令人失望。谢谢你的回答。
  • 只是代码和数据。你可以随心所欲。您可以为每个节点、每个用户或(每个节点的每个用户,即srv123-johndoe.json,其中仅包含一些 true 值)拥有数据包项。 OTOH,您可以将所有这些信息放入一个数据包项中。我只是以稍微低的复杂性说明了对我们有用的东西。
  • 嗯,但是我可能不得不使用文件阅读器来搜索符合条件的数据包项目。拥有this 的解决方案将是我认为最好的解决方案,但遗憾的是还没有找到任何解决方案。
  • 我认为你的想法太复杂了。您可以拥有包含用户的项目users/srv123.example.org 吗?否则,我建议您使用可能需要的结构稍微编辑您的问题。那我不明白你的意思。
  • 我不想过多地改变这个问题,但我用我想到的一种结构进行了更新。
【解决方案2】:

社区users 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
}

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

  • 管理员
  • 开发运维
  • 开发人员
  • 部署人员

【讨论】:

  • 我确实使用了那本食谱,我想控制在哪个节点上创建哪个用户。
  • @Starx 我已经更新了我的答案。上面的链接有一个工作示例(测试厨房项目)
  • 那么,如果一个服务器有那个组,然后才会创建用户?
  • @Starx 您运行了一个创建组的配方,然后创建了与该组关联的用户。为了完全理解它在做什么,我建议阅读“users_manage”LWRP 的代码。您会发现“用户”数据包的厨师搜索:请参阅:github.com/chef-cookbooks/users/blob/…
  • 感谢您的回答。我现在就投赞成票,因为我不确定哪种解决方案适合我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多