2011-02-06 21 views
3

まず、シェフはレシピを特定の役割で指定された間隔で実行できますか?シェフ - 繰り返しレシピ実行

私はユーザーアカウントとssh IDを管理するルビースクリプトを持っていますが、現在は毎時間cronで実行されています。私はそれをシェフのレシピにしたいと思います。すべてのマシン)。

私はこれを行うための二つの方法を確認でき

:テンプレートに

どちらのターンスクリプトは、レシピは、単に与えられたパスにテンプレートをレンダリングして、cronジョブを登録します

OR

スクリプトをリソース、プロバイダなどに分け、シェフに毎時間実行させてください。

アイデア?

答えて

8

デーモン(initスクリプトで使用される-dオプション)、またはupstart,runit/daemontoolsまたはbluepillのようなサービス管理ツールの下でchef-clientを実行できます。確かにcronから起動することもできます。デーモンモードを実行しないようにしてください:)。

シェフのリソースプロバイダは、リソースを希望の状態にするように偶発的なアクションを行います。これは、シェフが既にシステム上で稼動している場合、レシピが示すものと一致しない場合にのみリソースを変更することを意味します。たとえば、あなたがレシピを持っている場合は言うこと:

package "haproxy" 

service "haproxy" do 
    action [:enable, :start] 
end 

template "/etc/haproxy/haproxy.cfg" do 
    source "haproxy.cfg.erb" 
end 

パッケージが初めてシェフの実行をインストールされ、パッケージがシステムから削除するか、リソースを変更していない限り、再び変更されることはありません。同様に、haproxyサービスは(プラットフォームのサービス管理ツールで、通常は/etc/rc*.dのシンボリックリンクで)有効になり、その後/etc/init.d/haproxy startを介して開始されます。最後に、テンプレートの内容が変更された場合にのみ、Chefは新しいバージョンのテンプレートをレンダリングします。テンプレートの場合は、SHA256チェックサムに基づいてこれを判断します。

いくつかの例外があります。実行、スクリプト、およびruby_blockリソースは、何らかの種類の修飾子を条件なしで指定することなく、冪等ではありません。

また、シェフには、サーバーの使用時に「ワンタイム」または「ワンオフ」レシピの実行リストがありません。このトピックについて最近thread on the Chef mailing listがありました。

+0

答えをありがとう。エージェントはデーモンとして実行されています。私の質問はシェフが前に実行して正常に完了したとしても、毎回同じレシピを実行できるのですか? –

2

どちらも可能です。あなたが言及した
あなたのオプションは以下の通りであった。

1)

が、レシピは、単に 指定されたパス にテンプレートをレンダリングします テンプレートに、スクリプトを有効にして、cronジョブを登録

これは簡単に始めることができます(スクリプトの実際の変更はありません)。

シェフは毎回レシピを実行することを忘れないでください.jtimbermanはこう言っています。「レシピと一致しない場合は、リソースを変更するだけです。したがって、レシピが変更されたら新しいテンプレートを上書きするだけです。

OR 2)

等の資源、 プロバイダー、スクリプトにブレークし、シェフはそれ 毎時間実行してい

このオプションは、よりシェフ様で、おそらく信頼性とスケーラビリティに優れています。

シェフのクライアントがデーモン化されている場合、またはシェフのソロがcronで実行されている場合はうまくいくでしょう。

この場合、 'user'、 'group'、 'file'(sshキーをコピーする)などのリソースを使用してレシピを設定できます。詳細についてはこちらを参照してください:http://wiki.opscode.com/display/chef/Resources#Resources-File

次に、「データバッグ」(jsonデータ)を使用してユーザーの詳細を格納し、それに基づいてユーザーをインストールすることをお勧めします。これは、(インスピレーションのための./recipe/sysadmins.rbに見て)このレシピに行われてきたまさにopscodeです: https://github.com/opscode/cookbooks/tree/master/users

ちょうど彼らがシェフ・サーバー(またはopscodeプラットフォーム)を使用している注意してください。シェフソロを使用している場合は、 'search(:users、' groups:sysadmin ')を自分のデータバッグファイルで置き換える必要があります。シェフソロがダウンロードできる場所-repo)。

関連する問題