(2014/12/30 binstubsを使うように修正しました)
(2015/5/26 独自コマンドitamae-env
を使うように修正しました)
はじめに
Itamaeで、
- パスワードとかレシピで設定したいけどレポジトリにはいれたくないなー
- ChefのData Bagほどのものはいらないなー
- 環境変数使いたいなー
- けどレシピには
ENV["hoge"]
じゃなくてnode["hogehoge"]
って書けた方がいいなー - つまりNode Attributesで環境変数指定すれば
node["hogehoge"]
として使えるようにしてほしい!
っていう感じのitamae-node_envというGemを作りました。
使い方
Gemfileにgem 'itamae-node_env'
を追加してbundle install
Node Attributesには次のように記述。
{"password": "env[IR_PASSWORD]"}
実行は、
export IR_PASSWORD="p@ssw0rd"
bundle exec itamae-env local -j node.json recipe.rb
また、Dotenvを使って自動で.env
ファイルから環境変数を設定します。
サンプル
( https://github.com/nownabe-infra/example-itamae-node_env )
まずディレクトリの作成。
$ mkdir node_env_sample
$ cd node_env_sample
Gemfileの作成とbundle install
。
$ bundle init
$ echo 'gem "dotenv"' >> Gemfile
$ echo 'gem "itamae-node_env"' >> Gemfile
$ bundle install --path vendor/bundle
レシピ作成。
file "/tmp/node_env_password" do
content node["password"]
end
file "/tmp/node_env_id_rsa" do
conetnt node["id_rsa"]
mode "0600"
end
Node Attribute作成。
{
"password": "env[IR_PASSWORD]",
"id_rsa": "env[IR_ID_RSA]"
}
.env
作成。
IR_PASSWORD=hogehoge
実行。実行には、itamae-env
コマンドを使用します。
$ ssh-keygen -t rsa -N '' -f id_rsa
$ export IR_ID_RSA="$(cat id_rsa)"
$ bundle exec itamae-env local -j node.json recipe.rb
確認。
$ cat /tmp/node_env_password
hogehoge
$ cat /tmp/node_env_id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwI9r++qypPILk5Nvg6zPwEJmflqyI5l2j7lWCpUIHc0wzDgR
lQtbaUUc7PC0DO4cwhAx4O93iy6a+lPre3Mvh/db7c7j3CMd+L6gDYQslzFjQ+yr
W1/f0jyGn2AKNndWNxGeiAlk0udkOxrXmfeP84Ggl6+YiI32feMuOOPQjR3dz8Zc
XsHVLtqncJYIxMAuqY9I3F2v82rjOR3p+cMCO0FPo4MZgD0hnvY5vyium4mf03Vj
4LUyslAYh/fT+azgSRfXhbqjovXcPrhCQ8bjJzwxZg1pX7apawjPShzDpIfdrQY9
V6cyWs1nSl/HBfWLfC7GGMniiR9hGPdPiYafqwIDAQABAoIBAQCXWWM/myYUvWZZ
9R1GOrMD42zZzYGMt5dXug2lvaOmgNvk+ADhzA5qPHdSyJJMQ295HO+HY9DrJZOM
RB+nZU6rqMGptd6k7TkmhPYaCZRetePWxJOe+0lZ3lbVt8/vJXcvS3r2Y6PKnTLL
vfpOOyX6+Bz4fH0Af8yI/+IZtv35m23L6Zf05KqWHc1uZ2aY8b4R8Jyn3k2o3pVN
dUEa5nlE+j0McjbP7UFvJhkyDrqqOTbSi7BcbZ0KqlWq+15eUhh8w5DXC8bAAoua
3/OWva7NSfUE1uNnDh5baROKrlDHEhw2k2ZnO+dC39BZciUNxv2D8uskeUoDXYXU
1/xf0lGJAoGBAOSSBwjBCDpA5bvowYccXSM4mcxzToktDKNkdtFATvOcIhBK8Wr4
cc+zyVHTkJSVsmw2R7xfs0g2FO3U8JQ85mmox7TWMBdnBQuFV3Aat7QlM08G3TDL
MM5o0VQZSVsL0+10BMaynko7vzmbsyZhFcp7J4Lzq1KgLWeAtEIeCKeFAoGBANer
HbgLLVRxmaMD2P6EghTC33oITVdQbaenoiYY8MD7HaCNVlS67ul4l/+rlVW4bnKb
h+G4QIX4LSZ37BKCOTy3+qB6gp84SpeIz3i0jj04xLjFQkKelYsL9drmjDa3sLJX
EzNo7u6ZG889XDLU2jYMYdoAb1+0WNbUQOEo4hlvAoGAK+1QgsMuRJvCSvmxb7jo
wWMYU615U22f9yrQluhoA/NmrIDqoqc6oDMqJpqlN5kJYDiSUsaFmwQhw49f6O1H
TtkMAFoFhgnbc1pd8oJ/+ZQIp1BnZAA40gJc8G+npGLCiOj6HgGn4BZZasXciSyx
VmeSsV0I+OklsLWQbwB8o00CgYAbhVd+g9ad/v0XA0eueuRKl++CmAqeiMHlcgvM
BsS6K5FFSqPong4ctunWk2O0E5vsfhJh6Gw7bEb+sLDsT7fUGrodvmRqwvkpyyiG
g6ve/h6EYY+qBqiYnMcbzu23kcs3hssJdWuAAQO+d1sLlYPe/8eA1SthMBdiGqXI
1bm8ewKBgDmF2GiXILCFk9gGBv+OEK86jcMVnLbq8tVsx5E1UeApso//O68RSmt1
a28+E7YvkOexYATJCV9QE8b3RuqO/XBcC1QtRlSmRm3ePbb/ksB1TUwryfFY4HJK
G+F5gCHg9nAqlYs/Lu0lndVxz93BTTdesHEr+3rsdPMA4EiCfXue
-----END RSA PRIVATE KEY-----
おわりに
そもそもそういう用途に使うのがNode Attributesじゃね?っていう話もあります。
この辺りは人それぞれ使い方が微妙に違うのかなーと思ってます。
追記
色々と問題が出て--binstubs
でitamaeのRunnerを呼ぶ前にnode_envを読み込むようにしました。
他にいい方法あったら教えて下さい。。
追記2(2015/05/26)
binstubsはあまりにもあれなので、itamae-envという独自コマンドを追加しました。