sue445製itamaeプラグインいろいろ

20日目なので僕が今まで作った [itamae](https://github.com/itamae-kitchen/itamae) プラグインをまとめて紹介します [^itamae]

![sushi_counter.png](https://qiita-image-store.s3.amazonaws.com/0/8059/60401479-ee53-e8e1-19b1-1c38461b0bfd.png)

[^itamae]: 板前の絵は http://www.irasutoya.com/2013/08/blog-post_3071.html よりお借りしています :bow:

# itamae-plugin-resource-encrypted_remote_file
itamaeで暗号化されたファイルを復号化して転送するためのプラグインです

* https://github.com/sue445/itamae-plugin-resource-encrypted_remote_file
* https://rubygems.org/gems/itamae-plugin-resource-encrypted_remote_file

## 使い方
### ファイルを暗号化
別途 [reversible_cryptography](https://github.com/mitaku/reversible_cryptography) をインストールして暗号化してください

```shell-session
gem install reversible_cryptography

reversible_cryptography encrypt --password=PASSWORD --src-file=/path/to/secret_file.txt --dst-file=/pass/to/encrypted_file.txt
```

### レシピ
[remote_file](https://github.com/itamae-kitchen/itamae/wiki/remote_file-resource) の代わりに `encrypted_remote_file` を使うことで、暗号化されたファイルを転送時に復号化します

```ruby:recipe.rb
encrypted_remote_file "/home/deployer/.ssh/id_rsa" do
  owner    "root"
  group    "root"
  source   "files/id_rsa.encrypted"
  password ENV["ID_RSA_PASSWORD"]
end
```

`password` 以外は `remote_file` と使い方は全く同じです。

## 応用編：dotenvと組み合わせて使う
パスワードをソースコード中に書くのも嫌なので、自分は [dotenv](https://github.com/bkeepers/dotenv) を使って `.env` にパスワードを書くようにしています。（.envはコミットしない）

```:.env
ID_RSA_PASSWORD=12345678
```

```:.gitignore
.env
```

```ruby:recipe.rb
require 'dotenv'
Dotenv.load

ENV["ID_RSA_PASSWORD"]
#=> "12345678"

encrypted_remote_file "/home/deployer/.ssh/id_rsa" do
  owner    "root"
  group    "root"
  source   "files/id_rsa.encrypted"
  password ENV["ID_RSA_PASSWORD"]
end
```

# itamae-plugin-recipe-consul
itamaeでconsulをインストールするためのプラグイン

* https://github.com/sue445/itamae-plugin-recipe-consul
* https://rubygems.org/gems/itamae-plugin-recipe-consul

consul自体はバイナリを置くだけなのですが、daemon化する必要があったのでOSによってinitスクリプトやsystemd unitをいい感じに配置するためにプラグイン化しました。

起動スクリプトはこちらのを参考にさせてもらいました :bow:

[consulのinitスクリプトとsystemdユニットファイルを書いてみた - Qiita](http://qiita.com/yunano/items/7ef5fa5670721de55627)

## 使い方
```ruby:recipe.rb
include_recipe "consul"
```

内部でモジュール化しているので個別に読みたい場合は下記参照

```ruby:recipe.rb
include_recipe "consul::setup"
include_recipe "consul::install"
include_recipe "consul::service"
```

## node
```yaml:node.yml
consul:
  # install consul version (required)
  version: "0.6.4"

  # download zip platform (default: "linux_amd64")
  platform: "linux_amd64"

  # path to downloaded zip file (default: "/usr/local/src")
  src_dir: "/usr/local/src"

  # path to consul executable file (default: "/usr/local/src")
  bin_dir: "/usr/local/bin"

  # consul agent -data-dir option (default: "/tmp/consul")
  data_dir: "/tmp/consul"

  # consul agent other options (default: none)
  options: "-server -bootstrap-expect 1"

  gomaxprocs: 2

  # consul service actions when after install (default: enable, start)
  service_actions:
    - enable
    - start
    # - disable
    # - stop
```

## 本番導入事例
こいつは弊社のitamaeレシピに組み込んで、実際に本番環境に投入されています :triumph:

詳しくは下記をご覧ください。

* [ドリコムのインフラCI - Tech Inside Drecom](https://tech.drecom.co.jp/infrastructure-ci/)
* [ConsulとStretcherの利用事例 -push型からpull型デプロイへの移行-](https://tech.drecom.co.jp/examples-consul-and-stretcher-push-to-pull/)


# itamae-plugin-recipe-tmux 
itamaeでtmuxをインストールするためのプラグイン

* https://github.com/sue445/itamae-plugin-recipe-tmux
* https://rubygems.org/gems/itamae-plugin-recipe-tmux

autohomeにtmuxをインストールしたい需要がたまにあって、その度にやり方をググるのに疲れたのでitamaeプラグインにしました。

## 使い方
```ruby:recipe.rb
include_recipe "tmux"
```

## Node
```yaml:node.yml
tmux:
  # tmux prefix (default: /home/<username>/local)
  prefix: /usr/local

  # install version (default: 2.1)
  version: 2.1

libevent:
  # install version (default: 2.0.22)
  version: 2.0.22

ncurses:
  # install version (default: 6.0)
  version: 6.0    
```

# itamae-plugin-recipe-tig 
itamaeでtigをインストールするためのプラグイン

* https://github.com/sue445/itamae-plugin-recipe-tig
* https://rubygems.org/gems/itamae-plugin-recipe-tig

aptやyumに上がっているのが古すぎるので自分でビルドしてインストールするために作りました。

## 使い方
```ruby:recipe.rb
include_recipe "tmux"
```

## Node
```yaml:node.yml
tmux:
  # tmux prefix (default: /home/<username>/local)
  prefix: /usr/local

  # install version (default: 2.1)
  version: 2.1

libevent:
  # install version (default: 2.0.22)
  version: 2.0.22

ncurses:
  # install version (default: 6.0)
  version: 6.0
```

# itamae-plugin-recipe-git_now
itamaeで [git-now](https://github.com/iwata/git-now) をインストールするためのプラグインです。

* https://github.com/sue445/itamae-plugin-recipe-git_now
* https://rubygems.org/gems/itamae-plugin-recipe-git_now

開発環境で息をするように git nowしているので作りました。

## 使い方
```ruby:recipe.rb
include_recipe "git_now"
```

## Node
```yaml:node.yml
git_now:
  # tig prefix (default: /usr/local)
  prefix: /usr/local

  # source dir (default: #{node[:git_now][:prefix]}/src)
  src: /usr/local/src

  # specify scheme to use in git clone (default: git)
  scheme: git

  # install revision (default: HEAD)
  revision: v0.1.1.0
```

# itamae-plugin-recipe-omori_gohan
個別にプラグイン作るまでもない雑なプラグインです。

* https://github.com/sue445/itamae-plugin-recipe-omori_gohan
* https://rubygems.org/gems/itamae-plugin-recipe-omori_gohan

## 使い方
```ruby:recipe.rb
include_recipe "omori_gohan"
```

「[おおもりご飯](http://dic.pixiv.net/a/%E3%81%8A%E3%81%8A%E3%82%82%E3%82%8A%E3%81%94%E9%A3%AF) のレシピを `include` する」という語感が面白いのでこういう名前にしました

# 共通していること
## 全部CIしている
[Vagrant](https://www.vagrantup.com/) + [Wercker](http://www.wercker.com/) + [DigitalOcean](https://www.digitalocean.com/) という、[itamae](https://github.com/itamae-kitchen/itamae) や [Serverspec](https://github.com/mizzy/serverspec) と同等のCIを無駄に行ってます。（最低でもCentOSとDebianでテストでCI）

詳細

* [34歳になった＆itamaeプラグインを本気でCIする #omotesandorb - くりにっき](http://sue445.hatenablog.com/entry/2016/04/07/195627)
  * このエントリだと古いのでWerckerの設定がClassicスタイル
* [Wercker使っててClassic stackからWorkflowに移行した - くりにっき](http://sue445.hatenablog.com/entry/2016/08/12/133645)
  * itamaeプラグインのCIをClassicスタイルからWorkflowスタイルに移行した時のメモ