vagrantでansibleでelixir
パソコン買い変えました!無印MacBookのマシマシで!快適!
ということで、せっかくなのでイチからelixir載ったlinuxを作り直し &vagranのprovisioningで済ませちゃおう作戦
モノはこちら→
elixirのインストールについて
今回は、erlangとelixirともにソースインストールしてます。なぜってyum出来なかったからね。 とりあずtry&erroしつつ、事前に必要そうなパッケージがこちら
yum install -y git autoconf gcc ncurses-devel yum install -y openssl openssl-devel unixODBC unixODBC-devel gcc-c++ fop
上はビルドに必要なもの。
下はelixirが力を十分発揮するのに必要なもの。
あとjinterface(Javaのライブラリとか使えるようになるっぽいやつ)は使わなそうだから無視
wxも、GUIとか開発予定ないので無視
ansible_localでのプロビジョン
vagrantからansible使ってプロビジョニングは、普通にansible使うのとansible_localってのがあるらしいです。
ansibleは、hostマシンからansibleする
ansible_localは、guestマシンからansibleする
ansible_localの場合、当然guestマシン上にansibleが必要になるのですが、そこはvagrant様が自動で入れてくれます。便利。
ということで今回はansible_localを採用。
使う側の環境に左右されないっていうのはいいよね。
playbook
ansible初心者なので、いろいろ試行錯誤がありました。
ansible_localを採用したので、ほぼansibleをローカルにかける時と同じはず。
inventoryにhostsがないと実行してくれない
今回ローカルだけなので、hostsとか別ファイルじゃなくてもいいかなーとか思ってたら
inventoryにないhostは対象にならない仕様っぽい。要調査。
なので127.0.0.1とだけ書いたファイルを用意して、Vagrantfileにてinbentoryファイルとして指定しました。
特定のディレクトリで複数コマンドを実行する
commandモジュールを使うとき、chdirで実行ディレクトリを指定できるわけですが、複数コマンドを同じディレクトリで実行するときって毎回これ書くの?って感じでした。
with_itemsっていうタスクをループできる機能があるってことなので、それを使うことで楽に書けるっぽい
- name: build & install erlang command: "{{ item }}" args: chdir: /usr/local/src/otp with_items: - ./otp_build autoconf - ./configure - make - make install
インストールしたライブラリのパスを使う
erlangインストール後、elixirのインストールでerlangのパスが必要になのですが、
普通にPATH=hogehogeってのをコマンドモジュールで実行したらうまいこといかなかった。
で、結局うまく行かなかった理由は分からないのだが、
コマンド(というかタスク?)実行時にPATHを指定するには、environmentを設定すれば良いらしい
- name: build & install elixir command: "make clean test" args: chdir: /usr/local/src/elixir environment: PATH: "{{ ansible_env.PATH }}:/usr/local/bin"