Я использую Chef server 11 на платформе CentOS 6. Устанавливается через RPM из Opscode. Я установил свою рабочую станцию на 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, что наводит меня на мысль, что я пытаюсь отредактировать _default
Окружающая среда. Итак, создали среду Dev, подтвердили, что она существует, и:
knife cookbook upload getting-started -E Dev
Тот же результат. Моим последним средством было указать учетную запись администратора:
knife cookbook upload getting-started -E Dev -u admin
Тот же результат.
Что мне нужно сделать, чтобы успешно загрузить эту поваренную книгу?
У меня была такая же проблема при установке по умолчанию. Оказывается, в URL-адресе сервера knife.rb также нужен https: // вместо http: //.
Я также получил эту ошибку, когда попытался загрузить роль повара из локального файла json, но в моем локальном файле json отсутствовали свойства. Когда я использовал режим повышенной детализации, я увидел, что нож пытается выполнить операцию HTTP PUT, и получил HTTP 405 Method Not Allowed
ответ.
Таким образом, похоже, что ошибка «Метод запрещен» в основном означает, что нож отправил HTTP-запрос, который сервер Chef не понял.
Чтобы исправить мою проблему с ролью, как только я использовал правильный формат роли (показанный ниже), все заработало.
{
"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": {}
}
Ошибка «Метод запрещен» на самом деле HTTP 405 ошибка. Я этого не знал. Оказалось, что на моем сервере Chef было какое-то странное перенаправление. Я бы обратился к серверу по его полному доменному имени, но меня перенаправили бы на имя хоста. Я включил "лишнюю" многословность:
knife cookbook upload getting-started -V -V
И сообщения отладки сообщают мне, что при начальной загрузке был получен HTTP 301 (Permanently Moved). Когда Knife пытался попасть на новый адрес, он использовал GET вместо POST, вызывая ошибку 405. Я настроил Knife так, чтобы он указывал на перенаправленный URL-адрес, и загрузка прошла успешно.