作为某些要求的一部分,我被要求创建具有特定GID的2组“group1”和“group2”。还有具有特定UID的“user1”用户。 我在属性中指定了组的名称及其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
它正在做的是,当它击中第一个块时重新运行,它正在改变组以删除所有用户。在第二个块中,它再次修改组以添加用户。 现在,第一个组块仅用于创建组。如果该组已经存在,那么为什么要修改它,即使我们没有提到第一个区块中的成员?它应该只是看到它是最新的并继续前进。请帮助我理解为什么它会像。我不明白我是否遗漏了一些东西
答案 0 :(得分:2)
members
默认为[]
因此,如果不指定它,则告诉它将成员设置为空。如果您在第一个组资源上设置append true
和members []
,则不会尝试管理我认为您想要的成员列表。 Chef通常在对象级建模方面运行,你试图以更加程序化的方式使用它,所以事情看起来有点奇怪。