1

Nginxクックブックに依存するアプリケーション用のクックブックを開発しました。次の場所からNginxクックブックをダウンロードしました

https://github.com/miketheman/nginx

クックブックにデフォルトのレシピを含め、デフォルトの属性ファイルで指定されたバージョン属性を上書きしようとしました。しかし、私が何をしていても、Nginx バージョン 1.0.x がインストールされています。バージョン情報を取得している場所を追跡できませんでした。誰でもこの問題を解決できますか?

ありがとう

4

3 に答える 3

4

独自のラッパー クックブックでクックブックを依存関係として指定する場合nginx、属性ファイルの厳密な読み込み順序に対処する必要があります。Chef 11 以降、すべての依存関係クックブックは、それらを必要とするクックブックの前に最初にロードされます。依存クックブック ( を含むnginx) が読み込まれると、属性ファイルが次の順序で読み込まれ、評価されます。

  • attributes/default.rbnginx
  • nginxアルファベット順の他のすべての属性ファイル
  • attributes/default.rbあなたの料理本の
  • クックブックの他のすべての属性ファイル (アルファベット順)

ご覧のとおり、nginx クックブックのすべての属性は、独自の属性ファイルが読み込まれる前に初期化されます。したがって、依存属性 (つまり、他の既存の属性の値を使用して初期化されるもの) は、独自のものではなく、nginx クックブックで定義された値を使用します。

ご覧のとおり、node['nginx']['source']['version']は で初期化されnode['nginx']['version']ているため、デフォルト値を使用しています。node['nginx']['version']後でクックブックを変更しても、この値は変更されません。

しかし、恐れる必要はありません。解決策があります :) 特定の属性ファイルを再ロードして、属性を再設定することができます。ここで、nginx のバージョンを上書きしたい場合、これはかなり便利です。これはattributes/default.rb、私のnginxラッパークックブックで私がしていることです:

override['nginx']['version'] = '1.6.0'
override['nginx']['source']['checksum'] = '943ad757a1c3e8b3df2d5c4ddacc508861922e36fa10ea6f8e3a348fc9abfc1a'

# Reload nginx::source attributes with our updated version
node.from_file(run_context.resolve_attribute('nginx', 'source'))
于 2014-07-08T10:29:20.313 に答える
1

ここでの本当の問題は、['nginx']['version']が期待どおりに動作しないことだと思います。

READMEファイルによると...

  • nginx::defaultまたはレシピを使用する場合nginx::repo、プラットフォームのリポジトリ、または Nginx メンテナーによって提供される「安定した」リポジトリから最新のバイナリ パッケージをロードします。version属性は実質的に無視されます!! .

  • このversion属性は、レシピを使用する場合にのみ受け入れられます。このnginx::sourceレシピでは、フェッチおよびビルドされるソース アーカイブの URL が決定されます。

  • nginx::ohaiレシピを使用すると、現在インストールされている Nginx のバージョンに従って属性が更新されます。version

まだクリア?そうでない場合:

  • nginx::default(通常)Nginxの古いバージョンを提供します
  • nginx::repoNginxの(通常)より新しい安定バージョンを提供します
  • nginx::source必要な Nginx のバージョンを指定できる唯一のレシピです。

それがあなたが見ているものを説明していないように思われる場合...レシピのソースコードに飛び込む必要があります. レシピの動作 (インストール リポジトリの選択など) は、プラットフォームやファミリによって異なります。

于 2014-07-11T10:00:20.440 に答える