1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/vcloud_director
Dan Carley 831e598021 Preserve @ symbols in vcloud_director usernames
It's valid to have an email address as a vCloud Director username which
would result in a `vcloud_director_username` string that looks like:

    user@example.com@organisation

The previous code incorrectly stripped any @ symbols from the username which
would turn the previous example into:

    fog_credential_user = 'userexample.com'
    fog_credential_org = 'organisation'

This meant that check_session_matches_credentials() would always raise an
error for such usernames. Prevent this from happening by restoring the @
separators when we join the array back together (minus the org).

Fixes an error reported in gds-operations/vcloud-core#139
2014-10-30 16:01:00 +00:00
..
generators/compute Vcloud director: Add static routing support to Edge Gateway 2014-09-12 11:57:24 +01:00
models/compute Add query support to tasks model, inc Mock 2014-09-23 19:31:01 +01:00
parsers/compute Standardise empty lines throughout codebase 2014-05-26 14:20:02 +01:00
requests/compute Not specifying Owner details caused issue in Query Mock 2014-09-24 23:24:00 +01:00
compute.rb Preserve @ symbols in vcloud_director usernames 2014-10-30 16:01:00 +00:00
core.rb Standardise on collection methods 2014-05-26 16:22:07 +01:00
query.rb Solid query API mixin, with tests 2014-09-23 19:31:00 +01:00
README.md Empty commit to prompt Travis run 2014-09-24 22:43:52 +01:00

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"
}