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
同じ結果。
このクックブックを正常にアップロードするには、何をする必要がありますか?
デフォルトのインストールからこれと同じ問題が発生しました。サーバーのURLでもhttp://ではなくhttps://が必要なknife.rbであることがわかります。
ローカル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": {}
}
「MethodNotAllowed」エラーは、実際には HTTP 405 エラーです。私はそれを知りませんでした。 Chefサーバーで奇妙なリダイレクトがあったことがわかりました。サーバーをFQDNでアドレス指定しますが、ホスト名にリダイレクトされます。 'extra'冗長性をオンにしました:
knife cookbook upload getting-started -V -V
また、デバッグメッセージにより、最初のアップロードでHTTP 301(永続的に移動)が取得されていることがわかりました。ナイフが新しいアドレスをヒットしようとすると、POSTではなくGETが使用され、405が発生しました。リダイレクトされたURLを指すようにナイフを構成したところ、アップロードは成功しました。