3

まず、シェフは特定の役割で指定された間隔でレシピを実行できますか(そしてそれは良い習慣ですか)?

ユーザーアカウントとsshIDを管理するrubyスクリプトがあります。現在、1時間ごとにcronで実行されており、明らかな理由でChefレシピに変換したいと思います(すべてのマシンに存在させたい)。

私はこれを行う2つの方法を見ることができます:

スクリプトをテンプレートに変換するか、レシピはテンプレートを特定のパスにレンダリングしてからcronジョブを登録するだけです。

また

スクリプトをリソースやプロバイダーなどに分割し、Chefに1時間ごとに実行させます。

アイデア?

4

2 に答える 2

8

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

Chefのリソースプロバイダーは、べき等のアクションを実行して、リソースを目的の状態に構成します。これは、Chefがすでにシステムで実行されている場合、レシピの内容と一致しない場合にのみリソースを変更することを意味します。たとえば、次のようなレシピがある場合:

package "haproxy"

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

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

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

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

また、サーバーを使用する場合、Chefには「1回限り」または「1回限り」のレシピ実行リストがありません。最近、Chefメーリングリストにこのトピックに関するスレッドがありました。

于 2011-02-06T20:00:06.133 に答える
2

どちらも実行可能です。
あなたが言及したあなたのオプションは次のとおりです。

1)

スクリプトをテンプレートに変換すると、レシピはテンプレートを特定のパスにレンダリングしてからcronジョブを登録するだけです。

これは簡単に始めることができます(スクリプトに実際の変更はなく、スクリプトが確実に存在するようにします)

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

または2)

スクリプトをリソースやプロバイダーなどに分割し、Chefに1時間ごとに実行させます。

このオプションは、シェフに似ており、おそらくより信頼性が高く、スケーラブルです。特に、より多くのインフラストラクチャをシェフの管理下に置く場合はそうです。

chefクライアントがデーモン化されている場合、またはchef-soloがcronで実行されている場合は、うまく機能します。

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

次に、「データバッグ」(jsonデータ)を使用してユーザーの詳細を保存し、それに基づいてユーザーをインストールするのが最善の策です。これは、このレシピでopscodeが行ったこととまったく同じです(インスピレーションについては./recipe/sysadmins.rbを参照してください): https ://github.com/opscode/cookbooks/tree/master/users

chef-server(またはopscodeプラットフォーム)を使用していることに注意してください。chef-soloを使用している場合は、'search(:users、' groups:sysadmin')'を、chef-soloが取得できる場所(ダウンロード可能、またはシェフ内)にある独自のデータバッグファイルに置き換える必要があります。 -レポ)。

于 2011-06-28T00:36:45.263 に答える