我正在尝试使用 chef 管理 Windows 服务器,需要创建一些用户、将他们添加到一个组,然后将该组添加到另一个组。
user 'test.user' do
password 'password'
action :create
end
group 'TestGroup' do
action :create
members [ 'test.user' ]
append true
end
group 'OtherGroup' do # This is line 43
action :create
members [ 'TestGroup' ]
append true
end
这会导致错误:
[2015-02-12T09:54:35+00:00] 严重错误:ArgumentError:group[OtherGroup](users::staff line 43)发生错误:ArgumentError:无法将新成员添加到本地组,因为该成员的帐户类型错误。
就像 Chef 无法将组添加到组中一样。将用户添加到组中是可以的。
奇怪的是,它似乎只影响自定义组。我可以正常添加到内置用户和管理员组。
group 'Administrators' do
action :modify
members [ 'TestGroup' ]
append true
end
我也尝试过OtherGroup
先创建空的,然后修改它,但还是出现了同样的问题。
答案1
您没有指定正在使用的 Windows Server 版本,也没有指定 Chef 的版本 - 因此这些只是一些假设。
从 Chef 文档来看,似乎不支持将组添加为组的成员:
成员
Ruby 类型:数组
应将哪些用户设置或附加到组中。当确定了多个组成员时,成员列表应为一个数组:
members ['user1', 'user2']
。
从错误信息中,我们可以推断出正在尝试的操作是将本地组添加到另一个本地组。
Chef 内部使用的 Windows API 方法如下(重点是我的):
NetLocalGroupAddMembers 函数添加一个或多个现有用户帐户的成员身份,或全球集团账户对现有的本地组。该功能不会改变当前为本地组成员的用户或全局组的成员身份状态。
Chef 中底层 API 调用的规范/测试覆盖范围似乎不多 - 但从调用此方法看起来,向组中添加成员的目的仅仅是域用户,而不是另一个本地组。