Chef 中的组资源不是幂等的
Group resource in chef is not being idempotent
作为某些要求的一部分,我被要求创建 2 个具有特定 GID 的组 'group1' 和 'group2'。还有 'user1' 具有特定 UID 的用户。
我在属性中指定了组的名称和它们的 ID,如下所示:
default['abc']['groups'] = {'group1' => 45xxx, 'group2' => 45xxx}
我在我的食谱中这样称呼它。我在这里要做的是首先创建两个组。然后创建用户。然后修改组添加用户。
#Create Groups
node['abc']['groups'].each_key do |group|
group group do
gid node['abc']['groups'][group]
end
end
# Create the user.
user 'user1' do
uid 45xxx
end
# Configure the user.
# Make it a member of the appropriate supplementary groups, and
# ensure its environment will be set up properly upon login.
node['abc']['groups'].each_key do |grp|
group grp do
members ['user1']
append true
action :modify
end
end
它在第一个 运行 上运行良好。然后当我再次 运行 时,会发生以下情况:
Recipe: abc::recipename
* group[group1] action create
- alter group group1
- replace group members with new list of members
* group[group2] action create
- alter group group2
- replace group members with new list of members
* user[user1] action create (up to date)
* group[group1] action modify
- modify group group1
- add missing member(s): user1
* group[group2] action modify
- modify group group2
- add missing member(s): user1
它所做的是,在 re运行 到达第一个块时,它正在更改组以删除所有用户。在第二个块中,它再次修改组以添加用户。
现在第一个组块仅用于创建组。如果该组已经存在,那么为什么要修改它,即使我们没有在第一个块中提及任何有关成员的信息?它应该只是将其视为最新的并继续前进。请帮助我理解为什么它表现得像。我不明白我是否遗漏了什么
members
默认为 []
所以不指定它就是告诉它把成员设置为空。如果您在第一个组资源上设置 append true
和 members []
,它将不会尝试管理我认为您想要的成员列表。 Chef 通常在对象级建模方面进行操作,而您正试图以更程序化的方式使用它,所以事情看起来有点奇怪。
作为某些要求的一部分,我被要求创建 2 个具有特定 GID 的组 'group1' 和 'group2'。还有 'user1' 具有特定 UID 的用户。 我在属性中指定了组的名称和它们的 ID,如下所示:
default['abc']['groups'] = {'group1' => 45xxx, 'group2' => 45xxx}
我在我的食谱中这样称呼它。我在这里要做的是首先创建两个组。然后创建用户。然后修改组添加用户。
#Create Groups
node['abc']['groups'].each_key do |group|
group group do
gid node['abc']['groups'][group]
end
end
# Create the user.
user 'user1' do
uid 45xxx
end
# Configure the user.
# Make it a member of the appropriate supplementary groups, and
# ensure its environment will be set up properly upon login.
node['abc']['groups'].each_key do |grp|
group grp do
members ['user1']
append true
action :modify
end
end
它在第一个 运行 上运行良好。然后当我再次 运行 时,会发生以下情况:
Recipe: abc::recipename
* group[group1] action create
- alter group group1
- replace group members with new list of members
* group[group2] action create
- alter group group2
- replace group members with new list of members
* user[user1] action create (up to date)
* group[group1] action modify
- modify group group1
- add missing member(s): user1
* group[group2] action modify
- modify group group2
- add missing member(s): user1
它所做的是,在 re运行 到达第一个块时,它正在更改组以删除所有用户。在第二个块中,它再次修改组以添加用户。 现在第一个组块仅用于创建组。如果该组已经存在,那么为什么要修改它,即使我们没有在第一个块中提及任何有关成员的信息?它应该只是将其视为最新的并继续前进。请帮助我理解为什么它表现得像。我不明白我是否遗漏了什么
members
默认为 []
所以不指定它就是告诉它把成员设置为空。如果您在第一个组资源上设置 append true
和 members []
,它将不会尝试管理我认为您想要的成员列表。 Chef 通常在对象级建模方面进行操作,而您正试图以更程序化的方式使用它,所以事情看起来有点奇怪。