web-dev-qa-db-ja.com

Chef Knife Upload Cookbook:メソッドは許可されていません

CentOS6ボックスでChefサーバー11を実行しています。 OpscodeからRPMを介してインストールされます。ワークステーションをWindows7ボックスにセットアップしました。通常のknife client listを実行して応答を受け取ることができるので、サーバーが正しく機能していると確信しています。

ワークステーションでローカルGitリポジトリを作成し、 getting-started Cookbook を追加して、(ワークステーションのローカルディスク上の)ローカルリポジトリにコミットしました。

ただし、クックブックをアップロードしようとすると、次のようになります。

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

「応答」は空です。 knife cookbook listを試すと、空のセットが返されます。これは、クックブックがまだないサーバーからフェッチしているためだと思います。

古いOpscodewikiで この投稿 を見たので、_default環境を編集しようとしていると思いました。そこで、開発環境を作成し、それが存在することを確認しました。

knife cookbook upload getting-started -E Dev

同じ結果。私の最後の手段は、管理者アカウントを指定することでした。

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

同じ結果。

このクックブックを正常にアップロードするには、何をする必要がありますか?

1
drawsmcgraw

デフォルトのインストールからこれと同じ問題が発生しました。サーバーのURLでもhttp://ではなくhttps://が必要なknife.rbであることがわかります。

4
James

ローカルjsonファイルからchefロールをアップロードしようとしたときに、このエラーが発生しましたが、ローカルjsonにプロパティがありません。追加の詳細モードを使用すると、knifeがHTTP PUT操作を試行していて、HTTP 405 Method Not Allowed応答を受信して​​いることがわかりました。

したがって、「Method Not Allowed」エラーは、基本的に、ナイフが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
Josh Padnick

「MethodNotAllowed」エラーは、実際には HTTP 405 エラーです。私はそれを知りませんでした。 Chefサーバーで奇妙なリダイレクトがあったことがわかりました。サーバーをFQDNでアドレス指定しますが、ホスト名にリダイレクトされます。 'extra'冗長性をオンにしました:

knife cookbook upload getting-started -V -V

また、デバッグメッセージにより、最初のアップロードでHTTP 301(永続的に移動)が取得されていることがわかりました。ナイフが新しいアドレスをヒットしようとすると、POSTではなくGETが使用され、405が発生しました。リダイレクトされたURLを指すようにナイフを構成したところ、アップロードは成功しました。

2
drawsmcgraw