レシピの書き方もつかめたので
実際に書いていく中で、クックブックをどのように管理したらよいか
運用で利用する機能も把握しておきましょう
ランリストの作成
レシピを実行する場合には、下記のようにコマンドで可能ですが
# chef-solo -o <クックブック名>::<レシピ名>
複数のレシピを実行したい場合、変数を環境で書き換えたい場合利用
それらを定義したファイルからレシピを呼び出し実行することでできます。
Node設定
Chef-Serverがある場合、クライアントと紐づけるランリスト
attributeの上書きと、実行するRole、レシピ、nodeが所属するEnvを定義できます。
Chef-Soloでいう一般的なランリストになります。
デフォルトではリポジトリディレクトリには専用のディレクトリがないので
作成しましょう
# mkdir chef-repo/nodesランリストの定義はJSON、Rubyどちらの書式でも可能ですが
Chef-ServerのデフォルトでるJSONで作成します。
# vim <ノード名>.json { "name": "<ノード名>", "chef_environment": "test-enviroment", "normal": { "tags": [ ] }, "run_list": [ "role[test]" ] }
name | ノード名 |
chef_environment | Environment名 |
normal | 上書きするattribute値 |
tags | タグ名 |
run_list | 実行するレシピ |
Chef-Serverを利用している場合、knifeコマンドでChef-Serverに直接作成する事も可能
# knife node create作成したnodeファイルから実行
# chef-solo -j node01.json作成したnodeファイルをアップロード
# knife node from file node01.jsonChef-Serverにアップロードする際には、同時に構文チェックも行ってくれます。
Role設定
ランリストの定義、Env環境別のランリスト定義、attributeの上書きが設定できます。
サーバー単位の設定をnodeファイルで定義し
WEB、DBのようなグループ単位での設定をRoleで定義するイメージですかね
Role用設定ファイルの作成
# vim roles/<ロール名>.json { "name": "<ロール名>", "description": "", "json_class": "Chef::Role", "default_attributes": { } } }, "override_attributes": { }, "chef_type": "role", "run_list": [ ], "env_run_lists": { } }
name | ロール名 |
chef_environment | Environment名 |
run_list | 実行するレシピ |
env_run_list | Environment別実行レシピ |
Chef-Serverを利用している場合、knifeコマンドでChef-Serverに直接作成する事も可能
knife role create <ロール名>.json作成したロールをChef-Serverにアップロード
# knife role from file <ロール名>.jsonChef-Serverにアップロードする際には、同時に構文チェックも行ってくれます。
Environment設定
attributeの上書き、環境内で利用することができるクックブックバージョンの制限ができる。
Environmentの作成
# vim environments/<環境名>.json { "name": "<環境名>", "description": "", "cookbook_versions": { }, "json_class": "Chef::Environment", "chef_type": "environment", "default_attributes": { }, "override_attributes": { } }
name | 環境名 |
Chef-Serverを利用している場合、knifeコマンドでChef-Serverに直接作成する事も可能
# knife environment create <環境名>.json作成したEnvironmentをChef-Serverにアップロード
# knife environment from file <環境名>.json
DataBag
Environmentやクックブックに依存しないグローバル変数をデータとして格納できる
データはDBにて管理され、ハッシュ化し管理されます。
DataBagはBagグループとItemと呼ばれるデータで管理されます
DataBagはEnvやクックブックに依存しないが、1階層しか名前空間が定義できないため
命名規則に注意する必要がある
DataBagグループの作成
Chef-Serverがある場合
# knife data bag create <バッグ名>Chef-Soloの場合
# mkdir databags/<バッグ名>Itemの作成
JSON形式で格納するデータを作成します
# vim databags/bag/<アイテム名>.json { "id": "バッグ名", "変数名": "値" }Chef-Serverを利用している場合、knifeコマンドでChef-Serverに直接作成する事も可能
# knife data bag create <バッグ名> <アイテム名>作成したアイテムをChef-Serverにアップロード
# knife data bag from file <アイテム名>登録したDataBagを利用する。
下記のようなDataBagを作成し
# vim databags/directory/scripts_dir.json { "id": "scripts_dir" "dir": "/opt/scripts/bin" }レシピからの呼び出し
item呼び出し関数を利用し、DataBagからデータを呼び出す
# vim recipes/default.rb bag_dir = data_bag_item('directory','scripts_dir') directory "scripts" do action :create path "#{bag_dir['dir']}" recursive true not_if { File.exists?("#{bag_dir['dir']}") }
紹介した機能をChef-Soloで利用する場合
環境ファイルsolo.rbに記述を追記することで利用可能になります。
# vim /etc/chef/solo.rb role_path "/var/chef/roles" node_path "/var/chef/node" environment_path "/var/chef/environments" data_bag_path "/var/chef/data_bags"http://docs.opscode.com/config_rb_solo.html
以上でChef入門は完了です。
レシピの作成、クックブックの管理、Chef-Serverの利用までできますね!
Chefで利用できるリソース情報は本サイトに丁寧に記載されています
http://docs.opscode.com/resource.html#common-functionality
Rubyができて、Chefも慣れてきた人は
Opscodeの公開クックブック内では利用されていることがある
LWRP(LightWeight Resource Provider)に進んでいくことでさらに広がると思います。
何かに困ったり、単語を調べたい時は本サイトで検索してみましょう
http://docs.opscode.com/search.html
伊藤直也 (2013-03-11)
売り上げランキング: 504
売り上げランキング: 504
0 コメント:
コメントを投稿