允许Chef节点上传cookbook

时间:2014-01-13 21:43:47

标签: chef knife

我正在尝试让我们的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

我已经尝试过(但失败并出现同样的错误):

  1. 在Opscode管理员中授予ci客户端读取权限。
  2. 使用验证器用户上传食谱。
  3. 执行非Spork上传(sudo bundle exec knife upload cookbooks/teamcity),但没有使用403
  4. 我也尝试过列出客户端(sudo bundle exec knife client list),但是Response: missing create permission失败了。

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

    我猜我需要设置某种权限,但是在新旧Opscode管理界面中进行了调整之后,我已经没有线索了。

    是什么给出了?

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

2 个答案:

答案 0 :(得分:6)

根据Chef支持,首选方法是创建一个新的用户并使用它与CI节点中的Chef服务器进行交互:

  

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

     

如果您想避免上述必须分配Admin的问题   对客户端的权限,您可以创建将用于的新用户   从构建服务器上传。允许所有用户上传   烹饪书,无需成为管理员组的成员。

所以,总结一下:

  1. 在Opscode管理
  2. 中创建新的用户
  3. 在CI节点上提供用户密钥(.pem)。
  4. 确保(1)中的用户用于所有刀具命令(请参阅--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知之甚少,但我想这种方式没有区别。