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をインストールできるのは遠いなぁ。