入門ChefSolo-InfrastructureasCode-1.0.0を買ってvagrantにハマっています。
vagrantの設定について色々調べてみました。
環境
- mac-osx
事前準備に必要なもの
- virtualbox
- ruby 1.9.3p327 (rbenv) ※入っていないかたはrbenvで複数バージョンのRubyを管理するmac os lionを読んでいれてみてください
- vagrant(試したバージョンは1.1.5) ※入っていないかたはvagrantからDownloadポチっと押してインストールしてきてください。
参考にしたサイト
vagrantとは?
vm(virtualbox,vmware)をコマンドラインで作成、起動などができるもの
chef-soloやるだけなら特に必要はないが、chef-soloをやる場合に何回も壊しては作るを繰り返すことになるので合ったほうが便利
ちなみにvagrantでもなくてもvirtualboxのコマンドでも頑張れば同様なことはできる。
chef-soloを使う為の箱の自動化処理部分を担ってくれる
Vagrantfileとは
Vagrantfileはvagrantの設定ファイルです
以下Vagrantfileの設定についての説明です。
またこれ以下の設定内容は全て下記のブロック内で設定してください。
Vagrant.configure("2") do |config|
.
.
#このブロック内で定義してください。
end
config.vm.box
vagrant内部で持つvmの名前です。
これは
vagrant box add {任意のvm名称}
の{任意のvm名称}の部分にあたります。
設定は下記にような形になります
config.vm.box = "{任意のvm名称}"
公式より
The name argument of this command is a logical name, meaning you can effectively choose whatever you want. This is the name that Vagrant searches for to match with the config.vm.box setting in Vagrantfiles.
ちょっと英語が読めませんがvagrant box add したものと同一でなければいけません(多分合ってる)。
また勘違いしやすいのですがこれとGUIの管理ツールから見えるbox名前は一致しません。
これは後で説明します。
config.vm.provider
provider (virtualbox,vmware等)の基本設定を変更することができます。
boxの名称の変更
virtualboxのGUI上で見える名前を設定したい場合は
config.vm.provider :virtualbox do |vb|
vb.name = "{任意の名前}"
end
とすれば名前を変更できます。
vb.nameとvagrantで操作するbox名は一致しません。
あくまでvirtualbox上のGUIの名前になります。
メモリの設定
仮想boxのメモリの割り当てを変更したい場合は
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "変更したいメモリ(Mbyte単位)"]
end
とすればメモリの割り当てを変更できます。
config.vm.network
vmのネットワーク設定です。
vagrantbox.esのcentos6.4だとデフォルトはNATのポートフォワーディングのみの設定なので
自分はHostOnlyAdapterの設定を追加しています。
config.vm.network :private_network, ip: "ゲストOS側の割り当てたい任意のIPアドレス"
他にもportフォワーディングとかbrigeとか設定できるみたいですが試していないので割愛します。
config.vm.provision
vmの起動後に実行してくれる設定を持たすことができます。
起動後に前処理をしてくれるイメージで問題有りません。
:shell
前処理をshellで実行出来ます。
設定は下記のようになります。
config.vm.provision :shell, :path => "{任意の名前}.sh"
この例ですとvmの起動後カレントの{任意の名前}.shを実行するという処理になります。(起動時毎回)
ちなみに自分はvagrantbox.esから取ってきたCentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.2.8, Chef 11.4.0, Puppet 3.1.0)のboxが最初rsyncが入ってなくて初回chef-soloを実行するとエラーになったので
{任意の名前}.shを下記にように書きました。
#!/usr/bin/env bash
#
# provisioning shell
# @see http://docs.vagrantup.com/v2/provisioning/shell.html
#
set -e
# rsyncパッケージがデフォルトで入っていない場合はインストールする
if ! yum list installed | grep rsync >/dev/null 2>&1; then
yum -y install rsync
fi
また:inlineというものもあって.shでなく直接Vagrantfileに書いて実行できるようです。試していないので説明は公式に譲ります。
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision :shell, :inline => "echo hello"
end
他にも
- chef-soloの設定
- puppetの設定
- chef-cliantの設定
ができるみたいですが試していなので割愛します。
config.vm.synced_folder
共有フォルダの設定です。
デフォルトは
- ホスト側はVagrantfileがおいてあるカレントディレクトリ
- ゲスト側は/Vagrant
が共有フォルダとして設定されていますが上記内容を変更出来ます。
config.vm.synced_folder "ホスト側のディレクトリ", "ゲスト側のディレクトリ"
[おまけ]vagrant pluginコマンドについて
vagrantはいろんなプラグインがgemで出まわってます。
このpluginをvagrantに食わせる場合は
vagrant plugin install {gemの名称}
で入れられます。
有名どころだとsaharaとかもこれでinstallできます。
ちなみにvagrantboxesのpluginは自分の環境では上手く動作しませんでした。
vagrant-vbguest plugin
Guest Additionsの自動更新をしてくれるもの
vagrant plugin install vagrant-vbguest
[余談]作ったvagrantのVMについて
vagrantで作ったvmはGUI上で除去などすると
設定ファイルが残ったままになるので再度同じ名前のboxを作ろうするとエラーになります。
そんな時は~/.vagrant.dの削除をしてみてください。
今日はここまで調べたのでまた調べたらこの記事に追記していこうかと思ってます。