Itamae | vagrant オプションで Vagrantにトイレを設置 #devops #itamae

# Itamae | vagrant オプションで Vagrantにトイレを設置 #devops #itamae

## 概要
プロビジョニングツール Itamae

vagrant オプションでVagrantで作成した環境へのプロビジョニングを行います。
toilet コマンドのインストールします。

※toilet コマンドについては下記リンク参照
http://www.tecmint.com/20-funny-commands-of-linux-or-linux-is-fun-in-terminal/

## 試行
### 前提
動作確認に使用した Vagrantfile

~~~
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

$script = <<SCRIPT
sudo apt-get upgrade -y
sudo apt-get update -y
SCRIPT

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "itamae-target" do |web|
    web.vm.provider :virtualbox do |vb|
      vb.name = "itamae_target"
    end
    web.vm.hostname = "itamae-target"
    web.vm.box = "precise64"
    web.vm.provision "shell", inline: $script
    web.vm.network :private_network, ip: "192.168.33.99"
  end
end
~~~

### 仕様
* toilet をインストールするだけのレシピを利用。

~~~
package "toilet" do
  action :install
end
~~~

* Vagrant の VM名は itamae_target
* user は vagrant

### 実行

~~~
# ssh コマンドでローカル環境からプロビジョニング実行
$ vagrant ssh-config --host itamae-target
Host itamae-target
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /path/to/your/key/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL
$ itamae ssh --vagrant -h itamae-target recipe.rb
 INFO : Starting Itamae...
 INFO : Recipe: /path/to/your/vagrant_home/itamae_target/recipe.rb
 INFO :    package[toilet]
 INFO :       action: install
 INFO :          installed will change from 'false' to 'true'

$ vagrant ssh
$ which toilet
/usr/bin/toilet
$ toilet -v
TOIlet Copyright 2006 Sam Hocevar
Internet: <sam@hocevar.net> Version: 0.2, date:

TOIlet, along with the various TOIlet fonts and documentation, may be
freely copied and distributed.

If you use TOIlet, please send an e-mail message to <sam@hocevar.net>.

The latest version of TOIlet is available from the web site,
        http://libcaca.zoy.org/toilet.html

Usage: toilet [ -hkostvSW ] [ -d fontdirectory ]
              [ -f fontfile ] [ -F filter ] [ -w outputwidth ]
              [ -I infocode ] [ -E format ] [ message ]

$ toilet "Itamae" -F gay

 mmmmm    m
   #    mm#mm   mmm   mmmmm   mmm    mmm
   #      #    "   #  # # #  "   #  #"  #
   #      #    m"""#  # # #  m"""#  #""""
 mm#mm    "mm  "mm"#  # # #  "mm"#  "#mm"
~~~

![itamae_toilet_gay.png](https://qiita-image-store.s3.amazonaws.com/0/43480/df6bba5e-c0ff-3b0f-a6e0-8cb8d0745112.png)

## コードリーディング
https://github.com/ryotarai/itamae/blob/bcd63771765e5f25167d4681239a826e49736a00/lib/itamae/runner.rb#L58-L63

vagrant オプションは、内部で下記のコマンドを実行しています

~~~ruby
`vagrant ssh-config #{opts[:host]} > #{config.path}`
~~~

opts[:hosts] は --host （-h) オプションの指定内容。
config は一時ファイルです。

## 参照
* [Itamae GitHub](https://github.com/ryotarai/itamae)
* [Itamae Vagrant GitHub](https://github.com/chiastolite/vagrant-itamae)
* [軽量・高速版 Chef 「Itamae」。 プロビジョニングツールの学習コスト低下。Berkshelfからの解放。Chef Solo から Chef Zero への移行からの解放 #devops #itamae](http://qiita.com/tbpgr/items/3b6796c1cfc3c3e5521f)
* [Itamae | vagrant-itamae plugin で Vagrantにトイレを設置 #devops #itamae](http://qiita.com/tbpgr/items/24787ba14dd3d3903ef1)