Vagrantを1.5系に上げたら色々追加されていたので確認する


## 経緯
インフラ系ツールの勉強会として始まった[Fukagawa.rb](http://fukagawarb.doorkeeper.jp/)、次回の#02で、vagrantを扱う。
その予習も兼ねて、vagrantをアップデートしたら結構追加されていたので、まとめてみる。
(以前はv1.4.3を使用していました。)

環境：Mac OSX 10.9.2 / vagrant 1.5.4

※ これ違うな、と思われる記述がありましたらご指摘下さい。

## 新しい要素
開発環境向けの新要素。

- VAGRANT CLOUD: Vagrant Boxを外部に公開/非公開することのできるもの。  
Boxのバージョン管理にも利用できる。  
- BOXの共有(http共有/ssh共有/General Sharing)  

参考記事：[Vagrantが開発環境向けコラボレーションツールをリリース](http://www.infoq.com/jp/news/2014/03/vagrant-cloud)


## コマンド
[VAGRANT DOCS COMMAND-LINE INTERFACE](http://docs.vagrantup.com/v2/cli/index.html)と`$ vagrant -h`、`$ vagrant list-commands`を見ながら確認していきます。

```
box          manages boxes: installation, removal, etc.
```

・`add`: 予め作られているvagrant用のBoxを追加する。
例：`$ vagrant box add ADDRESS`と使用する。

追加する方法は3つある。
1. [VAGRANT CLOUD](https://vagrantcloud.com/)内のカタログからイメージを探し、"hashicorp/precise64"みたいに追加する。
例：`$ vagrant box add hashicorp/precise64`
2. [VAGRANT CLOUD](https://vagrantcloud.com/)内のカタログからイメージを探し、ファイルパス or URLを指定して追加する。
この場合、ベーシック認証もサポートしているし、http_proxyでの環境変数でも利用できる。
当然(VAGRANT CLOUDでもそうだが)httpsもサポートしている。
例：`$ vagrant box add https://vagrantcloud.com/hashicorp/precise64`
3. BoxのURLを直接指定してダウンロードする。[Vagrantbox.es](http://www.vagrantbox.es/)を利用していた時の方法。

>OPTION:
>1.Boxファイルを直接指定しない場合(VAGRANT CLOUDを利用)
>>・`--box-version VALUE`: 追加したいバージョンを指定する。
デフォルトでは、最新のバージョンが追加される。
例：`$ vagrant box add hashicorp/precise64 --box-version "1.0.0"`
例：`$ vagrant box add hashicorp/precise64 --box-version ">=1.0.0,<1.1.0"`
・`--cacert CERTFILE`: ルート認証局での認証を使用しない場合に使用。
・`--cert CERTFILE`: Boxをダウンロードする時にクライアント証明書を利用できる。
・`-c, --clean`: Boxダウンロード時、(以前Boxをダウンロードした時に失敗した?)一時ファイルを削除してダウンロードを開始できる。
・`-f, --force`: Box listに同名のBoxがある場合、使用。(上書きして追加する。)
・`--insecure`: httpsのURLで、SSL証明書を検証せずにBoxをダウンロードする。
・`--provider PROVIDER`: Virtual BOxなどのプロバイダを指定してダウンロードする。
デフォルトでは、プロバイダを自動検出(選択して)ダウンロードする。

>>```
例：$ vagrant box add hashicorp/precise64
1) hyperv
2) virtualbox
3) vmware_fusion
Enter your choice:
```

>2.Boxファイルを直接指定する場合(VAGRANT CLOUDを利用しない)
>>`--checksum VALUE`: check sumを利用できる。
`--checksum-type TYPE`: check sumのタイプを指定する。
サポートしているのは、"md5", "sha1", "sha256"
checksumとchecksum-typeは併用利用する。
`--name VALUE`: Boxの名前を指定する。


・`list`: ローカル環境にあるBox listを表示する。
例：`$ vagrant box list`と使用する。

・`outdated`: VAGRANT CLOUDからダウンロードしたBoxが最新バージョンか確認できる。
>OPTION:
`--global`オプションを付けることで、全てのBoxのアップデートを確認可能。

・`remove`: 追加したBoxを削除する。
>OPTION:
`--provider`オプションを付けることで、プロバイダを指定できる。

・`repackage`: 現在の稼働状態で再配布できるよう、Boxを再構成する。

・`update`: Boxをアップデートする。
>OPTION:
`--box VALUE`: 指定したBoxをアップデートする。
`--provider VALUE`: 指定したプロバイダのBoxをアップデートする。

```
connect      connect to a remotely shared Vagrant environment
```

`vagrant share`されたVagrant環境に接続する。
例:`vagrant connect NAME`と使用する。
>OPTION:
`--disable-static-ip`: SOCKS環境で利用。
`--static-ip IP`: どのIPにアクセスするかを指定。
vagrant connectでは、172.16.0.0/16のIP郡を利用する。
`--ssh`: `vagrant share --ssh`と同様にsshで接続する。

```
destroy      stops and deletes all traces of the vagrant machine
```

Vagrantで実行した仮想OSを破棄する。
>OPTION:
`-f, --force`: 破棄してよいかの確認を求めず、実行する。

```
halt         stops the vagrant machine
```

Vagrantで実行した仮想OSを停止(shutdown)する。
>OPTION:
`-f, --force`: 端末の電源を抜くように、OSを停止する。

```
init         initializes a new Vagrant environment by creating a Vagrantfile
```

今いるディレクトリで、VagrantのOS起動を設定する。
例：`vagrant init [box-name] [box-url]`と使用する。
`[box-name]`: 作成されたVagrantfileに`config.vm.box`を指定する。
`[box-url]`: 作成されたVagrantfileに`config.vm.box_url`を指定する。

```
login        log in to Vagrant Cloud
```

Vagrant Share等、特定の機能が必要な際、VAGRANT CLOUDにログインして利用する。
(注意:Vagrantを利用する大半のことでは利用しない。)

```
例：$ vagrant login
(中略)
Username or Email:
Password (will be hidden): 
You're now logged in!

$ vagrant login --check
You are already logged in.

$ vagrant login --logout
You are logged out.
```

>OPTION:
`--check`: 今ログイン状態か確認する時に使用。
`--logout`: ログアウトする時に使用。

```
package      packages a running vagrant environment into a box
```

現在、VirtualBoxで稼働している環境を再利用可能な状態(Box)にする。
また、このバージョンでは、VirtualBoxのみサポートしているが、今後他のプロバイダにも対応予定。
>OPTION:
`--base NAME`: VirtualBoxで稼働している端末の名前を指定する。
`--output NAME`: 生成されたBoxのファイル名を指定する。
デフォルトでは、`package.box`と保存される。
`--include x,y,z`: Boxとともにパッケージ化するファイルを指定する。
`--vagrantfile FILE`: Boxファイルとともにパッケージ化するVagrantfileを指定する。
なお、詳細は[Vagrantfile load order](http://docs.vagrantup.com/v2/vagrantfile/index.html#load-order)を確認して下さい。

```
plugin       manages plugins: install, uninstall, update, etc.
```

・`install`: プラグインの名前/ファイルパスからプラグインをインストールする。
プラグインの名前の場合、たいていRubyGemsからインストールされる。
例：`vagrant plugin install <name>`と使用。
>OPTION:
`--entry-point ENTRYPOINT`: 利用するプラグインのエントリポイントを指定する場合に利用。
`--plugin-source SOURCE`: インストールするプラグインのソース元を指定する。
`--plugin-version VERSION`: インストールするプラグインのバージョン("1.2.3"や"> 1.0.2, < 1.1.0")を指定する。

・`license`: プラグインのライセンスファイルをインストールする。
例：`vagrant plugin license <name> <license-file>`と使用。

・`list`: インストール済みのプラグインとそれぞれのバージョンの一覧を表示。

・`uninstall`: 指定した名前のプラグインをアンインストールする。
例：`vagrant plugin uninstall <name> [<name2> <name3> ...]`と使用。

・`update`: 指定されたプラグインをアップデートする。
但し、バージョン指定でインストールされたプラグインはアップデートされない為、再インストールが必要。
インストールされていないプラグインは、インストールされない。

```
provision    provisions the vagrant machine
```

vagrantで起動中のOSに対して、以下の設定を反映させる。
(詳細は、[PROVISIONING](http://docs.vagrantup.com/v2/provisioning/)を確認して下さい。)

| provisioners |URL|
|:--:|:--|
|Basic Usage|http://docs.vagrantup.com/v2/provisioning/basic_usage.html|
|File|http://docs.vagrantup.com/v2/provisioning/file.html|
|Shell|http://docs.vagrantup.com/v2/provisioning/shell.html|
|Ansible|http://docs.vagrantup.com/v2/provisioning/ansible.html|
|CFEngine|http://docs.vagrantup.com/v2/provisioning/cfengine.html|
|Chef Solo|http://docs.vagrantup.com/v2/provisioning/chef_solo.html|
|Chef Client|http://docs.vagrantup.com/v2/provisioning/chef_client.html|
|Docker|http://docs.vagrantup.com/v2/provisioning/docker.html|
|Puppet Apply|http://docs.vagrantup.com/v2/provisioning/puppet_apply.html|
|Puppet Agent|http://docs.vagrantup.com/v2/provisioning/puppet_agent.html|
|Salt|http://docs.vagrantup.com/v2/provisioning/salt.html|

>OPTION:
`--provision-with x,y,z`: 指定されたprovisionerを実行する。

```
reload       restarts vagrant machine, loads new Vagrantfile configuration
```

Vagrantで起動中のOSを再起動($ vagrant halt と $ vagrant up)する。
>OPTION:
`--provision`: provisionersを実行する。
`--provision-with x,y,z`: 指定したprovisionerを実行する。

```
resume       resume a suspended vagrant machine
```

Vagrantで稼働し、中断(`vagrant suspend`)していたOSを再開させる。

```
share        share your Vagrant environment with anyone in the world
```

Vagrantで稼働しているOSを共有する。
>OPTION:
`--disable-http`: HTTPアクセスを無効にする。
`--http PORT`: HTTPポート番号を指定する。
但し、HTTPアクセスを無効(`--disable-http`)にした場合、効果はない。
`--https PORT`: HTTPSポート番号を指定する。
但し、HTTPアクセスを無効(`--disable-http`)にした場合、効果はない。
`--ssh`: ssh接続を有効にする。デフォルトでは無効。
`--ssh-no-password`: ssh接続での鍵認証の暗号化を無効にする。
`--ssh-port PORT`: ssh接続のポート番号を指定する。
`--ssh-once`: 一度だけssh接続を許可する。最初の接続後、生成された鍵は破棄される。

```
ssh          connects to machine via SSH
```

Vagrantで稼働しているOSにssh接続する。
>OPTION:
`-c COMMAND, --command COMMAND`: 指定したCOMMANDをssh接続して実行する。
`-p, --plain`: ユーザに認証をさせてssh接続する。


```
ssh-config   outputs OpenSSH valid configuration to connect to the machine
```

Vagrantで稼働しているOSにssh接続する為の設定情報を出力する。
>OPTION:
`--host NAME`: 出力する設定名を指定する。

```
status       outputs status of the vagrant machine
```

Vagrantで稼働しているOSの状態を確認する。

```
suspend      suspends the machine
```

Vagrantで稼働しているOSを中断の状態にする。
中断にはホスト側で追加容量が必要だが、メモリやCPUリソースを消費しない。

```
up           starts and provisions the vagrant environment
```

Vagrantfileの設定を元にOSを起動する。
>OPTION:
`--[no-]destroy-on-error`:
予期しないエラーが発生した場合に、新しく作成されたOSを破棄(destroy)する。
これでデフォルトで設定されている。
`--[no-]parallel`: プロバイダがサポートしている場合、並列でOSを起動する。
`--provider x`: 使用するプロバイダを指定する。デフォルトでは、Virtualbox。
`--provision`: provisionersを実行する。
`--provision-with x,y,z`: 指定したprovisionerを実行する。

----

・VirtualBoxの共有フォルダやNFSが利用できない時に、rsyncで同期ができる。

```
rsync           syncs rsync synced folders to remote machine
```

```
rsync-auto      syncs rsync synced folders automatically when files change
```

詳細は、[RSYNC](http://docs.vagrantup.com/v2/synced-folders/rsync.html)、若しくは[RSYNC-AUTO](http://docs.vagrantup.com/v2/cli/rsync-auto.html)を確認して下さい。

以上です。
ご覧いただき、ありがとうございました。