我正在尝试让我们的CI机器(运行Teamcity)在完成所有测试后上传和推广Chef cookbook,使其成为我们部署管道的适当部分。
但是,客户端无权上传cookbook,但我无法弄清楚如何调整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
我已经尝试过(但失败并出现同样的错误):
ci
客户端读取权限。sudo bundle exec knife upload cookbooks/teamcity
),但没有使用403 我也尝试过列出客户端(sudo bundle exec knife client list
),但是Response: missing create permission
失败了。
客户端和验证器密钥位于/etc/chef
,但我在<repo-path>/.chef/knife.rb
中有一个Knife配置(我正试图从<repo-path>
上传。)
我猜我需要设置某种权限,但是在新旧Opscode管理界面中进行了调整之后,我已经没有线索了。
是什么给出了?
注意:我们使用的是Opscode Enterprise Chef版本。
答案 0 :(得分:6)
根据Chef支持,首选方法是创建一个新的用户并使用它与CI节点中的Chef服务器进行交互:
用户被更恰当地称为“Chef Server API的任何用户。” 不是运行chef-client程序的节点“
如果您想避免上述必须分配Admin的问题 对客户端的权限,您可以创建将用于的新用户 从构建服务器上传。允许所有用户上传 烹饪书,无需成为管理员组的成员。
所以,总结一下:
.pem
)。--user
和--key
刀具选项),例如knife upload cookbook <name> --user ci_user --key .chef/ci_user.pem
答案 1 :(得分:2)
您无法使用验证器客户端上传食谱。这是一个特殊的客户端,只能注册新的(非管理员)客户端。
为了上传食谱,CI使用的客户端必须具有管理员权限(或者需要食谱上传权限,如果Enterprise Chef中有这样的权限)。
您可以将节点使用的客户端设为管理员,也可以只创建另一个客户端并将其配置为与knife
配合使用(不要将其指向/etc/chef/client.pem
,而是指向其他位置)
免责声明:我对Enterprise Chef知之甚少,但我想这种方式没有区别。