templateリソースを試しました

前回の続きをやります。まずはchef-client呼び出して"hello, chef!"ですかね。

Hello, chef

表示専用cookbookを作ります。

$ knife cookbook create MESSAGE

作成されたMESSAGEのディレクトリにいき、${MESSAGE_DIR}/recipes/default.rbを以下のように記述します。

template "/tmp/pochi.txt" do
  source "pochi.txt.erb"
  # nothing, create, delete, touth, create_if_missing!のどれかを指定
  # create => 既存ファイルがあっても上書き(バックアップはとってくれるみたい)(defaultはこれ)
  # delete => templateで指定されたファイルを削除
  # touch => 既存ファイルがない場合のみファイルを作成
  # create_if_missing => 多分touchといっしょ
  action :touch  
end

次に、${MESSAGE_DIR}/templates/default/pochi.txt.erbを以下のように記述します。

Hello, chef!

このrecipeをアップロードしてsptoss1のrun_listに追加します。

$ knife cookbook upload -o /var/chef/cookbooks/ -a
$ knife node run_list add sptoss1 "recipe[MESSAGE]" 

実行してみます。

$ sudo chef-client

/tmp/pochi.txtにファイルができていることを確認します。

$ cat /tmp/pochi.txt
Hello, chef!

Hello, chef! 完成です。

変数使ってみる

とりあえず、固定ファイルをおけるようになったので次は変数を試してみます。

${MESSAGE_DIR}/recipes/default.rbを以下のように変更します。

template "/tmp/pochi.txt" do
  source "pochi.txt.erb"
  variables :name => node[:dog_name] #=> 変数設定
  action :create
end

変数の設定は${MESSAGE}/attributes/default.rbに以下を記述します。

dog_name "pochi"

次に、${MESSAGE_DIR}/templates/default/pochi.txt.erbを以下のように変更します。

Hello, chef!
Set variables: dog name is <%= @name %>

これでcookbookをアップロードし直してchef-clientをたたくとファイルの中身に変数が入っていることが確認できます。

templateブロック?での設定をまとめておきます

  • source
    • テンプレートのデフォルトファイルを指定します
  • variables
    • 変数を指定する
  • owner
    • ファイルの所有ユーザ
  • group
    • ファイルの所有グループ
  • mode
    • ファイルのモードを指定できます(ex. 0755)
  • action
    • nothing, create, delete, touchのいずれかを指定

ChefでApacheをインストールできるのは遠いなぁ。