全開でChefで運用する環境が整いましたので
実際にレシピを作成してみましょう
>> Chef-Serverの構築
やっとChefを触れます
いろいろな単語や機能ができてきますが
やっていることはスクリプトでサーバに設定を適応するのと同じです。
Rubyコーディングができなくても、簡単なライブラリや構文の利用だけでも十分
Rubyコーディングを利用しなくても十分できます。
ではレッツクッキング!
の前に、せっかくサーバがあり、機能を視覚的にわかるので
どのような調理器具があるか確認しながら行きましょう。
Chefリポジトリの作成
Chefでレシピを作成するに当たり、「リポジトリ」というディレクトリ構成を作成します
リポジトリのディレクトリ構成をOpscodeがGitHubに公開しているので
それを利用しましょう。
# git clone https://github.com/opscode/chef-repo.gitリポジトリを作成後、レシピを作成していくわけですが
ChefServerをインストールした後に見てみると
ChefCerverの各項目がそのままリポジトリのディレクトリ構成になっていますね
リポジトリのディレクトリ構成イメージになります。
このリポジトリの中に「クックブック」というレシピの集合体を作ります。
CookBookの作成
たとえば、ChefSoloの場合
# vi /etc/chef/solo.rb cookbook_path "/chef/chef-repo/cookbooks"CookBookの作成
# knife cookbook create <クックブック名>クックブックを作成すると、下記のようなディレクトリ群がCookBook内に作成されます
CHANGELOG.md | CookBookの変更内容を記録する |
README.md | CookBookの概要を記述 |
attributes | CookBookで利用する変数Attributeを格納するディレクトリ |
definitions | Definitionというファンクションを格納するディレクトリ |
files | CookBookで利用するファイルを配置するディレクトリ |
libraries | Chefを拡張させるためのRubyコードを格納するディレクトリ |
metadata.rb | CookBookのメタデータ、バージョン情報を記録する |
providers | プロバイダーを定義するファイルを格納するディレクトリ |
recipes | レシピを格納するディレクトリ |
resources | リソースを定義するファイルを格納するディレクトリ |
templates | レシピで使用する設定ファイルを格納するディレクトリ |
各機能に触れながら、レシピを実行していきましょう
レシピの作成・テクニック
■レシピの作成
レシピはRubyで記述する以外にリソースというDSLを利用し記述します。
<リソースタイプ> <リソース名> doたとえば、Apacheをインストールする場合
<属性> <値>
:
:
action <リソースに対し実行するアクション>
end
# vim cookbooks/apache/recipes/default.rb yum_package "httpd" do action :install end
■変数の利用
レシピ内で変数を利用したい場合、attributeを使用します。
変数はattributesディレクトリ配下に格納します。
変数の定義
# vim cookbooks/apache/attributes/default.rb default['yum']['package'] = "httpd"レシピから変数を呼び出し
# vim cookbooks/apache/recipes/default.rb yum_package "#{node['yum']['package']}" do action :install end変数を定義する場合、名前空間の階層を増やす事でグルーピングのような事ができる
この空間はChefServer側で見たとき、設定値として見ることができます。
また、Chefはデフォルトでいくつかの変数を持っています
ChefSeverにクライアントを登録すると、最初いくつか登録されているのが確認できます。
このデフォルトの変数を上書きしてしまわないよう
変数を利用する場合、名前空間の命名規則には注意しましょう。
デフォルトの設定値はコマンドでも確認できます
# ohai
■definitionsの利用
リソースの処理をサンクションのように、関数化できます
# vim cookbooks/apache/definitions/httpd_install.rb define :httpd_install do yum_package "#{node['yum']['package']}" do action :install end endレシピからの呼び出し
# vim cookbooks/apache/recipes/default.rb httpd_install定義したdefinitionはほかのCookBookからも参照できます。
■ファイルの配布
スクリプトファイルやソースファイル等をレシピ実行環境に配布できる。
たとえば、何らかのスクリプトファイルを配布したいとき
配布したいスクリプトを配置
# ls cookbooks/scripts/files/default/logrotate.shレシピから呼び出し
# vim cookbooks/scripts/recipes/default.rb cookbook_file "logrotate.sh" do action :create path /opt/scripts/logrotate.sh mode "0755" end
■librariesの利用
レシピやattribute、自作リソースで利用できるクラスやメソッドを定義できる
Rubyがわからないので後で。
■providersの利用
自作のリソース処理等で利用できるプロバイダを定義できる
Rubyがわからないので後で。
■resourcesの利用
自作のリソースを定義できる
Rubyがわからないので後で。
■templateの利用
レシピで使用する設定ファイルを配置する
filesと違い、ruby処理により動的にファイルの内容を変更・記述できる。
テンプレートファイルの配置
# vim cookbooks/host/template/default/hosts.erb 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 <%= node['network']['ipaddress'] %> <%= node['network']['host_name'] %> ::1 localhost localhost.localdomain localhots6 localhost6.localdomain6attributeとの連携
# vim cookbooks/host/attributes/default.rb default['network']['ipaddress'] = "192.168.1.10" default['network']['host_name'] = "hogehoge"レシピからの呼び出し
# vim cookbooks/host/recipes/default.rb template "hosts" do action :create path "/etc/hosts" mode "0644" backup 5 end
レシピの管理
作成したCookBookをChefServerにアップロードしましょう
# knife cookbook upload <クックブック名>アップロードされたCookBookはChefServerでバージョン管理のような事も可能です
Chefの管理推奨はGitHubらしいですが
バージョンを変えたい場合metadata.rbを編集します
# vim cookbooks/apache/metadata.rb version '0.1.1'
CookBookの構文テスト
作成したレシピ、CookBookのテストは下記のような方法があります
# knife cookbook test <クックブック名>レシピ単体の動作確認例
# chef-solo -W -o <クックブック名>::<レシピ名>「-W」オプションで、「DRY RUN」のような動作確認を行うことができます。
レシピ記述の基本は以上ですね
レシピも書ける!ChefServerとの連携もできる!
次は一歩進んで、ランリストの作成、環境変数の利用を行ってみましょう!
Test-Driven Infrastructure with Chef: Bring Behavior-Driven Development to Infrastructure as Code
posted with amazlet at 14.03.02
O'Reilly Media (2013-10-11)
0 コメント:
コメントを投稿