前書き
ITインフラストラクチャ向けの高速でスケーラブルな構成管理ツールを探している場合は、CFEngineを試してみてください。 それが提供する機能は、PuppetやChefなどの他の一般的なツールが提供する機能と非常に似ていますが、CFEngineはメモリとCPU使用率の両方でフットプリントがはるかに小さく、Cで記述されて実行されるため一般的に高速ですOS上でネイティブ。
このチュートリアルでは、Ubuntu 14.04にCFEngine Community Edition 3.6.5をインストールして使用する方法を学習します。
ステップ1-CFEngineのパッケージリポジトリの追加
`+ apt-get `を使用してCFEngineの最新バージョンをインストールするには、CFEngineのパッケージリポジトリをサーバーのリポジトリリストに追加する必要があります。 これを行うには、 ` add-apt-repository`コマンドを使用します。
sudo add-apt-repository 'deb http://cfengine.com/pub/apt/packages stable main'
ステップ2-CFEngineの公開キーの追加
前の手順で追加したリポジトリは、CFEngineの公開キーをAPTの信頼できるキーのリストに追加するまで使用できません。
`+ wget`を使用してCFEngine公開キーをダウンロードします。
wget http://cfengine.com/pub/gpg.key -O /tmp/gpg.key
`+ apt-key +`を使用して、信頼できるキーのリストに追加します。
sudo apt-key add /tmp/gpg.key
ステップ3-CFEngineのインストール
`+ apt-get +`を使用してCFEngine Community Editionをインストールできるようになりました。
sudo apt-get update && sudo apt-get install cfengine-community
続行する前に、インストールを確認します。
cf-agent --version
次のような出力が表示されるはずです。
cf-agentの出力
CFEngine Core 3.6.5
ステップ4-ポリシーハブの開始
このチュートリアルでは単一のUbuntuサーバーを使用しているため、ポリシーハブとしてもクライアントとしても使用します。 CFEngineのポリシーハブを起動するには、サーバーのIPアドレスでブートストラップする必要があります。
sudo cf-agent --bootstrap
このコマンドが正常に完了すると、CFEngineが完全に構成され、サーバーで使用できるようになります。
ステップ5-最初のポリシーの作成
CFEngineを使用してシステム管理タスクを自動化するには、そのためのポリシーファイルを作成する必要があります。 ポリシーファイルは、CFEngine独自のDSL(ドメイン固有言語)で記述されています。 この言語にはかなり急な学習曲線がありますが、基本的なタスクの実行は簡単です。
簡単な「Hello World」ポリシーを作成することから始めましょう。 `+ nano `またはお気に入りのテキストエディターを使用して、 ` / tmp `ディレクトリに ` myPolicy.cf +`という新しいファイルを作成します。
nano /tmp/myPolicy.cf
CFEngineを使用して実行するコマンドは、_bundle_にグループ化する必要があります。 バンドルにはさまざまなタイプがあります。 今のところ、 + c&f-agent`が楽しめるバンドルを作成します。 コンソールにメッセージを出力するには、 `+ reports +
promiseを使用する必要があります。 したがって、ファイルに次のコードを追加します。
myPolicy.cf
bundle agent SayHello {
reports:
"Hello!";
}
ファイルを保存して終了します。
これで、 `+ cf-agent`コマンドを使用してポリシーを実行できます。
sudo cf-agent -b SayHello /tmp/myPolicy.cf
次のような出力が表示されるはずです。
cf-agentの出力
R: Hello!
手順6-ポリシーサーバーへのポリシーの追加
前のステップでは、 `+ cf-agent `コマンドを使用してポリシーを手動で実行しました。 ポリシーを自動的に、さらに重要なことには複数のマシンで実行するには、ポリシーサーバーに追加する必要があります。 デフォルトでは、サーバーに追加されたポリシーは、 ` cf-agent +`によって5分ごとに実行されます。
次に、 `+ / tmp +`ディレクトリにファイルを作成するもう少し高度なポリシーを作成しましょう。
`+ nano `またはお気に入りのテキストエディターを使用して、 ` createFilePolicy.cf +`という新しいファイルを作成します。
nano /tmp/createFilePolicy.cf
このポリシーでは、 `+ files `約束を使用してファイルを作成し、 ` reports +`約束を使用してファイルが作成されたことを示すメッセージを表示します。
次のポリシーは、「+ / tmp 」ディレクトリに「 hello.txt +」という名前の空のファイルを作成します。 次のコードをポリシーに追加します。
createFilePolicy.cf
bundle agent CreateHelloFile {
files:
"/tmp/hello.txt"
create => "true";
reports:
"File created";
}
ファイルを保存して、「+ nano +」を終了します。
次のコマンドを入力してポリシーを実行します。
sudo cf-agent -b CreateHelloFile /tmp/createFilePolicy.cf
完了したら、「+ ls 」コマンドを実行して、「 hello.txt 」が「 / tmp +」に作成されたことを確認できます。
ls /tmp
ポリシーにエラーがなく、想定されていることを実行していることがわかったので、サーバーに追加しましょう。
ポリシーサーバーは、 `+ / var / cfengine / masterfiles / `ディレクトリからポリシーを提供します。 したがって、 ` createFilePolicy.cf `を ` masterfiles +`にコピーします。
sudo cp /tmp/createFilePolicy.cf /var/cfengine/masterfiles/
次に、CFEngineがポリシーファイルとその中のバンドルについて知るために、それらへの参照をCFEngineのメインポリシーファイルである `+ promises.cf `に追加する必要があります。 ` promises.cf `を編集するには、 ` nano +`を使用します。
sudo nano /var/cfengine/masterfiles/promises.cf
`+ inputs +`リストの最後にポリシーファイルの名前を追加します。 変更後、リストは次のようになります。
promises.cfの抜粋
inputs => {
...
# List of services here
"services/file_change.cf",
};
行末のカンマを省略しないでください。
さらに、ポリシーファイル内のバンドルの名前は、ファイルの上部にある `+ bundlesequence `リストに記載する必要があります。 ` bundlesequence `の最後の項目として ` CreateHelloFile +`を追加します。
promises.cfの抜粋
bundlesequence => {
...
# Agent bundle
cfe_internal_management, # See cfe_internal/CFE_cfengine.cf
service_catalogue,
@(cfengine_enterprise_hub_ha.management_bundles),
};
行末のカンマも省略しないでください。 ファイルを保存して終了します。
これでポリシーがポリシーサーバーに追加され、5分ごとに実行されます。 つまり、 `+ / tmp / hello.txt +`を削除しても、CFEngineは5分後に自動的に再作成します。
ポリシーを削除する場合は、最初にバンドルの名前とポリシーファイルの名前を `+ promises.cf `から削除してから、ポリシーファイルを ` masterfiles +`ディレクトリから移動する必要があります。
結論
このチュートリアルでは、CFEngineのパッケージリポジトリを使用して、Ubuntu 14.04サーバーにCFEngine Community Editionの最新バージョンをインストールする方法を学びました。 また、簡単なポリシーを手動および自動で作成および実行する方法も学びました。 CFEngineを使用して、サーバーの構成を管理できるようになりました。
DSLの詳細については、https://docs.cfengine.com/latest/reference.html [CFEngine 3.6 Manual]を参照してください。