README.md
[Vagrant](http://www.vagrantup.com) provider for VMware vCloud Director® [![Gem Version](https://badge.fury.io/rb/vagrant-vcloud.svg)](http://badge.fury.io/rb/vagrant-vcloud) [![Code Climate](https://codeclimate.com/github/frapposelli/vagrant-vcloud/badges/gpa.svg)](https://codeclimate.com/github/frapposelli/vagrant-vcloud) [![Dependency Status](https://gemnasium.com/frapposelli/vagrant-vcloud.svg)](https://gemnasium.com/frapposelli/vagrant-vcloud)
========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
Please note that this software is still Alpha/Beta quality and is not recommended for production usage.
We have a wide array of boxes available at [Vagrant Cloud](https://vagrantcloud.com/gosddc) you can use them directly or you can roll your own as you please, make sure to install VMware tools in it.
Starting from [version 0.4.2](../../releases/tag/v0.4.2), this plugin supports the universal [`vmware_ovf` box format](https://github.com/gosddc/packer-post-processor-vagrant-vmware-ovf/wiki/vmware_ovf-Box-Format), that is 100% portable between [vagrant-vcloud](https://github.com/frapposelli/vagrant-vcloud), [vagrant-vcenter](https://github.com/gosddc/vagrant-vcenter) and [vagrant-vcloudair](https://github.com/gosddc/vagrant-vcloudair), no more double boxes!.
If you're unsure about what are the correct network settings for your Vagrantfile make sure to check out the [Network Deployment Options](https://github.com/frapposelli/vagrant-vcloud/wiki/Network-Deployment-Options) wiki page.
Check the full releases changelog [here](../../releases)
Install
-------
Latest version can be installed by running the following command:
`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.
Upgrade
-------
If you already have vagrant-vcloud installed you can update to the latest version available by issuing:
`vagrant plugin update vagrant-vcloud`
Vagrant will take care of the upgrade process.
Configuration
-------------
Here's a sample Multi-VM Vagrantfile, please note that `vcloud.vdc_edge_gateway` and `vcloud.vdc_edge_gateway_ip` are required when you cannot access `vcloud.vdc_network_name` directly and there's an Organization Edge between your workstation and the vCloud Network.
```ruby
vapp = {
name: 'My vApp name',
org_name: 'OrganizationName',
orgvdc_name: 'vDC_Name',
orgvdccatalog_name: 'Vagrant',
metadata: [ [ 'key', 'value' ] ],
advanced_networking: true,
networks: {
org: [ 'Org_VDC_Network' ],
vapp: [
{
name: 'MyNetwork',
ip_subnet: '10.10.10.10/255.255.255.0'
}
]
},
ovf_properties: {
'test-variable' => 'true'
}
}
nodes = [
{
hostname: 'web-vm',
box: 'gosddc/precise32',
memory: 512,
cpus: 1,
nested_hypervisor: false,
add_hdds: [ 1024 ],
power_on: true,
ssh_enable: true,
sync_enable: true,
metadata: [ [ 'key', 'value' ] ],
nics: [
type: :vmxnet3,
connected: true,
network: "vApp netowrk",
primary: true,
ip_mode: "static",
ip: "10.10.10.1",
mac: "00:50:56:00:00:01"
],
enable_guest_customization: true,
guest_customization_script: 'touch /sample.file'
},
{ hostname: 'ssh-vm', box: 'gosddc/precise32' },
{ hostname: 'sql-vm', box: 'gosddc/precise32' },
{ hostname: 'app-vm', box: 'gosddc/precise32' }
]
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.vapp_prefix = 'multibox-sample'
vcloud.org_name = vapp[:org_name]
vcloud.vdc_name = vapp[:orgvdc_name]
vcloud.catalog_name = vapp[:orgvdccatalog_name]
vcloud.vapp_name = vapp[:name]
vcloud.metadata_vapp = vapp[:metadata]
vcloud.auto_yes_for_upload = vapp[:auto_yes_for_upload]
vcloud.advanced_network = vapp[:advanced_networking]
if vapp[:advanced_networking]
vcloud.networks = vapp[:networks]
else
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
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]
if vapp[:advanced_networking]
node_config.vm.provider :vcloud do |pro|
pro.memory = node[:memory]
pro.cpus = node[:cpus]
pro.add_hdds = node[:add_hdds]
pro.nics = node[:nics]
pro.ssh_enabled = node[:ssh_enabled]
pro.sync_enabled = node[:sync_enabled]
pro.power_on = node[:power_on]
pro.metadata_vm = node[:metadata]
pro.nested_hypervisor = node[:nested_hypervisor]
pro.enable_guest_customization = node[:enable_guest_customization]
pro.guest_customization_script = node[:guest_customization_script]
if vapp[:ovf_properties]
pro.ovf_properties = vapp[:ovf_properties]
end
end
node_config.vm.network :public_network
else
node_config.vm.network :forwarded_port,
guest: 80,
host: 8080,
auto_correct: true
end
# 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
```
For additional documentation on network setups with vCloud Director, check the [Network Deployment Options](../../wiki/Network-Deployment-Options) Wiki page
Contribute
----------
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!.