web-dev-qa-db-ja.com

Berksfileソースが自己ホスト型Chefサーバーを認識しない

私は自己ホスト型のChefサーバーを持っています。できます knife uploadそのサーバーに、またはそれ以外の場合はサーバーと対話します。したがって、私のknife.rb 正常に動作します。私は最近、関連するクックブックのファミリーの基礎にするために、クックブックをパラメーター化しました。

問題は、このクックブックをプライベートにしたいので、プライベートChefサーバーにのみ存在することです。残念ながら、それではberks install他の料理本。 BerksfileをChefサーバーに向けました。

source https://chef.myhost.com

これは動作しません。私thinkこれは、そのURLがChef ServerAPIではなくChefManage用であるためです。しかし、BerkshelfにChef Serverを認識させ、そのAPIを使用させる方法がわからなくなっています。

完全なエラー:

> 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)

したがって、アクセスを試みます https://chef.myhost.com/universe ですが、これはChef ServerAPIではなくChefManageであるため、/ signupページにバウンスされます...しかし、私は仮にあったとしても、デフォルトでAPIにアクセスできる場所がわかりません。私は過去1時間、さまざまなドキュメントを読みましたが、何も見つかりませんでした...

6
Rothbard

sourceBerksfileは、実際にはBerkshelf API Servernot a Chef Server APIのURLであることがわかります。

gem install berkshelf-apiを実行し、ChefServerをエンドポイントとして使用するようにconfig.jsonを構成した後、berks-apiを実行し、ChefServerのポート26200をsourceのターゲットとして使用することができました。 Berksfile

ここから、berks installberks uploadの両方が機能しました。

1
Rothbard

私はあなたと同じ問題を抱えていました。環境のリロールでChefServerとChefDKの新しいバージョンに更新してから、依存関係の管理にberkshelfを使用するようになりました。

クックブックの私のmetadata.rbファイル、それをsecond_local_cookbook参照と呼びましょうfirst_local_cookbookこのように:

depends 'first_local_cookbook'

それから私が走るとき:

berks install

second_local_cookbookでクックブックの依存関係を判別すると、コマンドは次のように失敗します。

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

新しいサーバーAPIをインストールせずに、ローカルのプライベートクックブックを参照する簡単な答えがあることを期待していたため、ソリューションを試しませんでした。そして、berkshelfのGitHub( https://github.com/berkshelf/berkshelf/issues/892 )でこのクローズされた問題を見つけました。別のクックブックからローカルクックブックを参照するには、Berksfilefirst_local_cookbookを参照するだけです。 -)のsecond_local_cookbookの前のmetadata領域の前:

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

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

そして、berksinstallの実行は成功します。

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

その後、berksアップロードを正常に実行できます。

berks upload second_local_cookbook --no-freeze
Uploaded second_local_cookbook (0.1.0) to: 'https://chefserver:443/organizations/organization'
0
James Eby