Chef Knife Загрузить поваренную книгу: метод не разрешен
Я использую 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
среда. Итак, создали среду разработки, подтвердили ее существование и:
knife cookbook upload getting-started -E Dev
Тот же результат. Моим последним средством было указать учетную запись администратора:
knife cookbook upload getting-started -E Dev -u admin
Тот же результат.
Что мне нужно сделать, чтобы успешно загрузить эту кулинарную книгу?
3 ответа
У меня была такая же проблема из установки по умолчанию. Оказывается, что для knife.rb нужен https:// вместо http:// в URL-адресе сервера.
Я также получил эту ошибку, когда попытался загрузить роль шеф-повара из локального файла 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 (постоянно перемещенный). Когда нож пытался поразить новый адрес, он использовал GET вместо POST, в результате чего 405. Я настроил нож, чтобы он указывал на перенаправленный URL, и загрузка прошла успешно.