tkak's tech blog

This is my technological memo.

VagrantでVMware vSphere(ESXi)上のVMを操作する「vagrant-vsphere」を試してみた。

Vagrantのproviderは、VirtualBoxAWSなど様々ありますが、VMware vSphere(ESXi)用のvagrant-vsphereを試してみたので備忘録として残しておきます。

Installation

まずは、vagrant-vsphere pluginのインストールから。githubのREADMEに書いてますが一応。

$ vagrant plugin install vagrant-vsphere

Prepare dummy box

次にダミー用のboxイメージを作成します。vsphereを使う場合は、virtualboxとは違ってローカルにboxイメージは置きません。

$ cd ~/.vagrant.d/gems/gems/vagrant-vsphere-0.8.2/example_box/

example_boxディレクトリ配下にmetadata.jsonファイルがあるので、それをtarコマンドで固めます。

$ cat ./metadata.json
{
  "provider": "vSphere"
}

$ tar cvzf dummy.box ./metadata.json

作ったboxは、適当なディレクトリに配置します。例えばプロジェクトのrootに置く場合。

$ ls
Vagrantfile
Vagrantfile.virtualbox
Vagrantfile.vsphere
dummy.box
cookbooks/
nodes/
roles/
conf/
...
...

Prepare a template in vShpere

次に、VMのひな形になるboxを用意します。以下のリンクを参考に、vSphere上にクローン用のテンプレートイメージとCustomization Specificationを作成します。

Vagrant up

準備が終わったのでVMを作成します。 Vagrantfileはこんな感じで用意します。

$ vi Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = 'dummy'
  config.vm.box_url = './dummy.box'
  config.vm.synced_folder ENV["SYNCED_FOLDER"], "/vagrant"
  config.vm.network 'private_network', ip: 'x.x.x.x'
  config.ssh.host = 'x.x.x.x'

  config.vm.provider :vsphere do |vsphere|
    vsphere.host = 'HOST NAME OF YOUR VSPHERE INSTANCE'
    vsphere.data_center_name = 'YOUR DATACENTER'
    vsphere.compute_resource_name = 'YOUR COMPUTE RESOURCE'
    vsphere.resource_pool_name = 'YOUR RESOURCE POOL'
    vsphere.data_store_name = 'YOUR DATA STORE'
    vsphere.template_name = 'YOUR VM TEMPLATE'
    vsphere.name = 'NEW VM NAME'
    vsphere.user = 'YOUR VMWARE USER'
    vsphere.password = ENV["VSPHERE_PASSWORD"]
    vsphere.insecure = true
    vsphere.template_name = 'YOUR TEMPLATE NAME'
    vsphere.customization_spec_name = 'YOUR CUSTOMIZATION SPEC'
  end

end

ENV["SYNCED_FOLDER"]とENV["VSPHERE_PASSWORD"]は、Vagrantfileに直接書きたくないので、環境変数にしてます。 VMを作成する時に指定する感じです。

$ export SYNCED_FOLDER=/your/path
$ VSPHERE_PASSWORD=**** vagrant up --provider=vsphere
$ vagrant ssh

あとは普通に、vagrant sshvagrant destroyとか動きます。vagrant自体の細かい使い方は省略します。

Wrap up

vagrant-vsphereを試してみました。vSphere上のVM作成をコマンドラインからやりたいときに便利です。 (fogのvsphere providerも試してみたんですが、うまく動かなかったのでこっちにしました。)

今では、Chef cookbookのCI環境用に使ってます。 このplugin自体あんまり使ってる事例とかがなくて、試行錯誤しながらとりあえず動くところまではできたのでよかったです。 同じように困っている人がこのブログがお役にたてれば幸いです。ではでは。

References