8

我正在尝试让我们的 CI 机器(运行 Teamcity)在完成所有测试后上传和推广 Chef 食谱,使其成为我们部署管道的适当部分。

但是,客户端无权上传说明书,但我不知道如何调整 ACL 设置以使其工作。

$ sudo bundle exec knife spork upload teamcity --environment production
ERROR: You authenticated successfully to https://api.opscode.com/organizations/<my-org> as ci but you are not authorized for this action 
Response:  missing create permission

我已经尝试过(但因同样的错误而失败):

  1. 在Opscodeci管理员中授予客户端读取权限。
  2. 使用验证器用户上传说明书。
  3. 进行非 Spork 上传 ( sudo bundle exec knife upload cookbooks/teamcity),但由于 403 失败

我也试过只列出客户(sudo bundle exec knife client list),但失败了Response: missing create permission

客户端和验证器密钥位于 中/etc/chef,但我有一个 Knife 配置<repo-path>/.chef/knife.rb(我正在尝试从 上传<repo-path>)。

我猜我需要设置某种权限,但是在旧的和新的 Opscode 管理界面中浏览之后,我没有线索了。

是什么赋予了?

注意:我们使用的是由 Opscode 托管的 Enterprise Chef 版本。

4

2 回答 2

6

根据 Chef 支持,这样做的首选方式是创建一个新用户并使用它从 CI 节点与 Chef 服务器交互:

用户更恰当地称为“不是运行 chef-client 程序的节点的 Chef Server API 的任何用户”

如果您想避免上述必须为客户端分配管理员权限的问题,您可以创建一个新用户,用于从构建服务器进行上传。所有用户都可以上传说明书,而无需成为 Admins 组的成员。

所以,总结一下:

  1. 在 Opscode Admin 中创建新用户
  2. 使用户的密钥 ( .pem) 在 CI 节点上可用。
  3. 确保 (1) 中的用户用于所有刀命令(请参阅--user--key刀选项),例如knife upload cookbook <name> --user ci_user --key .chef/ci_user.pem
于 2014-01-20T21:18:44.083 回答
2

您不能使用验证器客户端上传说明书。这是一个特殊的客户端,只能注册新的(非管理员)客户端。

为了上传说明书,您的 CI 使用的客户端必须具有管理员权限(或者需要说明书上传权限,如果 Enterprise Chef 中有这样的权限)。

您可以将节点使用的客户端设置为管理员,或者只是创建另一个客户端并将其配置为用于knife(不要将其指向/etc/chef/client.pem,而是指向其他地方)。

免责声明:我对 Enterprise Chef 知之甚少,但我想这并没有什么不同。

于 2014-01-13T22:28:52.207 回答