chef basic

構造

ディレクトリ 説明
.chef chef server 側から取得した秘密鍵や knife.rb を格納。
roles node の機能や役割(web, db, 監視)毎に、cookbook の recipe や attribute を設定する。
cookbook recipe の管理、recipe, node 管理値を定義する attribute の管理を行う。

node

  • cookbook が適用されるサーバー。
  • chef-client がインストールされていなければならない。
  • run-list (構成情報リスト)が設定されている必要がある。

client

  • node にインストールする chef server 同期エージェント、knife、chef 管理画面等、chef server へアクセスするもの。
  • chef server から cookbook をダウンロードして同期する。
  • nodeに対し構成情報の適用を行う。

recipe

  • node 構成情報を記述する。
  • ファイルの配置、パッケージインストール等の具体的な情報を記述。
  • 基本修正/編集しない。
    • attribute/role/env で構造(変数)を表現する。
  • 依存構造は基本 notifies で表現する。

recipe の細分化

  • 処理毎に recipe を細分化することで、個別に適用しやすくなる。

cookbooks/roles/recipes/test.rb

[code lang=text]
include_recipe "test"
[/code]

cookbooks/test/recipes/default.rb

[code lang=text]
include_recipe "test::install"
include_recipe "test::config"
[/code]

cookbooks/test/recipes/install.rb

[code lang=text]
# install test-agent in this recipe
[/code]

cookbooks/test/recipes/config.rb

[code lang=text]
# config test-agent in this recipe
[/code]

recipe が適用されているかの確認

  • why-run で適用されているかどうか確認
  • script は適用されているかどうか、why-run では確認できない為、注意(nanodeなるべく chef resource を使う)

windows_service

run-list

  • node もしくは role を構成するのに必要な role or recipe のリスト。
  • node に role の情報、role に recipe 情報を指定する。

attribute

  • node に対する設定値。
  • cookbook, recipe で利用される設定値。
  • ohai (node内の情報収集ツール) が自動設定する値がある。
  • default 値を入れておき、roleで override する。
    • さらに environment でも override 。

attribute 優先順位

強 弱
environment > role > cookbook attribute > cookbook recipe

roles

  • base-setting, cmn, cluster のように role を分ける。

role/attribute の違い

  • role は recipe に完結しないもの
  • attribute は recipe に完結するもの。
    • version 情報
    • S3 ホスト

metadata

  • role を追加したら metadata も増やさねばならない。
  • recipe 間は連携が取れないため、metadata で連携。

変数

  1. template で変数設定 (利用しない場合は飛ばし)。
  2. attribute で値設定。
  3. attribute で格納した値を recipe で使用。

template

  • template で変数化し、attribute で利用。

notifies

  • 変更時の処理指定。
    • 該当 resource 実行時、他 resource に通知してその resource 実行を促す。
  • デフォルト delayed。処理の最後にまとめて実行。imeddiately であれば即時。
  • 複数行に渡り記述することが可能。

subscriibes

  • notifies と逆。
  • 他 resource 実行終了後、該当 resource の action を指定し実行。

variables

  • 同じ cookbook を利用し、異なった値を設定する。
  • HAクラスタ構成等。

その他

  • notifies 利用推奨
    • 活用例: package install 後、自動起動。nothing と組み合わせて、もし該当ディレクトリが存在する場合は、実行させない。
    • 依存関係の整理が楽になる
  • ruby は最低限の記述。なるべく chef resource を使う。
  • Data bag にて、暗号化できるものは全て暗号化 (EncryptDataBag) 。
    • 今は新しい暗号化の仕組みが出てきているらしい。
  • 記述の流れ
    • まずは environment から記述する。 (構造化)
  • chef で実現できないことは
    • chef -> bash -> ruby で書く

cookbook 作成 tips

条件合致時のみ実行

[code lang=text]
package "zabbix"
action :install
only_if "echo $(hostname) | grep -q 'zabbix-'"
only_if {File.exist?("/usr/xxx/xxx")}
end
[/code]

command, code の違い

command は値を複数渡せ、code は複数渡せない。

not_if, only_if

  • not_if
    • ファイルが存在している場合は、コマンドを実行しない。
  • only_if
    • ファイルが存在している場合は、コマンドを実行する。

template, cookbook_file, remote_directory

  • template
    • 変数を記述可能。
    • erb 以外も可。
  • cookbook_file
    • 配置する時にファイルを読み込まない。
    • 圧縮ファイル, rpm, bin ファイル等が適切。
  • remote_directory
    • files/default/ directory, file を展開。

action: create_if_missing, not_if {File.exist?} などで上書きを避ける。

Chef::Config[:file_cache_path]

  • 一時ファイルを書き出すことが可能。例えば /var/chef/cache
  • file cache の為に利用されるが、自前で定義することも可能。

resource

service

action

  • :enable 自動起動有効
  • :start service 起動

supports

  • hash 形式で status: bool, restart: bool のように記載。

ハッシュ形式で、キー値に対象のオプション(status, restart, reload等)を指定し、値にBool値でオプションの利用可能/不可を指定する。
基本的には {オプション名: true} でサービスが利用可能なオプションを明示するために使用する。

[code lang=text]
supports status: true, restart: true, reload: true
[/code]

supportsに記載がない場合、Chefは別の代替手段で対象のアクション実行を行う。
例えば、{status: true}の記述がなければ、サービス名と同名のプロセスが存在するかどうかで起動のチェックを行う。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です