私はシェフのクックブック(Apache2用)を持っています。 1つのノードでは機能しません。だから私はそれを微調整して更新しようとしていますが、ノードは新しいバージョンをダウンロードしていないようです。 knife upload .
を使用してローカルマシンからchefサーバーにすべてをアップロードできました。これは成功し、変更したApache2クックブックのビットをアップロードしたことが出力されます。
ノードでchef-client
を手動で(ルートとして)実行すると、サーバーに接続したり、実行リストを取得したりすることがわかります。ただし、/var/cache/chef/cookbooks/Apache2
のレシピファイルは古いファイルです。そして、レシピは失敗します(私が行った変更がないため)。
ノード上のchefクライアントに、Apache2クックブックの新しく更新されたバージョンを使用させるにはどうすればよいですか?クックブックのバージョン番号を上げる必要がありますか(私はこれを行っていません)?
chef-client -l debug
出力:
[2015-01-30T10:51:31+01:00] DEBUG: Synchronizing cookbook Apache2
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/Apache2/recipes/mod_ldap.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/Apache2/recipes/mod_xsendfile.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/Apache2/recipes/mod_auth_openid.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/Apache2/recipes/mod_setenvif.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/Apache2/recipes/mod_python.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/Apache2/recipes/mod_authz_Host.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/Apache2/recipes/mod_proxy_ajp.rb, as the cache is up to date.
[2015-01-30T10:51:31+01:00] DEBUG: Not storing cookbooks/Apache2/recipes/mod_expires.rb, as the cache is up to date.
(lots of this for all files)
私はシェフが初めてなので、初心者の間違いをしたかもしれません。
私があなたに役立つかもしれないと考えることができることがいくつかあります。
アップロードするクックブックのバージョンが最新バージョンであることを確認してください
クックブックのバージョン管理に関する一般的な問題は、クックブックのバージョン1.0.0をローカルで変更してアップロードしている可能性がありますが、Chef Serverにはクックブックのバージョン1.0.1がすでにアップロードされています。その場合、Chef Clientは通常、(特に指示がない限り)最新バージョンを取得し、変更はローカルキャッシュに同期されません。
Chef Serverのクックブックの現在のすべてのバージョンは、次の方法で確認できます:knife cookbook show Apache2
これに対する1つの解決策は、あなたが言及したものです-バージョン番号をChef Serverに存在するもの、つまり1.0.2を超えて増やしてアップロードします。
別の方法は、Chef Serverから他のApache2クックブックを削除し、必要なものを再アップロードすることです。これはバージョン番号の更新を必要とせず、結果としてChef Serverは単一のApache2クックブックを持つことになります。
変更が実際にChef Serverに反映されていることを確認します
knife cookbook show Apache2 <cookbook version> recipes default.rb
の使用バージョン、パス、ファイル名を置き換えます-たとえば、foo.erbという名前のテンプレートを表示したい場合:knife cookbook show Apache2 0.1.0 templates foo.erb
このコマンドはChefサーバーにファイルを要求し、出力を端末に表示します。これは、行った変更がknife cookbook upload
経由でアップロードされていることを確認する簡単な方法です。
これらを超えても問題が解決しない場合は、knife
バージョン、chef-server
バージョン、chef-client
バージョン、およびknife cookbook upload Apache2 -VV
のデバッグログの詳細を追加すると、さらにデバッグするのに役立ちます。
最初にサーバー上のすべてのバージョンのクックブックをデバッグしてから、クライアントがダウンロードしているクックブックのバージョンを確認します。古い場合は、サーバーのバージョンが更新されているかどうかを確認してください。それもyesの場合は、chefサーバーUIに移動して、envを確認してください。クックブック制約が指定されている環境をセットアップしている可能性があります。向こうのバージョンを更新してください。そうすれば、再び動作し始めます。
これの別の原因は、すべてのクックブックの依存関係がchef-serverに存在しないことです。たまたまこれに遭遇し、クックブックの新しいバージョンがknife cookbooks list
しかし、私のクライアントは新しいバージョンを使用していませんでした。デバッグの結果、バークシェルフもナイフも私のクックブックの新しい依存関係をアップロードしていないことがわかりました。それをアップロードした後、クライアントは新しいバージョンの使用を開始しました。