Ruby VCloud SDK is a gem to simplify making vCloud Director API calls.
Copyright (c) VMware, Inc.
Object Model
Client
find_vdc_by_name
parameters:
name (String): name of VDC
returns: VDC object matching name
throws:
'ObjectNotFoundError' when VDC with the name does not exist
'RestClient::BadRequest' for un-expected errors
vdc_exists?
parameters:
name (String): name of VDC
returns: boolean
throws:
'RestClient::BadRequest' for un-expected errors
catalogs
returns: array of catalog objects
throws:
'RestClient::BadRequest' for un-expected errors
list_catalogs
returns: array of catalog names
throws:
'RestClient::BadRequest' for un-expected errors
find_catalog_by_name
returns:
catalog object matching name
throws:
'ObjectNotFoundError' when catalog with the name does not exist
'RestClient::BadRequest' for un-expected errors
create_catalog
returns: catalog object created
throws:
'RestClient::BadRequest' for un-expected errors
delete_catalog_by_name
parameters:
name (String): name of catalog
returns: Client object
throws:
'ObjectNotFoundError' when catalog with the name does not exist
'RestClient::BadRequest' for un-expected errors
right_records
returns: array of RightRecord objects
throws:
'RestClient::BadRequest' for un-expected errors
VDC
storage_profiles
returns: array of storage profile objects
throws:
'RestClient::BadRequest' for un-expected errors
list_storage_profiles
returns: array of storage profile names
throws:
'RestClient::BadRequest' for un-expected errors
find_storage_profile_by_name
parameters:
name (String): name of storage profile
returns:
storage profile object matching name
throws:
'ObjectNotFoundError' when storage profile with the name does not exist
'RestClient::BadRequest' for un-expected errors
storage_profile_exists?
parameters:
name (String): name of storage profile
returns: boolean
throws:
'RestClient::BadRequest' for un-expected errors
vapps
returns: array of vapp objects
throws:
'RestClient::BadRequest' for un-expected errors
list_vapps
returns: array of vapp names
throws:
'RestClient::BadRequest' for un-expected errors
find_vapp_by_name
parameters:
name (String): name of vapp
returns:
vapp object matching name
throws:
'ObjectNotFoundError' when vapp with the name does not exist
'RestClient::BadRequest' for un-expected errors
vapp_exists?
parameters:
name (String): name of vapp
returns: boolean
throws:
'RestClient::BadRequest' for un-expected errors
edge_gateways
returns: array of EdgeGateway objects
throws:
'RestClient::BadRequest' for un-expected errors
resources
returns: Resources object
throws:
'RestClient::BadRequest' for un-expected errors
networks
returns: array of network objects
throws:
'RestClient::BadRequest' for un-expected errors
list_networks
returns: array of network names
throws:
'RestClient::BadRequest' for un-expected errors
find_network_by_name
parameters:
name (String): name of network
returns:
network object matching name
throws:
'ObjectNotFoundError' when network with the name does not exist
'RestClient::BadRequest' for un-expected errors
network_exists?
parameters:
name (String): name of network
returns: boolean
throws:
'RestClient::BadRequest' for un-expected errors
disks
returns: array of disk objects
throws:
'RestClient::BadRequest' for un-expected errors
list_disks
returns: array of disk names
throws:
'RestClient::BadRequest' for un-expected errors
find_disks_by_name
parameters:
name (String): name of disk
returns:
array of disk objects matching name
throws:
'ObjectNotFoundError' when disk with the name does not exist
'RestClient::BadRequest' for un-expected errors
disk_exists?
parameters:
name (String): name of disk
returns: boolean
throws:
'RestClient::BadRequest' for un-expected errors
create_disk
parameters:
name (String): name of disk
size_mb (Integer): disk size in megabyte
vm (VCloudSdk::VM, optional): VM that to add disk locality to
bus_type (String, optional): bus type of disk, defaults to "scsi"
bus_sub_type (String, optional): bus sub type of disk, defaults to "lsilogic"
returns: Disk object created
throws:
'CloudError' when size_mb is less than or equal to 0
'CloudError' when bus_type is invalid
'CloudError' when bus_sub_type is invalid
'RestClient::BadRequest' for un-expected errors
delete_disk_by_name
parameters:
name (String): name of disk
returns: VDC object
throws:
'CloudError' when more than one disks matching the name exist
'CloudError' when disk is attached to vm
'RestClient::BadRequest' for un-expected errors
delete_all_disks_by_name
parameters:
name (String): name of disk
returns: VDC object
throws:
'CloudError' when any disk deletion failure occurs
'RestClient::BadRequest' for un-expected errors
Catalog
items
returns: array of catalog item objects
throws:
'RestClient::BadRequest' for un-expected errors
list_items
returns: array of catalog item names
throws:
'RestClient::BadRequest' for un-expected errors
find_item
parameters:
name (String): name of item
type (String, optional): type of item - "application/vnd.vmware.vcloud.vAppTemplate+xml" or "application/vnd.vmware.vcloud.media+xml"
returns: catalog item matching name and type
throws:
'ObjectNotFoundError' when an item matching the name and type is not found
'RestClient::BadRequest' for un-expected errors
item_exists?
parameters:
name (String): name of item
type (String, optional): type of item - "application/vnd.vmware.vcloud.vAppTemplate+xml" or "application/vnd.vmware.vcloud.media+xml"
returns: boolean
throws:
'RestClient::BadRequest' for un-expected errors
delete_item_by_name_and_type
parameters:
name (String): name of item
type (String, optional): type of item - "application/vnd.vmware.vcloud.vAppTemplate+xml" or "application/vnd.vmware.vcloud.media+xml"
returns: Catalog object
throws:
'ObjectNotFoundError' when an item matching the name and type is not found
'RestClient::BadRequest' for un-expected errors
delete_all_items
returns: Catalog object
throws:
'RestClient::BadRequest' for un-expected errors
upload_media
parameters:
vdc_name (String): name of vdc
media_name (String): name of media
file (String): path of media file
storage_profile_name (String, optional): name of storage profile to upload vapp template to
image_type (String, optional): type of image file
returns: catalog item uploaded
throws:
'CloudError' when media file matching name already exists
'ObjectNotFoundError' when storage profile with the name does not exist
'RestClient::BadRequest' for un-expected errors
find_media_by_name
parameters:
name (String): name of media
returns: media catalog item matching name
throws:
'ObjectNotFoundError' when an item matching the name and type is not found
'RestClient::BadRequest' for un-expected error
upload_vapp_template
parameters:
vdc_name (String): name of vdc
template_name (String): name of vapp template
directory (String): path of vapp template directory
storage_profile_name (String, optional): name of storage profile to upload vapp template to
returns: vapp template catalog item uploaded
throws:
'CloudError' when vapp template matching name already exists
'ApiTimeoutError' if uploading vapp files times out
'CloudError' when uploading vapp template task is not successful
'RestClient::BadRequest' for un-expected error
find_vapp_template_by_name
parameters:
name (String): name of vapp template
returns: vapp template catalog item matching name
throws:
'ObjectNotFoundError' when an item matching the name and type is not found
'RestClient::BadRequest' for un-expected error
instantiate_vapp_template
parameters:
template_name (String): name of vapp template
vdc_name (String): name of vdc
vapp_name (String): name of vapp
description (String, optional): description of vapp template
returns: vapp object instantiated
throws:
'ApiError' when instantiating vapp template task is not successful
'RestClient::BadRequest' for un-expected error
Network
ip_ranges
returns: IpRanges object
throws:
'RestClient::BadRequest' for un-expected errors
allocated_ips
returns: array of strings
throws:
'RestClient::BadRequest' for un-expected errors
VApp
delete
returns: nil
throws:
'CloudError' if VApp is powered on
'RestClient::BadRequest' for un-expected errors
power_on
returns: VApp object
throws:
'CloudError' if power_on_link of VApp is missing
'RestClient::BadRequest' for un-expected errors
power_off
returns: VApp object
throws:
'CloudError' if power_off_link of VApp is missing
'VappSuspendedError' if VApp is suspended
'RestClient::BadRequest' for un-expected errors
recompose_from_vapp_template
parameters:
catalog_name (String): name of catalog
template_name (String): name of vapp template
returns: recomposed vapp
throws:
'CloudError' when vapp is powered on
'ObjectNotFoundError' when catalog with the name does not exist
'ObjectNotFoundError' when vapp template with the name does not exist
'RestClient::BadRequest' for un-expected errors
vms
returns: array of vm objects
throws:
'RestClient::BadRequest' for un-expected errors
list_vms
returns: array of vm names
throws:
'RestClient::BadRequest' for un-expected errors
find_vm_by_name
returns: VM object
throws:
'ObjectNotFoundError' when VM with the name does not exist
'RestClient::BadRequest' for un-expected errors
vm_exists?
parameters:
name (String): name of vm
returns: boolean
throws:
'RestClient::BadRequest' for un-expected errors
remove_vm_by_name
parameters:
name (String): name of vm
returns: parent VApp object
throws:
'ObjectNotFoundError' when VM with the name does not exist
'CloudError' when VApp is in status of 'POWERED_ON' and can not be recomposed
'RestClient::BadRequest' for un-expected errors
list_networks
returns: array of network names
throws:
'RestClient::BadRequest' for un-expected errors
add_network_by_name
parameters:
network_name (String): name of network in vdc org to add to vapp
vapp_net_name (String, optional): what to name the network of the vapp.
Default to network_name
fence_mode (String, optional): Fencing allows identical virtual machines in different
vApps to be powered on without conflict by isolating the MAC and IP addresses of the
virtual machines. Available options are "bridged", "isolated" and "natRouted". Default
to "bridged".
returns: VApp object
throws:
'CloudError' when invalid fence mode is specified
'ObjectNotFoundError' when network with the name does not exist
'RestClient::BadRequest' for un-expected errors
delete_network_by_name
parameters:
name (String): name of network to delete
returns: VApp object
throws:
'ObjectNotFoundError' when network with the name does not exist
'RestClient::BadRequest' for un-expected errors
VM
vcpu:
returns: number of virtual cpus of VM
throws:
'CloudError' when information of number of virtual cpus of VM is unavailable
'RestClient::BadRequest' for un-expected errors
vcpu=
parameters:
The virtual cpu count.
returns: VM object
throws:
'CloudError' when the cpu count is less than or equal to 0
'RestClient::BadRequest' for un-expected errors
memory
returns: integer number, the size of memory in megabyte
throws:
'ApiError' when AllocationUnits of memory is in unexpected form
'CloudError' when size of memory is zero
'RestClient::BadRequest' for un-expected errors
memory=
parameters:
The size of memory in megabyte.
returns: VM object
throws:
'CloudError' when the memory size is less than or equal to 0
'RestClient::BadRequest' for un-expected errors
nics
returns: array of NIC objects
throws:
'RestClient::BadRequest' for un-expected errors
independent_disks
returns: array of disk objects
throws:
'RestClient::BadRequest' for un-expected errors
list_disks
returns: names of disks on vm (in parentheses it shows the name of independent disk)
throws:
'RestClient::BadRequest' for un-expected errors
attach_disk
parameters:
disk: The disk object.
returns: VM object
throws:
'CloudError' if disk is already attached
'RestClient::BadRequest' for un-expected errors
detach_disk
parameters:
disk: The disk object.
returns: VM object
throws:
'VmSuspendedError' if containing vApp is suspended
'CloudError' if disk is not attached or attached to other VM
'RestClient::BadRequest' for un-expected errors
power_on
returns: VM object
throws:
'CloudError' if power_on_link of VM is missing
'RestClient::BadRequest' for un-expected errors
power_off
returns: VM object
throws:
'CloudError' if power_off_link of VM is missing
'VmSuspendedError' if VM is suspended
'RestClient::BadRequest' for un-expected errors
insert_media
parameters:
catalog_name (String): name of catalog
media_file_name (String): name of media file
returns: VM object
throws:
'ObjectNotFoundError' if when catalog with the name does not exist
'ObjectNotFoundError' if when media with the name does not exist
'RestClient::BadRequest' for un-expected errors
eject_media
parameters:
catalog_name (String): name of catalog
media_file_name (String): name of media file
returns: VM object
throws:
'ObjectNotFoundError' if when catalog with the name does not exist
'ObjectNotFoundError' if when media with the name does not exist
'RestClient::BadRequest' for un-expected errors
add_nic
parameters:
network_name (String): name of network to add NIC
ip_addressing_mode (String, optional): available options are "NONE", "MANUAL",
"POOL" and "DHCP". Default to "POOL"
ip (String, optional): IP address for "MANUAL" IP Mode
return: VM object
throws:
'CloudError' if when ip_addressing_mode is invalid
'CloudError' if ip is not specified in "MANUAL" ip_addressing_mode
'CloudError' if vm is powered on
'ObjectNotFoundError' if network is not added to VM's parent VApp
'RestClient::BadRequest' for un-expected errors
delete_nics
parameters:
nics (splat NIC objects): NICs to delete
return: VM object
throws:
'CloudError' if vm is powered on
'ObjectNotFoundError' if specified nic index does not exist
'RestClient::BadRequest' for un-expected errors
product_section_properties
returns:
array of hash values representing properties of product section of VM
empty array if VM does not have product section
throws:
'RestClient::BadRequest' for un-expected errors
product_section_properties=
parameters:
properties (array of hash values): properties of product section of VM
returns: VM object
throws:
'RestClient::BadRequest' for un-expected errors
note:
Rebooting VM is needed to reflect product section changes
internal_disks
returns: array of internal disk objects
throws:
'RestClient::BadRequest' for un-expected errors
create_internal_disk
parameters:
capcity (Integer): disk size in megabyte
bus_type (String, optional): bus type of disk, defaults to "scsi"
bus_sub_type (String, optional): bus sub type of disk, defaults to "lsilogic"
returns: VM object
throws:
'CloudError' when capcity is less than or equal to 0
'CloudError' when bus_type is invalid
'CloudError' when bus_sub_type is invalid
'RestClient::BadRequest' for un-expected errors
delete_internal_disk_by_name
parameters:
name (String): name of disk
returns: VM object
throws:
'ObjectNotFoundError' if no disk matching the given name
'RestClient::BadRequest' for un-expected errors
VdcStorageProfile
available_storage
returns:
integer number of available storage in MB, i.e. storageLimitMB - storageUsedMB
-1 if 'storageLimitMB' is 0
EdgeGateway
public_ips:
returns: IpRanges object
throws:
'RestClient::BadRequest' for un-expected errors
Example
VCloud_SDK is straightforward to use. Here is an example of creating vApp from vApp template.
1. Create vCloud client object
client = VCloudSdk::Client.new(url, username, password)
Note that the parameter 'username' should be the VDC user_name@organization_name. For example,
the VDC user name is admin, the organization name is myorg, then the 'username' parameter
here should be admin@myorg.
2. Find the catalog where the vapp template is stored
catalog = client.find_catalog_by_name(catalog_name)
3. Create vApp from that vapp template
vapp = instantiate_vapp_template(vapp_template_name, vdc_name, vapp_name)