LoginSignup
15
16

More than 5 years have passed since last update.

クラウド系ProviderのVagrant BoxをATLASで公開してみる

Last updated at Posted at 2015-02-15

クラウド系の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

このディレクトリの中に以下のような内容でVagrantfilemetadata ファイルを作成します。

Vagrantfile
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
metadata.json
{
    "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 を押すとリリースされます。

スクリーンショット 2015-02-15 13.14.24.png

公開範囲を限定したい場合にはSettingsでPrivateにチェックをいれると所有者と許可されたメンバー以外からアクセスできなくなります。

スクリーンショット 2015-02-15 13.23.56.png

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でログインするための設定等を必要に応じて追記しておきます。

Vagrantfile
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

環境変数の設定はdotenvdirenvを使用すると、設定を一度書けば
自動で設定されるようになるので楽です。

Vagrantfileの作成、環境変数の設定が完了すればvagrant up コマンドで仮想マシンを起動できます。

$ vagrant up --provider=cloudstack

Boxの設定を上書きする

Boxの設定で変更したい箇所がある場合にはVagrantfileで上書きすることができます。
設定の優先度については以下のドキュメントを参照してください。

例えば、service offeringの設定を上書きする事で仮想マシンのスペックを変更することができます。

Vagrantfile
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

参考資料

15
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16