itamaeメモ

## itamaeとは
chefの軽量版のような物です。そこまで覚えることも多くないので、導入コストはchefに比べ低いです。

## 初期設定
はじめにローカルでitamaeをインストールします。

```
~ gem install itamae
```

## 基本的な書き方

### リソース
#### execute
シェルコマンドを実行。

```
execute "delete images folder" do
  command "rm -rf images"
end
```

#### remote_file
ファイルを転送する。

```
# 転送先のパスを指定
remote_file "/etc/nginx/conf.d/app.conf" do
  owner "root"
  group "root"
  # レシピファイルからの相対パス
  source "templates/etc/nginx/conf.d/app.conf"
end
```

#### template
ファイルを転送する。remote_fileとの違いは、templateの場合、variables attributeを使用して、テンプレートに変数を引き渡すことができる点。

```
# 転送先のパスを指定
template "/etc/nginx/conf.d/app.conf" do
  owner "root"
  group "root"
  # レシピファイルからの相対パス
  source "templates/etc/nginx/conf.d/app.conf.erb"
  variables(app_name: "hello_world_application")
end
```

#### package
パッケージをインストールする。Redhat系ならyum ~, Debian系ならapt ~という感じでインストールが行われる。

```
package "git" do
 action :install
end
```

#### notifies
リソースが更新された場合に、他のリソースのアクションを実行する

```
service "nginx"

template "/etc/nginx/conf.d/site.conf" do
 source "template/etc/nginx/conf.d/site.conf"
 notifies :reload, "service[nginx]"
end
```

#### include_recipe
レシピから他のレシピを呼び出す。

```
include_recipe "nginx.rb"
```

#### directory
ディレクトリを作成する

```
directory "/var/www/app" do
  mode "775"
  owner "owner"
  group "group"
end
```

#### user
ユーザーの作成を行う。ここでパスワードを設定する際に気をつけなければならないのが、レシピに記載するパスワードはSHA512で暗号化したものでなければいけない、という点です。
以下の一番始めの項目を参照してください。
[itamaeでConoHaのVPSの初期設定を自動化する](http://qiita.com/k0kubun/items/2155daca22631f5b053f)

```
user "create user" do
  uid "213123213"
  username "hello"
  password "world"
end
```

#### service
サービスの起動、終了等、サービスの操作を行う

```
service "nginx" do
  action :stop
end

```

## 実行方法
### リモートホストに対して実行する

```
~ itamae ssh -h xxx.xxx.xx.xx -p 22 username recipe.rb
```

### Vagrantに対して実行する
[vagrant-hostsupdater](https://mistymagich.wordpress.com/2013/09/02/vagrant%E3%81%A7%E3%82%B2%E3%82%B9%E3%83%88os%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%9F%E9%9A%9B%E3%81%AB%E3%80%81%E3%83%9B%E3%82%B9%E3%83%88os%E3%81%AEhosts%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB/)を入れておくと便利かも。

```
~ itamae ssh --vagrant -h vm_name recipe.rb
```

## ディレクトリ構成
公式の[Best Practice](https://github.com/itamae-kitchen/itamae/wiki/Best-Practice)に沿う形が良いかと思うので、ディレクトリ構造は以下のようにします(以下公式wikiより引用)。

```
.
├── cookbooks
│   └── nginx
│       ├── default.rb
│       ├── files
│       │   └── etc
│       │       └── nginx
│       │           └── conf.d
│       │               └── static.conf
│       └── templates
│           └── etc
│               └── nginx
│                   └── conf.d
│                       └── dynamic.conf
└── roles
    └── web.rb
```


## 参考
* [itamaeでConoHaのVPSの初期設定を自動化する](http://qiita.com/k0kubun/items/2155daca22631f5b053f)
* [さっくと Itamae を試してみる](http://qiita.com/kasaharu/items/40265aea67a5986113f5)
* [公式wiki](https://github.com/itamae-kitchen/itamae/wiki)
* [Chef-soloからItamaeに完全移行した話](http://qiita.com/toritori0318/items/00ea2a75c8321aaf9ef6)
* [Itamaeチートシート](http://qiita.com/fukuiretu/items/170aa956731f2ffb5715)
* [EC2 のインスタンスを Itamae でプロビジョニングした](http://mizoguche.info/2015/01/provisioning_with_itamae/)
* [Itamae - Infra as Code 現状確認会](https://speakerdeck.com/ryotarai/itamae-infra-as-code-xian-zhuang-que-ren-hui)