A origem do Berksfile não reconhece servidor Chef auto-hospedado

6

Eu tenho um servidor Chef auto-hospedado. Eu posso knife upload para esse servidor, e de outra forma interagir com ele. Portanto, meu knife.rb funciona bem. Eu recentemente parametrizei um livro de receitas para torná-lo a base para uma família de livros de culinária relacionados.

O problema é que eu quero que este livro de receitas seja privado, então ele só existe no meu servidor Chef privado. Infelizmente, não posso fazer berks install em meus outros livros de receitas. Eu indiquei meu Berksfile no meu servidor Chef:

source https://chef.myhost.com

Isso não funciona. Eu acho que é porque essa URL é para o Chef Manage, não para a Chef Server API. No entanto, estou em uma perda de como fazer com que a Berkshelf reconheça meu Chef Server e use sua API.

O erro completo:

> berks install
Resolving cookbook dependencies...
Fetching 'blog_role' from source at .
Fetching cookbook index from chef.myhost.com...
Error retrieving universe from source: chef.myhost.com * [Berkshelf::APIClient::BadResponse] bad response #<Faraday::Response:0x36ae618 @on_complete_callbacks=[], @env=#<Faraday::Env @method=:get @body="<html><body>You are being <a href=\"chef.myhost.com:443/signup\">redirected</a>.</body></html>" @url=#<URI::HTTPS:0x36891f0 URL:chef.myhost.com/universe> @request=#<Faraday::RequestOptions timeout=30, open_timeout=30> @request_headers={"User-Agent"=>"Faraday v0.9.1"} @ssl=#<Faraday::SSLOptions (empty)> @response_headers={"server"=>"ngx_openresty/1.4.3.6", "date"=>"Sun, 08 Feb 2015 19:49:10 GMT", "content-type"=>"text/html; charset=utf-8", "transfer-encoding"=>"chunked", "connection"=>"close", "status"=>"302 Found", "strict-transport-security"=>"max-age=631138519", "x-frame-options"=>"DENY", "x-webkit-csp"=>"default-src 'self' chrome-extension:; connect-src 'self' chrome-extension:; font-src 'self' themes.googleusercontent.com chrome-extension:; frame-src 'none' chrome-extension:; img-src 'self' ssl.google-analytics.com chrome-extension: data:; media-src 'none' chrome-extension:; object-src 'none' chrome-extension:; script-src 'self' ssl.google-analytics.com 'unsafe-inline' chrome-extension:; style-src 'self' 'unsafe-inline' fonts.googleapis.com chrome-extension:; script-nonce REDACTED;", "x-xss-protection"=>"1", "location"=>"chef.myhost.com:443/signup", "x-ua-compatible"=>"IE=Edge,chrome=1", "cache-control"=>"no-cache", "set-cookie"=>"chef-manage=REDACTED; path=/; secure; HttpOnly", "x-request-id"=>"REDACTED", "x-runtime"=>"0.034395"} @status=302>>
Unable to satisfy constraints on package source_deploy, which does not exist, due to solution constraint (app_role = 0.9.1). Solution constraints that may result in a constraint on source_deploy: [(app_role = 0.9.1) -> (source_deploy >= 0.0.0)]
Missing artifacts: source_deploy
Demand that cannot be met: (app_role = 0.9.1)
Unable to find a solution for demands: app_role (0.9.1)

Então, ele tenta acessar o link , mas ele é devolvido para a página / signup, porque esse é o Chef Manage, não Chef Server API ... Mas não tenho ideia de onde a API é acessível por padrão, se é que é. Eu li pela última hora vários documentos, e não apareceu nada ...

    
por Rothbard 08.02.2015 / 20:48

2 respostas

1

Acontece que o source em um Berksfile é realmente a URL de um servidor da API Berkshelf , não uma API do servidor Chef .

Depois de fazer gem install berkshelf-api e configurar o config.json para usar meu Chef Server como um endpoint, consegui executar berks-api e depois usar a porta 26200 no meu Chef Server como o destino do source no %código%.

A partir daqui, Berksfile e berks install funcionaram.

    
por 08.02.2015 / 22:47
0

Acabei de ter o mesmo problema que você. Desde a atualização para uma versão mais recente do Chef Server e do Chef DK em um ambiente re-roll fui usar berkshelf para gerenciamento de dependências.

Meu arquivo metadata.rb para um livro de receitas, vamos chamá-lo second_local_cookbook referenciado first_local_cookbook desta forma:

depends 'first_local_cookbook'

Então, quando eu corro:

berks install

Em second_local_cookbook para determinar as dependências do livro de receitas e o comando falhará da mesma maneira que você:

Fetching cookbook index from https://supermarket.chef.io...
Unable to satisfy constraints on package first_local_cookbook, which does not exist, due to solution constraint (second_local_cookbook = 0.1.0).
Solution constraints that may result in a constraint on first_local_cookbook: [(second_local_cookbook = 0.1.0) -> (first_local_cookbook >= 0.0.0)]
Missing artifacts: first_local_cookbook

Eu não tentei sua solução porque esperava que houvesse uma resposta simples para fazer referência a livros de culinária privados locais sem ter que instalar uma nova API de servidor. E eu encontrei este problema fechado no GitHub do berkshelf ( link ). Para fazer referência a um livro de receitas local de outro livro de culinária, você simplesmente faz referência ao first_local_cookbook no Berksfile de second_local_cookbook antes da área metadata assim:

source 'https://api.berkshelf.com'

cookbook 'first_local_cookbook', path: '../first_local_cookbook'
metadata

E a execução de berks install seria bem-sucedida:

berks install
Resolving cookbook dependencies...
Fetching 'first_local_cookbook' from source at ../first_local_cookbook
Fetching 'second_local_cookbook' from source at .
...

Posso executar o upload dos berks com êxito:

berks upload second_local_cookbook --no-freeze
Uploaded second_local_cookbook (0.1.0) to: 'https://chefserver:443/organizations/organization'
    
por 25.07.2016 / 18:11