VMware vCloud Director 5.1 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 vapp_templates -> vms -> vm networks -> network catalogs -> catalog -> catalog_items -> catalog_item -> instantiate_vapp -> vapp_template -> vms -> vm medias -> media
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 Loading¶ ↑
When listing a collection (eg: 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.
Initialization¶ ↑
vcloud = Fog::Compute::VcloudDirector.new( :vcloud_director_username => "<username>@<org_name>", :vcloud_director_password => "<password>", :vcloud_director_host => 'api.example.com', :vcloud_director_show_progress => false, # task progress bar on/off )
Organizations¶ ↑
List Organizations¶ ↑
Note that when listing, by default only the attributes id
, name
, type
, and href
are loaded. To disable lazy loading, and load all attributes, just specify false
. Another option is to reload a specific item: vcloud.organizations.first.reload
vcloud.organizations
<Fog::Compute::VcloudDirector::Organizations [ <Fog::Compute::VcloudDirector::Organization id="c6a4c623-c158-41cf-a87a-dbc1637ad55a", name="DevOps", type="application/vnd.vmware.vcloud.org+xml", href="https://example.com/api/org/c6a4c623-c158-41cf-a87a-dbc1637ad55a", description=NonLoaded > ] >
Retrieve an Organization by Id¶ ↑
org = vcloud.organizations.get("c6a4c623-c158-41cf-a87a-dbc1637ad55a")
Retrieve an Organization by Name¶ ↑
org = vcloud.organizations.get_by_name("DevOps")
vDCs¶ ↑
It shows the Organization's vDCs.
List vDCs¶ ↑
org = vcloud.organizations.first org.vdcs
<Fog::Compute::VcloudDirector::Vdcs organization= <Fog::Compute::VcloudDirector::Organization id="c6a4c623-c158-41cf-a87a-dbc1637ad55a", name="DevOps", type="application/vnd.vmware.vcloud.org+xml", href="https://example.com/api/org/c6a4c623-c158-41cf-a87a-dbc1637ad55a", description=NonLoaded >
Retrieve a vDC¶ ↑
org = vcloud.organizations.first org.vdcs.get_by_name("DevOps - VDC")
<Fog::Compute::VcloudDirector::Vdc id="9a06a16b-12c6-44dc-aee1-06aa52262ea3", name="DevOps - VDC", type="application/vnd.vmware.vcloud.vdc+xml", href="https://example.com/api/vdc/9a06a16b-12c6-44dc-aee1-06aa52262ea3", description="", available_networks={:type=>"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 vApps¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps
<Fog::Compute::VcloudDirector::Vapps vdc= <Fog::Compute::VcloudDirector::Vdc id="9a06a16b-12c6-44dc-aee1-06aa52262ea3", name="DevOps - VDC", type="application/vnd.vmware.vcloud.vdc+xml", href="https://example.com/api/vdc/9a06a16b-12c6-44dc-aee1-06aa52262ea3", description=NonLoaded, available_networks=NonLoaded, compute_capacity_cpu=NonLoaded, compute_capacity_memory=NonLoaded, storage_capacity=NonLoaded, allocation_model=NonLoaded, capabilities=NonLoaded, nic_quota=NonLoaded, network_quota=NonLoaded, vm_quota=NonLoaded, is_enabled=NonLoaded >
Retrieve a vApp¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vdc.vapps.get_by_name("segundo")
<Fog::Compute::VcloudDirector::Vapp id="vapp-11c7102f-443d-40fd-b1da-cca981fb44b6", name="segundo", type="application/vnd.vmware.vcloud.vApp+xml", href="https://example.com/api/vApp/vapp-11c7102f-443d-40fd-b1da-cca981fb44b6", description="", deployed=false, status="8", deployment_lease_in_seconds=NonLoaded, storage_lease_in_seconds="7776000", startup_section={:ovf_stopDelay=>"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 VMs¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vapp.vms
<Fog::Compute::VcloudDirector::Vms vapp= <Fog::Compute::VcloudDirector::Vapp id="vapp-11c7102f-443d-40fd-b1da-cca981fb44b6", name="segundo", type="application/vnd.vmware.vcloud.vApp+xml", href="https://example.com/api/vApp/vapp-11c7102f-443d-40fd-b1da-cca981fb44b6", description="", deployed=false, status="8", deployment_lease_in_seconds=NonLoaded, storage_lease_in_seconds="7776000", startup_section={:ovf_stopDelay=>"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 >
Retrieve a VM¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vapp.vms.get_by_name("DEVWEB")
<Fog::Compute::VcloudDirector::Vm id="vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192", vapp_id="vapp-11c7102f-443d-40fd-b1da-cca981fb44b6", name="DEVWEB", type="application/vnd.vmware.vcloud.vm+xml", href="https://example.com/api/vApp/vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192", status="off", operating_system="Microsoft Windows Server 2008 R2 (64-bit)", ip_address="10.192.0.144", cpu=3, memory=3584, hard_disks=[{"Hard disk 1"=>163840}] >
Modify CPU¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.cpu = 4
4
Modify Memory¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.memory = 4096
4096
Power On a VM¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.power_on
true
VM Customization¶ ↑
Retrieve VM Customization¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.customization
<Fog::Compute::VcloudDirector::VmCustomization id="vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192", type="application/vnd.vmware.vcloud.guestCustomizationSection+xml", href="https://example.com/api/vApp/vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192/guestCustomizationSection/", enabled=false, change_sid=false, join_domain_enabled=false, use_org_settings=false, admin_password_auto=false, admin_password='', admin_password_enabled=false, reset_password_required=false, virtual_machine_id="2ddeea36-ac71-470f-abc5-c6e3c2aca192", computer_name="DEVWEB-001", has_customization_script=true >
Modify VM Customization¶ ↑
Customization attributes model requires to save
it after setting the attributes.
org = vcloud.organizations.first vdc = org.vdcs.first vapp = 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
true
VM Network¶ ↑
Show VM Networks¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.network
<Fog::Compute::VcloudDirector::VmNetwork id="vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192", type="application/vnd.vmware.vcloud.networkConnectionSection+xml", href="https://example.com/api/vApp/vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192/networkConnectionSection/", info="Specifies the available VM network connections", primary_network_connection_index=0, network="DevOps - Dev Network Connection", needs_customization=true, network_connection_index=0, is_connected=true, mac_address="00:50:56:01:00:ea", ip_address_allocation_mode="POOL" >
Modify one or more attributes¶ ↑
Network attributes model requires to save
it after setting the attributes.
org = vcloud.organizations.first vdc = org.vdcs.first vapp = 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
true
VM Disk¶ ↑
List VM Disks¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.disks
<Fog::Compute::VcloudDirector::Disks vm= <Fog::Compute::VcloudDirector::Vm id="vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192", vapp_id="vapp-11c7102f-443d-40fd-b1da-cca981fb44b6", name="DEVWEB", type="application/vnd.vmware.vcloud.vm+xml", href="https://example.com/api/vApp/vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192", status="off", operating_system="Microsoft Windows Server 2008 R2 (64-bit)", ip_address="10.192.0.144", cpu=4, memory=4096, hard_disks=[{"Hard disk 1"=>163840}] >
Create a New Disk¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.disks.create(1024)
true
The new disk should show up.
>> vm.disks <
Modify the Hard Disk Size¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") disk = vm.disks.get_by_name("Hard disk 2") disk.capacity = 2048
true
Destroy a Hard Disk¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") disk = vm.disks.get_by_name("Hard disk 2") disk.destroy
true
VM Tags¶ ↑
List VM Tags¶ ↑
org = vcloud.organizations.first vdc = org.vdcs.first vapp = vdc.vapps.get_by_name("segundo") vm = vapp.vms.get_by_name("DEVWEB") vm.tags
<Fog::Compute::VcloudDirector::Tags vm= <Fog::Compute::VcloudDirector::Vm id="vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192", vapp_id="vapp-11c7102f-443d-40fd-b1da-cca981fb44b6", name="DEVWEB", type="application/vnd.vmware.vcloud.vm+xml", href="https://example.com/api/vApp/vm-2ddeea36-ac71-470f-abc5-c6e3c2aca192", status="off", operating_system="Microsoft Windows Server 2008 R2 (64-bit)", ip_address="10.192.0.144", cpu=4, memory=4096, hard_disks=[{"Hard disk 1"=>163840}] >
Create a Tag¶ ↑
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')
true
Retrieve a Tag¶ ↑
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')
<Fog::Compute::VcloudDirector::Tag id="this_is_a_key", value="this_is_a_value" >
Modify a Tag¶ ↑
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'
"new_value"
Destroy a Tag¶ ↑
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
true
Networks¶ ↑
It shows the Organization's Networks.
List Networks¶ ↑
org = vcloud.organizations.first org.networks
<Fog::Compute::VcloudDirector::Networks organization= <Fog::Compute::VcloudDirector::Organization id="c6a4c623-c158-41cf-a87a-dbc1637ad55a", name="DevOps", type="application/vnd.vmware.vcloud.org+xml", href="https://example.com/api/org/c6a4c623-c158-41cf-a87a-dbc1637ad55a", description=NonLoaded >
Retrieve a Network¶ ↑
org = vcloud.organizations.first org.networks.get_by_name("DevOps - Dev Network Connection")
<Fog::Compute::VcloudDirector::Network id="d5f47bbf-de27-4cf5-aaaa-56772f2ccd17", name="DevOps - Dev Network Connection", type="application/vnd.vmware.vcloud.orgNetwork+xml", href="https://example.com/api/network/d5f47bbf-de27-4cf5-aaaa-56772f2ccd17", description=nil, is_inherited=true, gateway="10.192.0.1", netmask="255.255.252.0", dns1="10.192.0.11", dns2="10.192.0.12", dns_suffix="dev.ad.mdsol.com", ip_ranges=[{:start_address=>"10.192.0.100", :end_address=>"10.192.3.254"}] >
Catalogs¶ ↑
It shows the Organization's Catalogs.
List Catalogs¶ ↑
org = vcloud.organizations.first org.catalogs
<Fog::Compute::VcloudDirector::Catalogs organization= <Fog::Compute::VcloudDirector::Organization id="c6a4c623-c158-41cf-a87a-dbc1637ad55a", name="DevOps", type="application/vnd.vmware.vcloud.org+xml", href="https://example.com/api/org/c6a4c623-c158-41cf-a87a-dbc1637ad55a", description=NonLoaded >
Retrieve a Catalog¶ ↑
org = vcloud.organizations.first org.catalogs.get("4ee720e5-173a-41ac-824b-6f4908bac975") # or get_by_name("Public VM Templates")
<Fog::Compute::VcloudDirector::Catalog id="4ee720e5-173a-41ac-824b-6f4908bac975", name="Public VM Templates", type="application/vnd.vmware.vcloud.catalog+xml", href="https://example.com/api/catalog/4ee720e5-173a-41ac-824b-6f4908bac975", description="", is_published=true >
Catalog Items¶ ↑
List Catalog Items¶ ↑
org = vcloud.organizations.first catalog = org.catalogs.first catalog.catalog_items
<Fog::Compute::VcloudDirector::CatalogItems catalog= <Fog::Compute::VcloudDirector::Catalog id="4ee720e5-173a-41ac-824b-6f4908bac975", name="Public VM Templates", type="application/vnd.vmware.vcloud.catalog+xml", href="https://example.com/api/catalog/4ee720e5-173a-41ac-824b-6f4908bac975", description=NonLoaded, is_published=NonLoaded >
Retrieve a Catalog Item¶ ↑
org = vcloud.organizations.first catalog = org.catalogs.first catalog.catalog_items.get_by_name('DEVAPP')
<Fog::Compute::VcloudDirector::CatalogItem id="54cf5deb-326f-4770-a91a-39048689b6ea", name="DEVAPP", type="application/vnd.vmware.vcloud.catalogItem+xml", href="https://example.com/api/catalogItem/54cf5deb-326f-4770-a91a-39048689b6ea", description="Windows Server 2008 R2 Application Server", vapp_template_id="vappTemplate-b5902d57-7906-49c8-8af5-bbebe0a60a97" >
Instantiate a vApp Template¶ ↑
It creates a Vapp from a CatalogItem.
org = vcloud.organizations.first catalog = org.catalogs.first template = catalog.catalog_items.get_by_name('DEVAPP') template.instantiate('webserver')
It there were more than one vDC or/and network you'd have to specify it as a second param:
template.instantiate('webserver', { vdc_id: "9a06a16b-12c6-44dc-aee1-06aa52262ea3", network_id: "d5f47bbf-de27-4cf5-aaaa-56772f2ccd17" }