ansibleを使ってRailsを立ち上げてみた。

安藤(プログラマー)
演劇もやっていまする。

取り上げる題材を散らかしまくっておりますが、今回はansibleを使ってrailsを立ち上げてみようかと思います。
rubyも触ってみたいですしねー。
環境は毎度おなじみ、vagrantでやります!

今回はついでにvimも一緒にインストールされるように作って楽しようかなと思います。笑

では早速いきます。
まずはplaybookの中をざっとご紹介。

playbook
∟ init.yml
∟ roles
∟ ruby
∟ tasks
∟ main.yml
∟ rbenv.yml
∟ ruby-build.yml
∟ ruby-install.yml
∟ templates
∟ rbenv.sh.j2
∟ mysql
∟ tasks
∟ main.yml
∟ rails
∟ tasks
∟ main.yml
∟ vim
∟ tasks
∟ main.yml

こんな具合のファイル構成です。
役割イメージを自分なりに説明していきますと・・・

init.yml

- hosts: all
roles:
- ruby
- mysql
- rails
- vim
vars:
ruby_version: 2.4.0
rails_version: 5.0.0

こいつがまぁ司令塔ですね。
rolesに配置されているそれぞれのtasksを呼び出すイメージでしょうか。

init.ymlから司令を受けて働くのがrolesな訳ですね。
上から順に行きましょう。

ruby

main.yml

- include: rbenv.yml
- include: ruby-build.yml
- include: ruby-install.yml

こいつがrubytasksの中のまとめ役。
それぞれのymlの処理をincludeしていますー。

rbenv.yml

- name: git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
command: git clone https://github.com/sstephenson/rbenv.git ~/.rbenv creates=~/.rbenv
tags:
- ruby
- rbenv
- name: add rbenv initialization to profile
template: src=rbenv.sh.j2 dest=/etc/profile.d/rbenv.sh owner=root group=root mode=0755
sudo: true
tags:
- ruby
- rbenv

こやつがrbenvを落として来て、templatesにあるrbenv.sh.j2を実行。

rbenv.sh.j2

if [ -d "$HOME/.rbenv" ]; then
export PATH=$HOME/.rbenv/bin:$PATH;
export RBENV_ROOT=$HOME/.rbenv;
eval "$(rbenv init -)";
fi

これでrbenvコマンドが使えるようになります。
続いて、rubyを入れる際に必要なプラグインも用意しまして、

ruby-build.yml

- name: git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
command: git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build creates=~/.rbenv/plugins/ruby-build/
tags:
- ruby
- ruby-build

そしてrubyのインストールですね!

ruby-install.yml

- name: install build depends by Ruby
yum: name={{ item }} state=present
with_items:
- gcc
- openssl-devel
- libyaml-devel
- readline-devel
- zlib-devel
- git
sudo: true
tags:
- ruby
- ruby:install
- install
- name: check ruby rbenv installed
shell: cd; bash -lc "rbenv versions | grep {{ ruby_version }} | tr '*' ' ' | sed -e 's/\s\+//' | cut -f1 -d' '"
register: ruby_installed
ignore_errors: yes
tags:
- ruby
- ruby:install
- install
- name: rbenv install {{ ruby_version }}
command: rbenv install {{ ruby_version }}
when: ruby_installed.stdout != ruby_version
tags:
- ruby
- ruby:install
- install
- name: rbenv global {{ ruby_version }}
command: rbenv global {{ ruby_version }}
when: ruby_installed.stdout != ruby_version
tags:
- ruby
- ruby:install
- install

これでrubyはOK! 続いてmysqlですー。

mysql

main.yml

- name: install MySQL
yum: name={{ item }} state=present
with_items:
- mysql-server
- mysql-devel
sudo: true
tags:
- mysql
- install
- name: Start MySQL service
action: service name=mysqld state=started
sudo: true
tags:
- mysql
- install

書かれたまんまですね!
mysqlをインストールして、ついでに作動させてくれています。

そして本命・railsさんの登場です。

rails

main.yml

- name: check Rails installed
shell: rails -v | cut -f 2 -d ' '
register: rails_installed
ignore_errors: yes
tags:
- ruby
- ruby:install
- install
- name: gem install rails -v {{ rails_version }}
command: gem install rails -v {{ rails_version }}
when: rails_installed.stdout != rails_version
tags:
- rails
- install

これにてrailsさんの準備はOK!!

ついでのついでですが、vimさんにも参入していただきますm(_ _)m
こんなに色々入れなくていいのですが、面倒だったのでバッと入れちゃいましたね・・・。
はい、すいません・・・。

vim

main.yml

- name: requires install
yum: name={{ item }} state=present
with_items:
- ctags
- mercurial
- ncurses-devel
- lua
- lua-devel
- perl
- perl-devel
- perl-ExtUtils-Embed
- python
- python-devel
- libselinux-python
sudo: true
tags:
- install
- name: install vim
yum: name=vim state=present
sudo: true
tags:
- vim
- install
- name: copy .vimrc file to vagrant home
copy: src=~/.vimrc dest=~vagrant/.vimrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"
tags:
- vim
- name: git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
command: git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
tags:
- vim
- neobundle
- install

neobundleまでついでに入れる徹底ぶり。笑
PCのローカル環境から.vimrcもコピーして、便利ツールも反映、、!
これでTaglistとかNEADTreeも使えるわけですな(^ ^)

無事に一発でRails立ち上がりました!!

なんとなく達成感のあるplaybook作りでした。
頑張って、Rails勉強するぞー。