Chefレシピの応用


レシピの書き方もつかめたので
実際に書いていく中で、クックブックをどのように管理したらよいか

運用で利用する機能も把握しておきましょう

ランリストの作成


レシピを実行する場合には、下記のようにコマンドで可能ですが
# 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_environmentEnvironment名
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.json
Chef-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ロール名
descriptionロールの説明文
defult_attributes上書きするattribute値
override_attributes上書きするattribute値
chef_environmentEnvironment名
run_list実行するレシピ
env_run_listEnvironment別実行レシピ

Chef-Serverを利用している場合、knifeコマンドでChef-Serverに直接作成する事も可能
knife role create <ロール名>.json
作成したロールをChef-Serverにアップロード
# knife role from file <ロール名>.json
Chef-Serverにアップロードする際には、同時に構文チェックも行ってくれます。

Environment設定


環境を定義することができる
attributeの上書き、環境内で利用することができるクックブックバージョンの制限ができる。

Environmentの作成
# vim environments/<環境名>.json
{
  "name": "<環境名>",
  "description": "",
  "cookbook_versions": {
  },
  "json_class": "Chef::Environment",
  "chef_type": "environment",
  "default_attributes": {
  },
  "override_attributes": {
  }
}
name環境名
description環境の説明文
cookbook_versionsクックブックバージョンの制約
default_attributes上書きするattribute値
override_attributes上書きするattribute値

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


入門Chef Solo - Infrastructure as Code
伊藤直也 (2013-03-11)
売り上げランキング: 504

0 コメント:

コメントを投稿