chef-soloでchef資産の有効活用

chefがある環境に慣れるともうchefから離れられませんが、chefサーバと通信できない環境にある場合などはchefを活用することができません。
「嗚呼、chefが使えたら!」と叫びたくなりますね。

そんなときはchef-soloです。
chef-soloを使えばchefサーバに蓄えたノウハウを使うことができます。
ただ、chef-soloを使うためにはいくつかやらなければならないことがありますので、それを含めてchef-soloの使い方を解説したいと思います。

cookbookのexport

chef-soloを使うためには、まずはこれまで作ったcookbookをexportする必要があります。
cookbookのexportはknifeを使って行います。

# create work directory
WORK_DIR=/path/to/workdir
if [ ! -d ${WORK_DIR} ]; then
  mkdir -p ${WORK_DIR}
fi

for i in `knife cookbook list| awk '{ print $1 }'`; do
  echo $i
  knife cookbook download $i -d ${WORK_DIR}
done

cd ${WORK_DIR}
for i in `ls -1 ./`; do
  poi=`echo $i | awk -F- '{ print $NF }'`
  n=`echo $i | sed s/\-${poi}//`
  mv $i $n
done

knife cookbook downloadでcookbookをダウンロードします。
cookbookはcookbook-versionというディレクトリ名でダウンロードされますが、そのままですとchef-soloでは使えないのでversion部分を除去する処理を入れています。

このダウンロードしたcookbookをtarで固めてchef-soloを使うサーバに持っていきましょう。

Roleの代わりとなるjsonファイルを用意する

chefを使う場合、Roleはとても便利なものです。
chef-soloの場合、このRoleを使うことができないので、代わりのjsonを作ります。
例えばこんな感じ。

{
  "ntp":{
    "servers":[
      "ntp01.hoge.com",
      "ntp02.hoge.com"
    ]
  },
  "td_agent":{
    "logfile":"/log/httpd/access",
    "servers":["fluentd-01"],
    "log_tag":"http.access"
  },
  "httpd":{
    "htdocs":"/var/www",
    "logdir":"/log/httpd"
  },
  "run_list": [
    "recipe[ntp]",
    "recipe[chef-td-agent]",
    "recipe[httpd]"
  ]
}

このjsonファイルによって、使うrecipeを設定して、recipeで使うattributeの値を設定します。

chef-solo.rbの用意

最後にchef-soloを動かすための環境設定ファイルを用意します。
chef-solo.rbは以下のような感じ。

file_cache_path "/var/tmp/chef-solo"
cookbook_path "/var/tmp/cookbooks"

これだけ。
chefを動かすためのcacheディレクトリの場所と、上で固めたCookbookを展開する場所を指定しています。

chef-soloの実行

以下のコマンドでchef-soloを実行。

chef-solo -c /path/to/chef-solo.rb -j /path/to/hoge.json

実はchef-soloはchefサーバのインストール時にも使っていたのですが、調べたまんまを意味もわからず書いてサーバをインストールしていましたが、改めて必要に迫られて使ってみると、chefサーバインストール時に書いたjsonの内容も納得。

それでは良いchefライフを!

コメントを残す

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