はじめに

2015-09-28に発表されたHashicorpの新プロダクトであるOttoはVagrantの後継となることを予定されたものである。
そこで現時点でVagrantの代わりになるかを、既存のVagrantfileを食わせることで確認してみた。

先に結論を書くと、今のところはVagrantのラッパーになっているだけで、このような用途ではVagrantの代わりに使う意味は特にないだろう。

Ottoの簡単な説明をしながら試していく

OttoはVagrantの後継として作られたものだが、Vagrantで行う開発環境の構築だけでなく本番環境の構築からデプロイまで一貫して行うことまでを目的としている。
そのため、現時点ではOttoはVagrant, Packer, Terraformのラッパーとなって動作する。将来的には少なくともVagrantは取り込まれることになるのだろう。
この記事ではVagrantが担当する部分しか試さない。

Ottoのインストールは例によってダウンロードページから適切なzipファイルをダウンロードしてきてパスの通ったところに展開するだけである。
VagrantのラッパーになっているのでVagrantも同様にパスの通ったところに展開されている必要もある。使うのだったらPacker, Terraformもまた同様である。

今回使う環境はWindows 8.1 Updateであり、cygwinでコマンドを実行している。仮想環境はVirtualBox 5.0.2を使用している。Ottoのバージョンは0.1.1である。

Ottoを使うにあたって最初に行うことは、プロジェクトルートでotto compileを実行することだ。
otto compileはVagrant, Packer, Terraformが使用する設定ファイルやスクリプトなどを生成するコマンドである。

プロジェクトルートとはどういうことか。Ottoはそのプロジェクトで使われている言語を見て、その言語を自動的にインストールしてくれるshell provisionerを持つVagrantfileを自動生成する。これがotto compileの役割の1つである。
また、生成されたVagrantfileではプロジェクトルートをsynced_folderとするようになっており、Ottoのsshログイン用のコマンド(otto dev ssh)ではこのsynced_folderにログイン後自動でcdされる。

という代物である結果、otto compileを空ディレクトリで実行するとエラーになるので、適当に1.rbという空ファイルでも作ってから実行する。
Vagrantfileは.otto/compiled/app/dev/Vagrantfileに生成されるので、既存のVagrantfileを使いたければこれを差し替えてしまえば良い。

本来ならばAppfile(otto compileによる自動生成をオーバーライドするための設定ファイル)にドキュメントに書かれているようにcustomのApp Typeを使ってVagrantfileの位置を指定してやれば良いような気がするがやっても上手く行かなかった。
ソースを見ると必ず.otto/compiled/app/dev/Vagrantfileを見に行っているがcustomのApp Typeを使うと.otto/compiled/app/devディレクトリが作られもしないから、という話のようだ。

仮想マシンを起動するコマンドはotto devである。つまりこれがvagrant upに相当する。
実行時に何かIPアドレスが表示されるが自前のVagrantfileには関係ない。

otto dev (なんとか)はすべてVagrant関係のコマンドである。ちなみにPacker関係はotto build (なんとか)、Terraform関係はotto deploy (なんとか)である。
要するにOttoはコマンドをotto compileotto devotto infra(デプロイ先のクレデンシャルを入力するためのコマンド)→otto buildotto deployの順に実行し、開発環境で開発→本番環境の作成→本番環境のデプロイを行うことを目的としたツールということだ。

仮想マシンを終了する場合はotto dev destroyである。つまりvagrant destroyに相当する。

また、otto dev vagrant (コマンド)でvagrantの各コマンドを実行することもできる。例えばvagrant reloadを実行したい場合はotto dev vagrant reloadである。
この環境にはVagrantのプラグインは入っていないので試していないが、この方法でコマンド拡張系のプラグインも使用できると思われる。

先程書いたotto dev sshはこのやり方ではエラーになる。自動生成されたVagrantfileでは上手く行くので何か追加すればエラーにならずに実行できるようになるかもしれない。otto dev vagrant sshは問題ない。

追記

QiitaのOttoタグは他のものに先に取られていた。

TOP