Chef/初心者向けChef入門講座/nodeとroleとrun_list


nodeとroleとrun_list

前回さらっとやりましたが、サーバーに対してレシピを登録する際こんなコマンドで実行していました。
# knife node run_list add [被管理サーバーのノード名] test_cookbook

また、実際にサーバーに対して登録したレシピを適用する際はこんな感じでした。
# knife zero chef_client 'name: [被管理サーバーのノード名]'

chefでは被管理サーバーのことをノード(node)と呼んで管理します。
またノードに対して登録されたレシピはrun_listと呼ばれるリストに格納され、実行時にはrun_listに登録された内容が適用されることになります。

そしてそれに加えて同じ役割を持つノードを一まとめにして管理することができるロール(role)という機能もあり、サーバー台数が増えた時などに個別にレシピを登録する必要を無くすことができます。

とりあえず実践してみましょう。

chefディレクトリに移動し、knifeコマンドで新規にテスト用のロールを作成します。
# cd ~/chef
# knife role create test
エディタが立ち上がるので、とりあえず保存して終了します。

するとカレントディレクトリの配下にrolesというディレクトリができていて、その中にロールの設定ファイルができています。
設定ファイルはJSON形式のテキストファイルです。
ノードの時と同様、本来chef-serverではデータベースに保存されるべきデータですが、ローカルモードなのでファイルとして保存されました。

続けてロールに対してレシピを登録します。
このレシピ登録はエディタを使って直接JSON形式のファイルを編集する必要があります。
# knife role edit test
編集を開始すると以下の様な感じになっています。
{
  "name": "test",
  "description": "",
  "json_class": "Chef::Role",
  "default_attributes": {
  },
  "override_attributes": {
  },
  "chef_type": "role",
  "run_list": [

  ],
  "env_run_lists": {
  }
}
今回はrun_listの部分を編集してtest_cookbookを登録します。
"run_list": [

],
↓
"run_list": [
  "test_cookbook"
],

次にノードにロールを追加しますが、その前に既に追加してあるレシピを削除します。
ノード内ではロールもレシピも一様にrun_listで管理されるので、ノードのrun_listに対して設定を行います。
# knife node run_list remove [ノード名] "recipe[test_cookbook]"
# knife node run_list add [ノード名] "role[test]"
ここでノードの状態を確認すると大体このようになっているはずです。
# knife node show [ノード名]

Node Name:   ***
Environment: _default
FQDN:        ***.***.***
IP:          ***.***.***.***
Run List:    role[test]
Roles:
Recipes:     test_cookbook, test_cookbook::default
Platform:    centos 7.0.1406
Tags:

さて、あとは実行です。
# knife zero chef_client 'name: [ノード名]'

エラー無く実行できたでしょうか。
これでノードやロールを管理することができ、コマンド実行の手間を省くことができそうです。




  • 最終更新:2016-01-19 12:27:08

このWIKIを編集するにはパスワード入力が必要です

認証パスワード