そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

chef - レシピの基礎(2)

コマンドを実行する

execute リソースを使います

execute "do command" do
  command "foo bar"
end

packageリソースなどとは異なり、冪等性(何度操作しても
同じ状態となる性質)が確保されません。

not_if / only_if などで制御する必要があります。

execute "do foo bar if unlocked" do
  command "foo bar"
  not_if { ::File.exist? "locked_file" }
end

サーバ毎に違う設定ファイルを配布したい

template リソースを使います。

template "/etc/yum.repos.d/CentOS-Base.repo" do
end

上記は、

1. templates/default フォルダ以下の CentOS-Base.repo.erb
をテンプレートファイルとして用意
2. /etc/yum.repos.d/CentOS-Base.repo としてコピー。

を行います。

テンプレートはERBで、Rubyの変数や式を使うことができ、
コピー後は<%= %> は評価された値となります。

テンプレートの例

[base]
name=CentOS-$releasever - Base
baseurl=<=% node["centos"]["baseurl"]%>

attributesまたはnode json ファイルで、パラメータを設定します。

{
   "centos": {
      "baseurl": "http://ftp.riken.jp/Linux/centos/$releasever/os/$basearch/"
   }
}

テンプレートのファイル名を変更したい場合は、source属性を使います。

template "/etc/resolv.conf" do
  source "resolv_linux.conf.erb"
end

インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門

インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門