Itamaeチートシート

# 対象バージョン
v1.9.6 (https://github.com/itamae-kitchen/itamae/releases/tag/v1.9.6) 

※随時更新の予定です



# 全リソース共通のアトリビュート

| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:---|:---|
| aciton         | 実行するアクション               | × | Symbol or Array |
| only_if        | あるコマンドが成功したときのみ実行 | × | String |
| not_if         | あるコマンドが失敗した時のみ実行   | × | String |
| user           | 実行ユーザ                       | × | String |



# リソース

## execute
### 概要
* シェルコマンドを実行する

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:---|
| command        | 実行するシェルコマンド  | ○ | String |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :run  |


```ruby:Ex
execute "update yum repo" do
  user "root"
  command "yum -y update"
end
```

## git
### 概要
* git cloneを実行する

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:---|
| repository     | cloneしたいgitリポジトリ  | ○ | String |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :sync  |


```ruby:Ex
git "/usr/local/rbenv" do
  repository "git://github.com/sstephenson/rbenv.git"
end
```

## remote_file
### 概要
* ファイルを転送する
* Chefでいうところのcookbook_file
* sourceは相対パスで指定

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:---|
| owner     | 所有者  | × | String |
| group     | 所属グループ  | × | String |
| source    | 転送したいファイルのパス  | ○ | String |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :create  |

```ruby:Ex
remote_file "/etc/profile.d/rbenv.sh" do
  owner "root"
  group "root"
  source "remote_files/rbenv.sh"
end
```

## remote_directory
### 概要
* ディレクトリを転送する
* Chefでいうところのremote_directory
* sourceは相対パスで指定

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:---|
| owner     | 所有者  | × | String |
| group     | 所属グループ  | × | String |
| source    | 転送したいファイルのパス  | ○ | String |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :create  |

```ruby:Ex
remote_directory "/etc/var/www" do
  owner "root"
  group "root"
  source "remote_files/etc/var/www"
end
```

## template
### 概要
* 用意したテンプレートファイル(erb)を転送する
* テンプレートファイルにはノード or variablesで定義した変数かを埋め込む

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:---|
| owner     | 所有者  | × | String |
| group     | 所属グループ  | × | String |
| source    | 転送したいテンプレートファイルのパス  | ○ | String |
| variables | テンプレートファイルに引き渡したい変数 | × | Hash |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :create  |

```ruby:Ex
template "/tmp/template" do
  source "hello.erb"
  variables(goodbye: "Good bye")
end
```

## package
### 概要
* パッケージをインストールする

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:---|
| name        | インストールしたいパッケージ名  | × | String |
| version     | インストールしたいパッケージのバージョン  | × | String |
| options     | インストール時の実行オプション  | × | String |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :install  |

```ruby:Ex
package "nginx" do
  version "1.6.1"
  options "--force-yes"
end
```

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

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:---|
| mode     | パーミッション  | × | String |
| owner     | 所有者  | × | String |
| group     | 所属グループ  | × | String |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :create  |


```ruby:Ex
directory "/var/foo/bar" do
  mode "775"
  owner "hoge"
  group "hoge"
end
```

## link
### 概要
* シンボリックリンクを作成する

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:---|
| link     | リンク先のパス  | × | String |
| to     | リンク先のパス  | ○ | String |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :create  |

```ruby:Ex
link "/tmp-link" do
  to "/tmp"
end
```

## local_ruby_block
### 概要
* blockを実行する

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:----|
| block do 〜 end     | block内のコードを実行する  | ○ | Proc

```ruby:Ex
local_ruby_block "greeting" do
  block do
    Itamae::Logger.info "板前"
  end
end
```

## file
### 概要
* ファイルを生成する

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:----|
| mode     | パーミッション  | × | String |
| owner     | 所有者  | × | String |
| group     | 所属グループ  | × | String |
| content     | ファイルの内容  | ○ | String |
| content_file  | 存在するファイルのパス | ○ | String |

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :create  |

```ruby:Ex
file "/tmp/file1" do
  content "Hello, World"
end
```

## user
### 概要
* ユーザを作成する

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:----|
| uid     | ユーザID  | × | String or Integer
| gid     | グループID  | × | String
| username     | ユーザ名  | × | String
| password     | パスワード  | × | String
| home     | 作成するユーザのホームディレクトリ  | × | String
| shell     | ログインシェル  | × | String
| system_user     | システムユーザとするか否か | × | true or false

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :create  |

```ruby:Ex
user "create user" do
  uid "123456789"
  username "hoge"
  password "abcdffg"
end
```

## service
### 概要
* サービスを起動や終了などを行う

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:----|
| name     | サービス名  | ○ | String

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :nothing  |

```ruby:Ex
service "cron" do
  action :stop
end
```

## gem_package
### 概要
* gemパッケージをインストールする

### アトリビュート
| アトリビュート名 |        用途       | 必須 | 型 |
|:---------------|:------------------|:----|:----|
| package_name     | gem名  | ○ | String
| gem_binary     | 利用するgemコマンドのバイナリのパス  | × | String or Array
| version     | インストールするgemのバージョン  | × | String
| options     | gemコマンドのオプション  | × | Array
| source     | インストールするgemの取得先のURL  | × | String

### デフォルト値
| アトリビュート名 |        値       |
|:---------------|:------------------|
| action        | :install  |
| gem_binary    | :gem |

```ruby:Ex
gem_package 'bundler' do
  gem_binary 'usr/local/rbenv/shims/gem'
  options ['--no-ri', '--no-rdoc']
end
```



# 謝辞
## 参考サイト
* [itamae/lib/itamae/resource at master · ryotarai/itamae](https://github.com/ryotarai/itamae)
* [Itamae - Infra as Code 現状確認会](https://speakerdeck.com/ryotarai/itamae-infra-as-code-xian-zhuang-que-ren-hui)