Chef-clientがサーバーからクックブックを更新しない


9

シェフの料理本(apache2用)があります。1つのノードでは機能しません。だから私はそれを微調整して更新しようとしていますが、ノードは新しいバージョンをダウンロードしていないようです。ローカルマシンからchefサーバーにすべてをアップロードすることができましたknife upload .。これは成功し、変更した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)

私はシェフが初めてなので、初心者の間違いをしたかもしれません。


chef-server Webインターフェースに移動し、クックブックに変更があるかどうかを確認します。
Draco Ater、2015年

1
あなたが実行したことを確認してくださいknife cookbook upload <cookbook_name>。それでも解決しない場合は、バージョンknife cookbook list <cookbook_name>を上げて実行し、本当に正しくアップロードされていることを確認してください。または、knife cookbook download(別のディレクトリで)を実行して、サーバーが適切なコードであると考えているものをプルダウンします。
Tejay Cardon、2015年

回答:


6

私があなたに役立つかもしれないと考えることができることがいくつかあります。

  1. アップロードするクックブックのバージョンが最新バージョンであることを確認してください

    クックブックのバージョン管理に関する一般的な問題は、クックブックのバージョン1.0.0をローカルで変更してアップロードしている可能性がありますが、Chef Serverにはすでにクックブックのバージョン1.0.1がアップロードされています。その場合、Chef Clientは通常、(特に指示がない限り)最新バージョンを取得し、変更はローカルキャッシュに同期されません。

    Chef Serverのクックブックのすべての現在のバージョンは、次の方法で確認できます。 knife cookbook show apache2

    これに対する1つの解決策は、あなたが言及したものです-バージョン番号をChef Serverに存在するもの、つまり1.0.2を超えて増やしてアップロードします。

    別の方法は、他のapache2クックブックをChef Serverから削除し、必要なものを再アップロードすることです。これはバージョン番号の更新を必要とせず、結果としてChef Serverは単一のapache2クックブックを持つことになります。

  2. 変更が実際に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追加すると、さらにデバッグするのに役立ちます。


1
この回答をありがとうございました...それは、私たちの環境/production.rbではなく、berkshelfによって設定された本番環境にクックブックの制約があることに気づきました!それができることすら知らなかった。とにかく、production.rb環境を再アップロードした後、新しいシェフの実行が最新のアプリクックブックを取得しました。
Colin Curtin

2

まずサーバー上のすべてのバージョンのクックブックをデバッグしてから、クライアントがダウンロードしているクックブックのバージョンを確認します。古い場合は、サーバーのバージョンが更新されているかどうかを確認してください。それもyesの場合は、chefサーバーUIに移動して、envを確認してください。クックブック制約が指定されている環境をセットアップしている可能性があります。向こうのバージョンを更新してください。そうすれば、再び動作し始めます。


1

これの別の原因は、すべてのクックブックの依存関係がchef-serverに存在しないことです。たまたまこれに遭遇し、新しいバージョンのクックブックが表示されてknife cookbooks listいましたが、クライアントは新しいバージョンを使用していませんでした。デバッグの結果、バークシェルフもナイフも私のクックブックの新しい依存関係をアップロードしていないことがわかりました。それをアップロードした後、クライアントは新しいバージョンの使用を開始しました。


ナイフクックブックのアップロード<cookbook_name>を実行したことを確認してください
Net Runner
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.