はじめに
コンピューターの自動構成管理-多数のコンピューターを所有する企業にとって必須です。
今日、 Puppetは管理者の間で非常に人気がありますが、私の意見では、自己記述DSL(サブジェクト指向プログラミング言語)を備えた製品は本質的に制限されています。
Chefは、RubyベースのDSLを使用しているため、エレガントで無制限の拡張性が得られます。
更新: spanasikは私を修正しました。Puppetには外部DSLに加えてRubyベースの内部DSLもあります。
建築
このアプリケーションは、サーバー(chefサーバー)とクライアント(chef-client)部分で構成されています。 さらに、サーバーからのサポートなしで動作するクライアントがあります(chef-solo)。 サーバーは、ノード(Chefを実行しているコンピューター)および必要なアクションに関する情報を収集して提供する責任があります。
管理者の観点から、単純に新しいノードをChefに追加し(新しいノードで標準スクリプトを実行)、必要なロールとレシピをドラッグしてノードを構成します。 標準シナリオの残りの部分は、ユーザーの参加なしに自動的に行われます。
結び目
Chefに登録されたコンピューターはノードと呼ばれます。 使用されているレシピのリストはいつでも表示および変更できますが、
ノードのさまざまな特性(ip、fqdn、プロセッサの数、他の多くのパラメーター、属性)を調べます。これらは両方とも、シェフ自身(ohaiを使用)によって収集されます。
レシピの作成者にとって、レシピコードで必要なノードをその属性で常に検索し、必要に応じてこれらの属性を使用できることは非常に重要です。
例えば
template "/etc/my-software.conf" do source "my-software.conf.erb" variables :trackers => search(:node, "recipe:tracker") notifies :restart, resources(:service => "my-software"), :delayed end
クックブック
マシンのフリートを管理するために、クックブックのセットが使用されます。その多くはすでに記述されており( Opscode 、 37 Signals 、 Engine Yard )、一部は(アプリケーション用に)自分で記述できます。
クックブックは、メタデータ(ブック間の依存関係の定義など)、レシピ(ターゲットノードでのアクション)、リソース定義(サービスなど)、関数ライブラリ(Rubyで記述できるコードのみ)、テンプレート(ファイル、埋め込みルビーテンプレートエンジンを使用してノードで生成された)、ファイル(変更されずにコピーされます)、および属性(ノードに関連付けられたJSONデータ)。
ところで、テンプレート、ファイル/ディレクトリ/リンク(リモートでコピーまたはローカルに作成、インタープリターコマンド、OSのパッケージ(rpm、debなど)、init.dサービス、Unixユーザー、リポジトリなどの基本リソースを知っておくことが重要です。 VCSやその他の機能は、すでにChefの基本供給に含まれています。
何かが足りない場合、いつでも見つけるか自分で書くことができます。
例
単位
runitサービスとしての製品のインストールは、たとえば次のように実行できます。
include_recipe "runit" # It setups runit. package "tar" do version "1.16.1-1" action :install end gem "rails" do version "2.3.5" end git "our-code" do destination "/opt/our-code" repository "git://our-code.local/our-code.git" reference "HEAD" action :export end runit_service "our-service" do restart_on(:deploy => "our-code") end
デフォルトでは、サービスは実行が許可された状態で作成され、起動テンプレートとロギングテンプレートは必要な場所に配置され、その後サービスは常に管理(アップ、ダウンなど)可能になります。
また、 GodまたはMonitスクリプトを簡単に構成できます。