2013年4月15日月曜日

Chefで試したレシピのイディオム的な何か

珍しくブログに連投。

このWindows + Cygwin + Proxy環境でChefを試した時に書いたレシピの中から、 いくつかピックアップして掲載。もっと良い書き方があると思うんだけどなー。

いずれの書き方も、Ubuntu 12.10への環境構築を前提にしての記述。

Proxy環境への適応

Proxy環境だと、色々事前にセットしないとネットワーク経由でのapt-getやらgitやらgemが使えない。 まずは、Proxy環境への適応。

attributes/default.rb

ProxyのURLを直接レシピに入れたくないので、以下のような内容をattributesとして設定しておく。

default["private"]["proxy"] = "http://ユーザ名:パスワード@ProxyのURL:ポート番号/"

recipes/default.rb

その上でレシピに以下を入れる。やっていることは、/etc/profileにProxyの環境変数を追加。

ちなみに、このレシピにはnot_ifを入れてあって、attributesにURLをセットしなければ、 このレシピは動作しない。

# attirbutesに設定したProxyのURLを変数にセット
proxy = node['private']['proxy']

bash "proxy on profile" do
  not_if { proxy.empty? }
  code <<-EOC
    echo "export http_proxy=#{proxy}" >> /etc/profile
    echo "export https_proxy=#{proxy}" >> /etc/profile
    source /etc/profile
  EOC
end

認証が必要なGitリポジトリからclone

PublicなGitからcloneする分には、単にURLを入れれば良いが、認証の必要なPrivateリポジトリの場合は、 一工夫いる。また、Gitを使う場合は、GitにもProxy設定が必要。上のattributesを応用する。

attributes/default.rb

default["private"]["gitUrl"] = "https://ユーザ名:パスワード@リポジトリURL"

recipes/default.rb

bash "git proxy" do
  # 以下で使ってるproxyは、Proxy環境への適応で作った変数
  not_if { proxy.empty? }
  code <<-EOC
    git config --global http.proxy #{proxy}
  EOC
end

git "cloneするディレクトリをフルパス指定" do
  # ここでは、attributesを直接使ってる
  repository node[:private][:gitUrl]
  reference "master"
  action :checkout
end

その他気をつけること・ハマったこと

not_ifの記述

not_ifをメソッド呼び出しだと思い込んだため、当初こんな書き方をしていた。

not_if(条件)

これ動作しない。以下のように書く。波括弧なことに注意する。

not_if { 条件 }

リンクを作るlink Resource

シンボリックリンクやハードリンクを作るlink Resourceを使おうと思って、こんな書き方をしていた。

link "/home/hoge" do
  to "/home/hoge/dotFiles/.zshrc"
end

やろうとしていることは、lnコマンドのつもり。

ln -s /home/hoge/dotFiles/.zshrc .

だが、これが動作しない。以下のように書く。ファイル名まで書くようにする。

link "/home/hoge/.zshrc" do
  to "/home/hoge/dotFiles/.zshrc"
end

0 コメント:

コメントを投稿