mitamaeとは
Chefに比べ、よりシンプルかつ依存(chef server, cookbook, berkshelf, data_bags)が少なく実行できるItamaeというツールがあるんですが、mitamaeはmrubyを使うことでそこから更に依存(Rubyインタプリタ, RubyGems)を減らしシンプルにしたツールです。
歴史:
https://k0kubun.hatenablog.com/entry/itamae-mruby
https://k0kubun.hatenablog.com/entry/mitamae
何故mitamaeは便利なのか
itamae ssh
を使うとサーバーに何も入ってない状態のまま気軽にサーバーをプロビジョニングできるため非常に便利なのですが、itamae ssh
は各コマンドごとにssh越しの通信が発生してしまい非常に遅く不快なため、通の間ではomnibus-itamaeなどでRuby処理系やitamae.gemごとItamaeをサーバーにインストールしitamae local
を実行するのがベストプラクティスとなっています。
結局サーバーに持っていくならシングルバイナリであるmitamaeを使うほうがクリーンで問題が起きにくいですし、またmitamaeは最初からitamae ssh
をサポートしないつもりでコマンド実行のかわりに直接Cの関数呼び出しが行われるような実装も入っているため、一般にitamae local
より実行が高速です。
hochoとは
Itamaeメンテナの一人であるsorahさんが作った、Itamaeとmitamaeを実行するためのツールです。手元でこのgemをインストールし、設定ファイルのYAMLを書いてhocho apply
を実行すると、レシピをサーバーにrsyncしてmitamaeバイナリをダウンロードして実行、といったことが簡単に行なえます。
台数の少ない用途でmitamaeを実行する場合、sshとrsyncだけで手軽にレシピが実行できるhochoを使うと便利です。
使い方
何か適当に空のディレクトリを用意して移動しておいてください。
1. hocho gemをインストールする
source 'https://rubygems.org'
gem 'hocho'
bundle install
しておきます。
2. hosts.yml を用意する
あらかじめ .ssh/config をいじって ssh foo-bar
できるようにしておいてください。その後、カレントディレクトリに以下のような hosts.yml を書きます
foo-bar:
properties:
run_list:
- default.rb
最新の情報は https://github.com/sorah/hocho#setup を参照してください
3. レシピを用意する
run_list
を指定したので、その名前 (今回は default.rb) でレシピを書いておきます。
execute 'echo hello world'
4. hocho.yml を用意する
最後に、hocho.ymlを用意すれば準備完了です。多分最初は一番面倒なパートですが(Linux x86_64の場合は)コピペで動くと思います。
property_providers:
- add_default:
properties:
preferred_driver: mitamae
driver_options:
mitamae:
mitamae_path: /usr/local/bin/mitamae
mitamae_options: ['--log-level', 'info']
mitamae_prepare_script: |
wget -O /usr/local/bin/mitamae https://github.com/itamae-kitchen/mitamae/releases/download/v1.6.2/mitamae-x86_64-linux &&
echo "047cc776f2b0b555c7a6d90c32c7c581529bfc1a5db48ddb3090ee79d55ce3f3 /usr/local/bin/mitamae" | shasum -a 256 -c &&
chmod +x /usr/local/bin/mitamae
裏技として、ヘルパー的なレシピをmitamae_options
の先頭に書いたりできます。場合によっては--log-level
はdebugにしておいた方が快適かもしれません。
最新の情報は https://github.com/sorah/hocho#setup を参照してください
5. 実行
sudo passwordを入力するのがダルい時は$SUDO_PASSWORD
が何らかの形で渡るようにしておくと楽です
$ read -s SUDO_PASSWORD; export SUDO_PASSWORD
$ bundle exec hocho apply --dry-run foo-bar
Running using mitamae
=> $ rsync -az --copy-links --copy-unsafe-links --delete --exclude\=.git --rsh ssh\ -o\ \"PubkeyAuthentication\=yes\"\ -o\ \"PasswordAuthentication\=yes\"\ -o\ \"PreferredAuthentications\=none,publickey,password,keyboard-interactive\"\ -o\ \"User\=k0kubun\"\ -o\ \"Port\=xxxx\"\ -o\ \"HostName\=xxx.xx.xxx.xxx\"\ -o\ \"IdentityFile\=\~/.ssh/xxx\" . xxx.xx.xxx.xx:/tmp/hocho-run-LRmQto5bS/itamae
$ test -x /usr/local/bin/mitamae
$ umask 0077 && cat > /tmp/hocho-run-LRmQto5bS/node.json
$ chmod 0700 /dev/shm/hocho-run-3AMga3Ydr/tmp.WVJHiETiDB; cat > /dev/shm/hocho-run-3AMga3Ydr/tmp.WVJHiETiDB; chmod +x /dev/shm/hocho-run-3AMga3Ydr/tmp.WVJHiETiDB
=> kubernetes-master # /usr/local/bin/mitamae local -j /tmp/hocho-run-LRmQto5bS/node.json --log-level info --dry-run default.rb
$ bash
[foo-bar] INFO : Starting MItamae...
[foo-bar] INFO : Recipe: /tmp/hocho-run-LRmQto5bS/itamae/default.rb
[foo-bar] INFO : execute[echo hello world] executed will change from 'false' to 'true'
$ shred --remove /dev/shm/hocho-run-3AMga3Ydr/tmp.WVJHiETiDB
=> kubernetes-master $ rm -rf /tmp/hocho-run-LRmQto5bS/itamae
$ rm -rf /tmp/hocho-run-LRmQto5bS/itamae
本番は --dry-run
を外してください。
以上で、快適にmitamaeが実行できるようになったかと思います。レシピの書き方は https://github.com/itamae-kitchen/itamae/wiki とかを参考にしてください。