Eu tive esse mesmo problema de uma instalação padrão. Acontece que o knife.rb precisava de https: // em vez de http: // no URL do servidor também.
Estou executando o servidor Chef 11 em uma caixa do CentOS 6. Instalado através do RPM do Opscode. Eu configuro minha estação de trabalho em uma caixa do Windows 7. Eu posso rodar o usual knife client list
e obter uma resposta, então estou confiante de que meu servidor está funcionando corretamente.
Eu criei um repositório local do Git na estação de trabalho, adicionei o livro de receitas inicializado e o enviei para o repositório local (no disco local na estação de trabalho).
Quando tento enviar o livro de receitas, no entanto:
knife cookbook upload getting-started
Uploading getting-started [0.4.0]
ERROR: Method Not Allowed
Response:
A resposta está vazia. Quando tento um knife cookbook list
, recebo um conjunto vazio. Eu imagino que é porque está buscando isso do servidor, que ainda não tem o livro de receitas.
Eu vi esta postagem no antigo wiki do Opscode, o que me levou a acreditar que estou tentando editar o ambiente _default
. Então criei um ambiente Dev, confirmou que existia e:
knife cookbook upload getting-started -E Dev
O mesmo resultado. Meu último recurso foi especificar uma conta de administrador:
knife cookbook upload getting-started -E Dev -u admin
O mesmo resultado.
O que preciso fazer para carregar com sucesso este livro de receitas?
Eu também recebi este erro quando tentei enviar uma função de chef de um arquivo json local, mas tinha propriedades faltando no meu json local. Quando usei o modo de detalhamento extra, vi que a faca estava tentando uma operação HTTP PUT e recebeu a resposta HTTP 405 Method Not Allowed
.
Portanto, parece que o erro "Método não permitido" significa basicamente que a faca enviou uma solicitação HTTP que o servidor Chef não entendeu.
Para corrigir o meu problema com o papel, uma vez que usei o formato de função correto (mostrado abaixo), funcionou bem.
{
"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": {}
}
O erro "Método não permitido" é, na verdade, um erro HTTP 405 . Eu não sabia disso. Acontece que eu tive algum redirecionamento estranho no meu servidor Chef. Gostaria de abordar o servidor pelo seu FQDN, mas ser redirecionado para o nome do host. Liguei verbosidade 'extra':
knife cookbook upload getting-started -V -V
E as mensagens de depuração me avisam que o upload inicial estava recebendo um HTTP 301 (permanentemente movido). Quando a faca tentava acertar o novo endereço, usava um GET em vez de um POST, fazendo com que o 405 configurasse a faca para apontar para a URL redirecionada e o upload fosse um sucesso.