web-dev-qa-db-ja.com

Berksfileのシェフ「cookbook」とmetadata.rbの「depends」

「cookbook」を使用してクックブックをBerksfileに追加することと、「depends」を使用してクックブックをmetadata.rbに追加することの違いは何ですか?たとえば、metadata.rbに追加した場合

depends 'nginx'

を使用してBerksfileに追加する必要がありますか

cookbook 'nginx'

58
tokenvolt

BerksfileはBerkshelf固有であり、メタデータファイルはChefに組み込まれています。

依存関係をメタデータファイルに追加すると、librarian-chefやスーパーマーケットなどの他のアプリケーションも依存関係を読み取ることができます。

Berkshelfは、metadata行をBerksfileに追加する限り、メタデータから依存関係も読み取ることに注意してください。

メタデータファイルですべての依存関係を指定し、特定のクックブックがスーパーマーケット(Githubやローカルパスなど)で利用できない場合は、Berksfileを使用して特定のクックブックの保存場所を指定することを強くお勧めします。

74
Nils Landt

Berksfileとmetadata.rbは解決する目的が異なり、クックブックのライフサイクルのさまざまな段階で現れます。

  1. Berksfileはクックブックの依存関係管理用です。クックブックが chef supermarket のコミュニティクックブックを使用している場合を考えてみましょう。この場合、まずスーパーマーケットからそのコミュニティクックブックをダウンロードし、自分のクックブックと一緒にシェフサーバーにアップロードする必要があります。 Berksfileは、このワークフローを簡単にします。単一のコマンド(berks install)で、すべての依存クックブック(および依存クックブック-推移的依存関係)をそれぞれのソース(gitリポジトリまたはスーパーマーケットから)からダウンロードします。別の単一のコマンドberks uploadを使用すると、これらすべてのクックブックがchefサーバーにアップロードされます。 knife cookbook uploadで個別にアップロードする必要はありません。特定のクックブックのライフサイクルにおけるBerksfileの役割はここで終了します。

  2. metadata.rbは、実際にノードを収束しながらchef-clientによって参照されます。このファイルを使用して、必要なすべてのクックブックをシェフサーバーからダウンロードします(これらのクックブックはberkshelfまたはknifeを使用してシェフサーバーで利用可能になっていると仮定)。走る。

16
vinayakshnd