厨师刀上传食谱:方法不允许

厨师刀上传食谱:方法不允许

我在 CentOS 6 机器上运行 Chef 服务器 11。通过 Opscode 的 RPM 安装。我在 Windows 7 机器上设置了工作站。我可以正常运行knife client list并获得响应,因此我相信我的服务器运行正常。

我在工作站上创建了一个本地 Git 仓库,添加了入门食谱,并将其提交到本地仓库(在工作站的本地磁盘上)。

但是,当我尝试上传食谱时:

knife cookbook upload getting-started
Uploading getting-started [0.4.0]
ERROR: Method Not Allowed
Response:

“响应”为空。当我尝试时knife cookbook list,我得到的是空集。我猜想这是因为它正在从服务器获取它,而服务器还没有食谱。

我看见这个帖子在旧的 Opscode wiki 上,这让我相信我正在尝试编辑环境_default。因此,创建了一个 Dev 环境,确认它存在,然后:

knife cookbook upload getting-started -E Dev

结果相同。我最后的办法是指定一个管理员帐户:

knife cookbook upload getting-started -E Dev -u admin

结果相同。

为了成功上传这本食谱,我需要做什么?

答案1

我在默认安装时也遇到了同样的问题。原来,knife.rb 在服务器 URL 中也需要 https:// 而不是 http://。

答案2

当我尝试从本地 json 文件上传 chef 角色但本地 json 中缺少属性时,我也收到了此错误。当我使用额外详细模式时,我看到 Knife 正在尝试 HTTP PUT 操作并收到响应HTTP 405 Method Not Allowed

因此看来,“方法不允许”错误基本上意味着 Knife 提交了 Chef 服务器无法理解的 HTTP 请求。

为了解决我的角色问题,一旦我使用了正确的角色格式(如下所示),它就可以正常工作。

{
    "name": "my role name",
    "description": "my role description",
    "chef_type": "role",
    "json_class": "Chef::Role",
    "run_list": [ 
              "recipe[recipe1]", 
              "recipe[recipe2]"
           ],
    "default_attributes": {},
    "override_attributes": {}
}

答案3

“方法不允许”错误实际上是HTTP 405错误。我不知道。原来我的 Chef 服务器上有一些奇怪的重定向。我可以通过 FQDN 来寻址服务器,但被重定向到主机名。我打开了“额外”详细程度:

knife cookbook upload getting-started -V -V

调试消息让我知道初始上传获得了 HTTP 301(永久移动)。当 Knife 尝试访问新地址时,它会使用 GET 而不是 POST,从而导致 405。我将 Knife 配置为指向重定向的 URL,上传成功。

相关内容