Vagrant provider for VMware vCloud Director®

Version 0.2.1 has been released!

Please note that this software is still Alpha/Beta quality and is not recommended for production usage.

Right now a Precise32 is available for use, or you can roll your own as you please, make sure to install VMware tools in it.

Features of Version 0.2.1 are:

  • Critical Bugfixes

Features of Version 0.2.0 are:

  • It's now possible to connect to an existing VDC network without creating a vShield Edge using network_bridge = true in the Vagrantfile [ISSUE #23]. experimental
  • Added a upload_chunksize parameter to specify the chunk dimension during box uploads [ISSUE #21].
  • Added support for vCloud® Hybrid Service™ API version 5.7.
  • Added a new command to vagrant called vcloud-status that shows the current status of the vCloud instance relative to the Vagrant deployment. experimental
  • General code cleanup, code should be more readable and there's a rubocop file for our code conventions.
  • Passwords are now hidden when running in DEBUG mode.
  • Initial support for Vagrant 1.5 (currently not supporting the new "share" features).
  • Lowered Nokogiri requirement to 1.5.5 (you may need to remove a later version if installed).
  • Fixed the Edge Gateway NAT rules creation / deletion.
  • Added debug capabilities down to XML traffic exchanged during the REST calls.

Features of Version 0.1.2 are:

  • Fix ssh_key array for the sync_folder [ISSUE #30 thanks @JMG-OICR]

Features of Version 0.1.1 are:

  • bugfix multiple sub allocation pools ranges [ISSUE #24]
  • Putting back Google DNS as default if not specified
  • binding vCloud 5.5 API on 5.1 driver
  • Debug cut and general cosmetic cleanup
  • added DNS choice using the "ip_dns" Array config property.
  • Updated sync_folders.rb with code from vagrant-aws, Will focus on a better sync engine later in the future.
  • Removed dependency on rest-client gem, moved everything to httpclient.
  • Fixed destroy vApp bug.

Features of Version 0.1.0 are:

  • Basic Create/Provision/Destroy lifecycle.
  • Rsync-based provisioning (working on alternatives for that).
  • Use a single vApp as a container for Multi-VM Vagrantfiles.
  • Use a vApp vShield Edge to perform DNAT/SNAT on a single IP for Multi-VM Vagrantfiles.
  • Automatically create NAT rules on a fronting Organization Edge.
  • Automatic upload of the Vagrant box to the specified catalog.
  • Works on vCloud® Hybrid Service™!

What is still missing:

  • TEST SUITES! (working on that).
  • Speed, the code is definitely not optimized.
  • Permission checks, make sure you have at least Catalog Admin privileges if you want to upload boxes to vCloud.
  • Thorough testing.
  • Error checking is absymal.
  • Some spaghetti code here and there.
  • Bugs, bugs and BUGS!.

If you're a developer and want to lend us a hand, head over to our develop branch and get busy!

Install

Version 0.1.0 can be easily installed by running:

vagrant plugin install vagrant-vcloud

Vagrant will download all the required gems during the installation process.

After the install has completed a vagrant up --provider=vcloud will trigger the newly installed provider.

Here's a sample Multi-VM Vagrantfile, please note that vcloud.vdc_edge_gateway and vcloud.vdc_edge_gateway_ip are required only when you cannot access vcloud.vdc_network_name directly and there's an Organization Edge between your workstation and the vCloud Network.

precise32_vm_box_url = "http://vagrant.tsugliani.fr/precise32.box"

nodes = [
  { :hostname => "web-vm",  :box => "precise32", :box_url => precise32_vm_box_url },
  { :hostname => "ssh-vm",  :box => "precise32", :box_url => precise32_vm_box_url },
  { :hostname => "sql-vm",  :box => "precise32", :box_url => precise32_vm_box_url },
  { :hostname => "lb-vm",   :box => "precise64", :box_url => precise32_vm_box_url },
  { :hostname => "app-vm",  :box => "precise32", :box_url => precise32_vm_box_url },
]

Vagrant.configure("2") do |config|

  # vCloud Director provider settings
  config.vm.provider :vcloud do |vcloud|
    vcloud.hostname = "https://my.cloudprovider.com"
    vcloud.username = "MyUserName"
    vcloud.password = "MySup3rS3cr3tPassw0rd!"

    vcloud.org_name = "OrganizationName"
    vcloud.vdc_name = "vDC_Name"

    vcloud.catalog_name = "Vagrant"
    vcloud.ip_subnet = "172.16.32.125/255.255.255.240"

    vcloud.vdc_network_name = "MyNetwork"

    vcloud.vdc_edge_gateway = "MyOrgEdgeGateway"
    vcloud.vdc_edge_gateway_ip = "10.10.10.10"
  end

  nodes.each do |node|
    config.vm.define node[:hostname] do |node_config|
      node_config.vm.box = node[:box]
      node_config.vm.hostname = node[:hostname]
      node_config.vm.box_url = node[:box_url]
      node_config.vm.network :forwarded_port, guest: 80, host: 8080, auto_correct: true
      # node_config.vm.provision :puppet do |puppet|
      #   puppet.manifests_path = 'puppet/manifests'
      #   puppet.manifest_file = 'site.pp'
      #   puppet.module_path = 'puppet/modules'
      # end
    end
  end
end

Bitdeli Badge