クラウド系のProviderを使用していると毎回同じような設定をVagrantfileに書く事になりがちです。
Box化することで共通項目をまとめVagrantfileに記述しなければならない項目を減らす事ができます。
また、ATLASで公開することで設定内容を共有できるようにしてみます。
Boxの作成
以前の記事と同様の方法でBoxを作成します。
vagrant-cloudstackで複数VMの起動&Boxの作成 - Qiita
今回は例としてCloudStack(IDCFクラウド)で、最小スペックでVagrant用テンプレートのBoxを作成してみます。
- テンプレート
- CentOS 6.6 64-bit for Vagrant
- サービスオファリング
- light.S1
まず、Box用のディレクトリを作成します。
$ mkdir idcfcloud_centos_6.6
$ cd idcfcloud_centos_6.6
このディレクトリの中に以下のような内容でVagrantfile
とmetadata
ファイルを作成します。
Vagrant.configure("2") do |config|
config.vm.provider :cloudstack do |cloudstack|
cloudstack.host = "compute.jp-east.idcfcloud.com"
cloudstack.path = "/client/api"
cloudstack.port = "443"
cloudstack.scheme = "https"
cloudstack.api_key = "#{ENV['CLOUDSTACK_API_KEY']}"
cloudstack.secret_key = "#{ENV['CLOUDSTACK_SECRET_KEY']}"
cloudstack.zone_name = "tesla"
cloudstack.template_name = "CentOS 6.6 64-bit for Vagrant"
cloudstack.service_offering_name = "light.S1"
cloudstack.network_type = "Advanced"
cloudstack.network_name = "network1"
end
end
{
"provider": "cloudstack"
}
tarコマンドで作成した2つのファイルを固めればBoxの完成です。
$ tar cfvz idcfcloud_centos_6.6.box Vagrantfile metadata.json
Boxの登録
作成したBoxをATLASに登録します。
ATLASのアカウント作成・Boxの登録方法は以下の記事が画像付きで分かりやすかったので、そちらを参照してください。
タイトルはVagrant Cloudですが、画面はATLASになっています。
プロバイダ名は使用しているプロバイダに応じて変更する必要があります。
今回の例ではproviderにvirtualbox
の代わりにcloudstack
を入力して下さい。
Vagrant Cloudにサインインしたついでにboxを登録してみる - Qiita
Boxの公開
登録されたBoxはリリースされるまで公開されません。
以下の画面でRelease Version
を押すとリリースされます。
公開範囲を限定したい場合にはSettingsでPrivateにチェックをいれると所有者と許可されたメンバー以外からアクセスできなくなります。
Boxの使用
vagrant-cloudstackのインストール
CloudStack Providerを使用するためにvagrant-cloudstack
をインストールしておきます。
$ vagrant plugin install vagrant-cloudstack
Boxの取得
通常と同じくvagrant box add
コマンドでBoxを取得する事ができます。
$ vagrant box add atsaki/idcfcloud_centos_6.6
公開範囲が限定されているBoxを取得するためにはvagrant login
コマンドでATLASにログインしておく必要があります。
$ vagrant login
$ vagrant box add atsaki/idcfcloud_vagrant_centos_6.6
Boxの中身の確認
取得されたBoxは~/.vagrant.d/boxes
下に配置されます。
他人が作成したBoxを使用する場合にはVagrantfileの中身をみて設定に問題がないか確認しておきましょう。
.
├── atsaki-VAGRANTSLASH-idcfcloud_centos_6.6
│ ├── 0.0.1
│ │ └── cloudstack
│ │ ├── Vagrantfile
│ │ └── metadata.json
│ └── metadata_url
Boxを利用して仮想マシンを起動する
取得したBoxを使用するVagrantfileを作成します。
SSHでログインするための設定等を必要に応じて追記しておきます。
Vagrant.configure(2) do |config|
config.vm.box = "atsaki/idcfcloud_centos_6.6"
config.ssh.private_key_path = "#{ENV['VAGRANT_SSH_PRIVATE_KEY']}"
config.ssh.port = "22"
config.vm.provider :cloudstack do |cloudstack|
cloudstack.pf_ip_address_id = "#{ENV['CLOUDSTACK_PF_IP_ADDRESS_ID']}"
cloudstack.pf_public_port = "22"
cloudstack.pf_private_port = "22"
cloudstack.keypair = "#{ENV['CLOUDSTACK_SSH_KEYPAIR']}"
end
end
Vagrantfileの中で参照してる環境変数を設定します。Box内で使用している環境変数についても設定する必要があります。
$ export VAGRANT_SSH_PRIVATE_KEY=YOUR_SSH_PRIVATE_KEY
$ export CLOUDSTACK_API_KEY=YOUR_API_KEY
$ export CLOUDSTACK_SECRET_KEY=YOUR_SECRET_KEY
$ export CLOUDSTACK_PF_IP_ADDRESS_ID=YOUR_PF_IP_ADDRESS_ID
$ export CLOUDSTACK_SSH_KEYPAIR=YOUR_SSH_KEYPAIR
環境変数の設定はdotenvやdirenvを使用すると、設定を一度書けば
自動で設定されるようになるので楽です。
Vagrantfileの作成、環境変数の設定が完了すればvagrant up
コマンドで仮想マシンを起動できます。
$ vagrant up --provider=cloudstack
Boxの設定を上書きする
Boxの設定で変更したい箇所がある場合にはVagrantfileで上書きすることができます。
設定の優先度については以下のドキュメントを参照してください。
例えば、service offeringの設定を上書きする事で仮想マシンのスペックを変更することができます。
Vagrant.configure(2) do |config|
config.vm.box = "atsaki/idcfcloud_centos_6.6"
config.ssh.private_key_path = "#{ENV['VAGRANT_SSH_PRIVATE_KEY']}"
config.ssh.port = "22"
config.vm.provider :cloudstack do |cloudstack|
cloudstack.service_offering_name = "light.S2" # ここで上書き
cloudstack.pf_ip_address_id = "#{ENV['CLOUDSTACK_PF_IP_ADDRESS_ID']}"
cloudstack.pf_public_port = "22"
cloudstack.pf_private_port = "22"
cloudstack.keypair = "#{ENV['CLOUDSTACK_SSH_KEYPAIR']}"
end
end