e46bf8032e
`URI.escape` is used here to URL-encode the URL sent to the vCloud Director API in the `get_execute_query` method: https://github.com/fog/fog/blob/v1.29.0/lib/fog/vcloud_director/requests/compute/get_execute_query.rb#L96 `URI.escape` does not URL-encode `+` characters, meaning that vCloud Director (we're using version 5.5 update 2) interprets the `+` as a space. This causes the following query to fail: type=task&sortDesc=startDate&filter=name==networkConfigureEdgeGatewayServices;objectName==mygateway;startDate=ge=2015-04-09T11:13:54.373+01:00 ...because vCloud Director interprets the date stamp as: 2015-04-09T11:13:54.373 01:00 Note the missing `+` between the time and the timezone. `URI.escape` is [deprecated][] as of Ruby 1.9.2, so we looked at using `CGI.escape` instead, which seems to be aimed at encoding query parameter values rather than a whole URL as `URI.escape` was. See this discussion on the `ruby-core` mailing list: http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-core/29293?29179-31097 We then encountered a further problem in that by URL-encoding the parameter value, the double equals (`==`) used to separate sub-parameter keys from their values, i.e. `name==networkConfigureEdgeGatewayServices`, was also being URL-encoded, which the vCloud Director API rejects. Looking at the RFCs for URLs, it seems this behaviour (using an `=` inside a parameter value) is valid: http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding#Thereservedcharactersaredifferentforeachpart https://tools.ietf.org/html/rfc3986#section-2.4 ...so the proper solution is to URL-encode each sub-parameter value individually. This will require us to modify the API for the `get_execute_query` method. We have not been able to find a way around by using `URI.escape` or `CGI.escape` that fixes this issue other than running a replacement of specific characters. |
||
---|---|---|
.. | ||
generators/compute | ||
models/compute | ||
parsers/compute | ||
requests/compute | ||
compute.rb | ||
core.rb | ||
query.rb | ||
README.md |
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
networks -> network
catalogs -> catalog -> catalog_items -> catalog_item -> instantiate_vapp
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
>
[
<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 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
>
[
<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=NonLoaded,
deployed=NonLoaded,
status=NonLoaded,
deployment_lease_in_seconds=NonLoaded,
storage_lease_in_seconds=NonLoaded,
startup_section=NonLoaded,
network_section=NonLoaded,
network_config=NonLoaded,
owner=NonLoaded,
InMaintenanceMode=NonLoaded
>,
<Fog::Compute::VcloudDirector::Vapp
id="vapp-6ac43e0e-13e2-4642-a58a-6dc3a12f585b",
name="vApp_restebanez_9",
type="application/vnd.vmware.vcloud.vApp+xml",
href="https://example.com/api/vApp/vapp-6ac43e0e-13e2-4642-a58a-6dc3a12f585b",
description=NonLoaded,
deployed=NonLoaded,
status=NonLoaded,
deployment_lease_in_seconds=NonLoaded,
storage_lease_in_seconds=NonLoaded,
startup_section=NonLoaded,
network_section=NonLoaded,
network_config=NonLoaded,
owner=NonLoaded,
InMaintenanceMode=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
>
[
<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}]
>
]
>
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}]
>
[
<Fog::Compute::VcloudDirector::Disk
id=2,
address=0,
description="SCSI Controller",
name="SCSI Controller 0",
resource_sub_type="lsilogicsas",
resource_type=6,
address_on_parent=nil,
parent=nil,
capacity=nil,
bus_sub_type=nil,
bus_type=nil
>,
<Fog::Compute::VcloudDirector::Disk
id=2000,
address=nil,
description="Hard disk",
name="Hard disk 1",
resource_sub_type=nil,
resource_type=17,
address_on_parent=0,
parent=2,
capacity=163840,
bus_sub_type="lsilogicsas",
bus_type=6
>,
<Fog::Compute::VcloudDirector::Disk
id=3,
address=0,
description="IDE Controller",
name="IDE Controller 0",
resource_sub_type=nil,
resource_type=5,
address_on_parent=nil,
parent=nil,
capacity=nil,
bus_sub_type=nil,
bus_type=nil
>
]
>
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
<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}]
>
[
<Fog::Compute::VcloudDirector::Disk
id=2,
address=0,
description="SCSI Controller",
name="SCSI Controller 0",
resource_sub_type="lsilogicsas",
resource_type=6,
address_on_parent=nil,
parent=nil,
capacity=nil,
bus_sub_type=nil,
bus_type=nil
>,
<Fog::Compute::VcloudDirector::Disk
id=2000,
address=nil,
description="Hard disk",
name="Hard disk 1",
resource_sub_type=nil,
resource_type=17,
address_on_parent=0,
parent=2,
capacity=163840,
bus_sub_type="lsilogicsas",
bus_type=6
>,
<Fog::Compute::VcloudDirector::Disk
id=2001,
address=nil,
description="Hard disk",
name="Hard disk 2",
resource_sub_type=nil,
resource_type=17,
address_on_parent=1,
parent=2,
capacity=1024,
bus_sub_type="lsilogicsas",
bus_type=6
>,
<Fog::Compute::VcloudDirector::Disk
id=3,
address=0,
description="IDE Controller",
name="IDE Controller 0",
resource_sub_type=nil,
resource_type=5,
address_on_parent=nil,
parent=nil,
capacity=nil,
bus_sub_type=nil,
bus_type=nil
>
]
>
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}]
>
[
<Fog::Compute::VcloudDirector::Tag
id="environment",
value="devlab"
>,
<Fog::Compute::VcloudDirector::Tag
id="product",
value="devlabtest"
>,
<Fog::Compute::VcloudDirector::Tag
id="hello",
value="ddd"
>,
<Fog::Compute::VcloudDirector::Tag
id="uno",
value="jander"
>
]
>
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
>
[
<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=NonLoaded,
is_inherited=NonLoaded,
gateway=NonLoaded,
netmask=NonLoaded,
dns1=NonLoaded,
dns2=NonLoaded,
dns_suffix=NonLoaded,
ip_ranges=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
>
[
<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
>,
<Fog::Compute::VcloudDirector::Catalog
id="ea0c6acf-c9c0-46b7-b19f-4b2d3bf8aa33",
name="prueba",
type="application/vnd.vmware.vcloud.catalog+xml",
href="https://example.com/api/catalog/ea0c6acf-c9c0-46b7-b19f-4b2d3bf8aa33",
description=NonLoaded,
is_published=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
>
[
<Fog::Compute::VcloudDirector::CatalogItem
id="2bd55629-2734-420c-9068-2ff06a4a8028",
name="DEVWIN",
type="application/vnd.vmware.vcloud.catalogItem+xml",
href="https://example.com/api/catalogItem/2bd55629-2734-420c-9068-2ff06a4a8028",
description=NonLoaded,
vapp_template_id=NonLoaded
>,
<Fog::Compute::VcloudDirector::CatalogItem
id="5437aa3f-e369-40b2-b985-2e63e1bc9f2e",
name="DEVRHL",
type="application/vnd.vmware.vcloud.catalogItem+xml",
href="https://example.com/api/catalogItem/5437aa3f-e369-40b2-b985-2e63e1bc9f2e",
description=NonLoaded,
vapp_template_id=NonLoaded
>,
<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=NonLoaded,
vapp_template_id=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"
}