LoginSignup
11
9

More than 5 years have passed since last update.

ItamaeでNode Attributesに環境変数を使えるようになるGem

Last updated at Posted at 2014-12-28

(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には次のように記述。

node.json
{"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

レシピ作成。

recipe.rb
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作成。

node.json
{
  "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という独自コマンドを追加しました。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9