# VMware vCloud director 1.5 API client ### Introduction Collection and Model representation in vcloud_director fog provider ``` Organizations Organization vdcs -> vdc -> vapps -> vapp -> vms -> vm -> customizations -> script -> network -> disks -> disk -> tags -> tag -> power_on networks -> network catalogs -> catalog -> catalog_items -> catalog_item -> instantiate_vapp ``` #### Actions Every collection supports the following methods: method name | lazy load --- | --- get(id) | false get_by_name(name) | false all | true all(false) | false #### Lazy load
When listing a collection (ie: ```vdc.vapps```), lazy load will be used by default to improve the performance, otherwise it will make as many requests as items are in the collection. You can disable lazy load using the explict caller and passing a *false* option ```vdc.vapps.all(false)``` Attributes showing the value **NonLoaded** will be populated when accessing the value, if there are more than one **NonLoaded** values the first time accessing on any of those values will populate the others. You can explicitly load those attributes with the ```reload``` method: ``` org = vcloud.organizations.first org.reload ``` Lazy load isn't used with ```get``` and ```get_by_name``` methods are used ### Initialize ```ruby vcloud = Fog::Compute::VcloudDirector.new(vcloud_director_username: "@org_name_", vcloud_director_password: "", vcloud_director_host: 'example.com', :connection_options => {:ssl_verify_peer => false, :connect_timeout => 200, :read_timeout => 200 } ) ``` ### Organizations
- List organizations Note that when listing, by default all the attrs but **id, name, type** and **href** are not loaded. To disable lazy_loading, just specify false: , another option is to reload a specific item: ```vcloud.organizations.first.reload``` ```ruby vcloud.organizations ``` ``` ] > ``` - Get a specific organization by id ```ruby org = vcloud.organizations.get("c6a4c623-c158-41cf-a87a-dbc1637ad55a") ``` - Get a specific organization by name ```ruby org = vcloud.organizations.get_by_name("DevOps") ``` ### vDCs
it shows the Organization's vDCs - List vDCs ```ruby org = vcloud.organizations.first org.vdcs ``` ```ruby [ ] > ``` - Get a vDC ```ruby org = vcloud.organizations.first org.vdcs.get_by_name("DevOps - VDC") ``` ```ruby "application/vnd.vmware.vcloud.network+xml", :name=>"DevOps - Dev Network Connection", :href=>"https://example.com/api/network/d5f47bbf-de27-4cf5-aaaa-56772f2ccd17"}, compute_capacity_cpu=NonLoaded, compute_capacity_memory={:Units=>"MB", :Allocated=>"0", :Limit=>"0", :Used=>"3584", :Overhead=>"65"}, storage_capacity={:Units=>"MB", :Allocated=>"1048320", :Limit=>"1048320", :Used=>"903168", :Overhead=>"0"}, allocation_model="AllocationVApp", capabilities={:SupportedHardwareVersion=>"vmx-09"}, nic_quota=0, network_quota=1024, vm_quota=0, is_enabled=true > ``` #### Vapps - List ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps ``` ```ruby [ , ] > ``` - Get ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo") ``` ```ruby "0", :ovf_stopAction=>"powerOff", :ovf_startDelay=>"0", :ovf_startAction=>"powerOn", :ovf_order=>"0", :ovf_id=>"DEVWEB"}, network_section={:ovf_name=>"DevOps - Dev Network Connection", :"ovf:Description"=>""}, network_config={:networkName=>"DevOps - Dev Network Connection", :Link=>{:rel=>"repair", :href=>"https://example.com/api/admin/network/82a07044-4dda-4a3e-a53d-8981cf0d5baa/action/reset"}, :Description=>"", :Configuration=>{:IpScope=>{:IsInherited=>"true", :Gateway=>"10.192.0.1", :Netmask=>"255.255.252.0", :Dns1=>"10.192.0.11", :Dns2=>"10.192.0.12", :DnsSuffix=>"dev.ad.mdsol.com", :IpRanges=>{:IpRange=>{:StartAddress=>"10.192.0.100", :EndAddress=>"10.192.3.254"}}}, :ParentNetwork=>{:name=>"DevOps - Dev Network Connection", :id=>"d5f47bbf-de27-4cf5-aaaa-56772f2ccd17", :href=>"https://example.com/api/admin/network/d5f47bbf-de27-4cf5-aaaa-56772f2ccd17"}, :FenceMode=>"bridged", :RetainNetInfoAcrossDeployments=>"false"}, :IsDeployed=>"false"}, owner={:type=>"application/vnd.vmware.admin.user+xml", :name=>"restebanez", :href=>"https://example.com/api/admin/user/c3ca7b97-ddea-425f-8bdb-1fdb946f7349"}, InMaintenanceMode=false > ``` #### VMs - List ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vapp.vms ``` ```ruby "0", :ovf_stopAction=>"powerOff", :ovf_startDelay=>"0", :ovf_startAction=>"powerOn", :ovf_order=>"0", :ovf_id=>"DEVWEB"}, network_section={:ovf_name=>"DevOps - Dev Network Connection", :"ovf:Description"=>""}, network_config={:networkName=>"DevOps - Dev Network Connection", :Link=>{:rel=>"repair", :href=>"https://example.com/api/admin/network/82a07044-4dda-4a3e-a53d-8981cf0d5baa/action/reset"}, :Description=>"", :Configuration=>{:IpScope=>{:IsInherited=>"true", :Gateway=>"10.192.0.1", :Netmask=>"255.255.252.0", :Dns1=>"10.192.0.11", :Dns2=>"10.192.0.12", :DnsSuffix=>"dev.ad.mdsol.com", :IpRanges=>{:IpRange=>{:StartAddress=>"10.192.0.100", :EndAddress=>"10.192.3.254"}}}, :ParentNetwork=>{:name=>"DevOps - Dev Network Connection", :id=>"d5f47bbf-de27-4cf5-aaaa-56772f2ccd17", :href=>"https://example.com/api/admin/network/d5f47bbf-de27-4cf5-aaaa-56772f2ccd17"}, :FenceMode=>"bridged", :RetainNetInfoAcrossDeployments=>"false"}, :IsDeployed=>"false"}, owner={:type=>"application/vnd.vmware.admin.user+xml", :name=>"restebanez", :href=>"https://example.com/api/admin/user/c3ca7b97-ddea-425f-8bdb-1fdb946f7349"}, InMaintenanceMode=false > [ 163840}] > ] > ``` - Get ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vapp.vms.get_by_name("DEVWEB") ``` ```ruby 163840}] > ``` - Modfy CPU ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.cpu = 4 ``` ```ruby ... success 4 ``` - Modify Memory ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.cpu = 4 ``` ```ruby ... success 4096 ``` - power_on ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.power_on ``` ```ruby ..... success true ``` #### VM Customization - Show ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.customization ``` ```ruby ``` - modify one or more attrs Customization attribute's model requires to `save` it after setting the attributes ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") customization = vm.customization customization.compute_name = "NEWNAME" customization.enabled = false customization.script = "new userdata script" customization.save ``` ```ruby .. success true ``` #### VM Network - Show ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.network ``` ```ruby ``` - modify one or more attrs Network attribute's model requires to `save` it after setting the attributes ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") network = vm.network network.is_connected = false network.ip_address_allocation_mode = "DHCP" network.save ``` ```ruby .. success true ``` #### VM Disk - List ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.disks ``` ```ruby 163840}] > [ , , ] > ``` - Create a new disk ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") disks = vm.disks disks.create(1024) ``` ```ruby ... success true ``` The new disk should show up ```ruby >> vm.disks 163840}] > [ , , , ] > ``` - Modify the hard disk size ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") disks = vm.disks disks.get_by_name("Hard disk 2").capacity = 2048 ``` ```ruby ... success true ``` - Delete a hard disk ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") disks = vm.disks disks.get_by_name("Hard disk 2").destroy ``` ```ruby ... success true ``` #### VM Tags - List ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.tags ``` ```ruby 163840}] > [ , , , ] > ``` - Create a tag ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.tags.create('this_is_a_key', 'this_is_a_value') ``` ```ruby success true ``` - Get a tag ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.tags.get_by_name('this_is_a_key') ``` ```ruby ``` - Edit a tag ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.tags.get_by_name('this_is_a_key').value = 'new_value' ``` ```ruby success "new_value" ``` - Delete a tag ```ruby org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.tags.get_by_name('this_is_a_key').destroy ``` ```ruby success true ``` ### Networks
it shows the Organization's Networks - List ```ruby org = vcloud.organizations.first org.networks ``` ```ruby [ ] > ``` - Get ```ruby org = vcloud.organizations.first org.networks.get_by_name("DevOps - Dev Network Connection") ``` ```ruby "10.192.0.100", :end_address=>"10.192.3.254"}] > ``` ### Catalogs
it shows the Organization's Catalogs - List ```ruby org = vcloud.organizations.first ``` ```ruby [ , ] > ``` - Get ```ruby org = vcloud.organizations.first org.catalogs.get("4ee720e5-173a-41ac-824b-6f4908bac975") # or get_by_name("Public VM Templates") ``` ```ruby ``` #### Catalog Items - List ```ruby org = vcloud.organizations.first catalog = org.catalogs.first catalog.catalog_items ``` ```ruby [ , , ] > ``` - Get ```ruby org = vcloud.organizations.first catalog = org.catalogs.first catalog.catalog_items.get_by_name('DEVAPP') ``` ```ruby ``` - Instantiate it creates a Vapp from a CatalogItem. ```ruby org = vcloud.organizations.first catalog = org.catalogs.first devapp = catalog.catalog_items.get_by_name('DEVAPP') devapp.instantiate('webserver') ``` ```ruby 1% 5% 40% 80% 100% ``` It there were more than one vDC or/and network you'd have to specify it as a second param, ```devapp.instantiate('webserver', {vdc_id: "9a06a16b-12c6-44dc-aee1-06aa52262ea3", network_id: "d5f47bbf-de27-4cf5-aaaa-56772f2ccd17"}```