mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[TerremarkEcloud|compute] cleanup/consistency
This commit is contained in:
parent
5e6797f6b6
commit
05b2e59e87
36 changed files with 495 additions and 982 deletions
|
|
@ -6,34 +6,29 @@ module Fog
|
|||
class GetCatalog < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = { 'catalogItems' => [] }
|
||||
@response = { 'CatalogItems' => [] }
|
||||
end
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'Catalog'
|
||||
@response['name'] = attr_value('name', attrs)
|
||||
@response['uri'] = attr_value('href', attrs)
|
||||
when 'CatalogItems'
|
||||
@in_catalog_items = true
|
||||
when 'CatalogItem'
|
||||
if @in_catalog_items
|
||||
@response['catalogItems'].push({
|
||||
'name' => attr_value('name', attrs),
|
||||
'uri' => attr_value('href', attrs)
|
||||
})
|
||||
for attribute in %w{href name}
|
||||
if value = attr_value(attribute, attrs)
|
||||
@response[attribute] = value
|
||||
end
|
||||
end
|
||||
when 'CatalogItem'
|
||||
catalog_item = {}
|
||||
for attribute in %w{href name rel type}
|
||||
if value = attr_value(attribute, attrs)
|
||||
catalog_item[attribute] = value
|
||||
end
|
||||
end
|
||||
@response['CatalogItems'] << catalog_item
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'CatalogItems'
|
||||
@in_catalog_items = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,22 +6,22 @@ module Fog
|
|||
class GetCatalogItem < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = { 'properties' => [] }
|
||||
@response = { 'Entity' => {}, 'Link' => {}, 'Property' => {} }
|
||||
end
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'CatalogItem'
|
||||
@response['name'] = attr_value('name', attrs)
|
||||
@response['uri'] = attr_value('href', attrs)
|
||||
for attribute in %w{href type name}
|
||||
if value = attr_value(attribute, attrs)
|
||||
@response[attribute] = value
|
||||
end
|
||||
end
|
||||
when 'Link', 'Entity'
|
||||
href = attr_value('href', attrs)
|
||||
|
||||
case attr_value('type', attrs)
|
||||
when 'application/vnd.tmrk.ecloud.catalogItemCustomizationParameters+xml'
|
||||
@response['customization_uri'] = href
|
||||
when 'application/vnd.vmware.vcloud.vAppTemplate+xml'
|
||||
@response['template_uri'] = href
|
||||
for attribute in %w{href name rel type}
|
||||
if value = attr_value(attribute, attrs)
|
||||
@response[name][attribute] = value
|
||||
end
|
||||
end
|
||||
when 'Property'
|
||||
@property_key = attr_value('key', attrs)
|
||||
|
|
@ -33,7 +33,7 @@ module Fog
|
|||
def end_element(name)
|
||||
case name
|
||||
when 'Property'
|
||||
@response['properties'].push({ 'key' => @property_key, 'value' => @value})
|
||||
@response['Property'][@property_key] = @value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
27
lib/fog/compute/parsers/terremark_ecloud/get_ip_addresses.rb
Normal file
27
lib/fog/compute/parsers/terremark_ecloud/get_ip_addresses.rb
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module TerremarkEcloud
|
||||
module Compute
|
||||
|
||||
class GetIpAddresses < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = { 'IpAddresses' => [] }
|
||||
@ip_address = {}
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'Id', 'Href', 'Name', 'RnatAddress', 'Server', 'Status'
|
||||
@ip_address[name] = @value
|
||||
when 'IpAddress'
|
||||
@response['IpAddresses'] << @ip_address
|
||||
@ip_address = {}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -6,22 +6,26 @@ module Fog
|
|||
class GetNetwork < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = { 'configuration' => {}, 'features' => {} }
|
||||
@response = {
|
||||
'Configuration' => {},
|
||||
'Features' => {},
|
||||
'Link' => {}
|
||||
}
|
||||
end
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'Network'
|
||||
@response['name'] = attr_value('name', attrs)
|
||||
@response['uri'] = attr_value('href', attrs)
|
||||
for attribute in %w{href name}
|
||||
if value = attr_value(attribute, attrs)
|
||||
@response[attribute] = value
|
||||
end
|
||||
end
|
||||
when 'Link'
|
||||
href = attr_value('href', attrs)
|
||||
|
||||
case attr_value('name', attrs) # wut
|
||||
when @response['name']
|
||||
@response['extensions_uri'] = href
|
||||
when 'IP Addresses'
|
||||
@response['extensions_ips_uri'] = href
|
||||
for attribute in %w{href name rel type}
|
||||
if value = attr_value(attribute, attrs)
|
||||
@response[name][attribute] = value
|
||||
end
|
||||
end
|
||||
when 'Configuration'
|
||||
@in_configuration = true
|
||||
|
|
@ -38,13 +42,13 @@ module Fog
|
|||
@in_configuration = false
|
||||
when 'Gateway', 'Netmask'
|
||||
if @in_configuration
|
||||
@response['configuration'][name.downcase] = @value
|
||||
@response['Configuration'][name] = @value
|
||||
end
|
||||
when 'Features'
|
||||
@in_features = false
|
||||
else
|
||||
if @in_features
|
||||
@response['features'][name] = @value
|
||||
@response['Features'][name] = @value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module TerremarkEcloud
|
||||
module Compute
|
||||
|
||||
class GetNetworkExtensions < Fog::Parsers::Base
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'Name'
|
||||
@response['name'] = @value
|
||||
when 'Href'
|
||||
@response['uri'] = @value
|
||||
when 'RnatAddress'
|
||||
@response['rnatAddress'] = @value
|
||||
when 'Address'
|
||||
@response['address'] = @value
|
||||
when 'BroadcastAddress'
|
||||
@response['broadcastAddress'] = @value
|
||||
when 'GatewayAddress'
|
||||
@response['gatewayAddress'] = @value
|
||||
when 'NetworkType'
|
||||
@response['type'] = @value
|
||||
when 'FriendlyName'
|
||||
@response['friendlyName'] = @value
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -6,28 +6,24 @@ module Fog
|
|||
class GetOrganization < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = { 'vdcs' => [] }
|
||||
@response = { 'Link' => [] }
|
||||
end
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'Org'
|
||||
@response['name'] = attr_value('name', attrs)
|
||||
@response['uri'] = attr_value('href', attrs)
|
||||
when 'Link'
|
||||
href = attr_value('href', attrs)
|
||||
|
||||
case attr_value('type', attrs)
|
||||
when 'application/vnd.vmware.vcloud.vdc+xml'
|
||||
@response['vdcs'].push({ 'name' => attr_value('name', attrs), 'uri' => href })
|
||||
when 'application/vnd.vmware.vcloud.catalog+xml'
|
||||
@response['catalog_uri'] = href
|
||||
when 'application/vnd.vmware.vcloud.tasksList+xml'
|
||||
@response['tasksList_uri'] = href
|
||||
when 'application/vnd.tmrk.ecloud.keysList+xml'
|
||||
@response['keysList_uri'] = href
|
||||
when 'application/vnd.tmrk.ecloud.tagsList+xml'
|
||||
@response['tagsList_uri'] = href
|
||||
link = {}
|
||||
for attribute in %w{href name rel type}
|
||||
if value = attr_value(attribute, attrs)
|
||||
link[attribute] = value
|
||||
end
|
||||
end
|
||||
@response['Link'] << link
|
||||
when 'Org'
|
||||
for attribute in %w{href name}
|
||||
if value = attr_value(attribute, attrs)
|
||||
@response[attribute] = value
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module TerremarkEcloud
|
||||
module Compute
|
||||
|
||||
class GetTask < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = { 'owner' => {}, 'result' => {} }
|
||||
end
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'Task'
|
||||
@response['uri'] = attr_value('href', attrs)
|
||||
@response['status'] = attr_value('status', attrs)
|
||||
@response['startTime'] = (start_time = attr_value('startTime', attrs) and Time.parse(start_time))
|
||||
@response['endTime'] = (end_time = attr_value('endTime', attrs) and Time.parse(end_time))
|
||||
when 'Owner', 'Result'
|
||||
href, type, this_name = %w(href type name).map {|a| attr_value(a, attrs) }
|
||||
@response[name.downcase] = {
|
||||
'uri' => href,
|
||||
'type' => type,
|
||||
'name' => this_name
|
||||
}
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -7,84 +7,99 @@ module Fog
|
|||
|
||||
def reset
|
||||
@response = {
|
||||
'storageCapacity' => {}, 'cpuCapacity' => {},
|
||||
'memoryCapacity' => {}, 'networks' => [], 'vms' => []
|
||||
'AvailableNetworks' => [],
|
||||
'ComputeCapacity' => {
|
||||
'Cpu' => {},
|
||||
'DeployedVmsQuota' => {},
|
||||
'InstantiatedVmsQuota' => {},
|
||||
'Memory' => {}
|
||||
},
|
||||
'Link' => [],
|
||||
'ResourceEntities' => [],
|
||||
'StorageCapacity' => {}
|
||||
}
|
||||
end
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'Vdc'
|
||||
@response['name'] = attr_value('name', attrs)
|
||||
@response['uri'] = attr_value('href', attrs)
|
||||
when 'Cpu'
|
||||
@in_cpu = true
|
||||
when 'DeployedVmsQuota'
|
||||
@in_deployed_vms_quota = true
|
||||
when 'InstantiatedVmsQuota'
|
||||
@in_instantiated_vms_quota = true
|
||||
when 'Link'
|
||||
href = attr_value('href', attrs)
|
||||
|
||||
case attr_value('type', attrs)
|
||||
when 'application/vnd.vmware.vcloud.catalog+xml'
|
||||
@response['catalog_uri'] = href
|
||||
when 'application/vnd.tmrk.ecloud.publicIpsList+xml'
|
||||
@response['publicIpsList_uri'] = href
|
||||
when 'application/vnd.tmrk.ecloud.internetServicesList+xml'
|
||||
@response['internetServicesList_uri'] = href
|
||||
when 'application/vnd.tmrk.ecloud.firewallAclsList+xml'
|
||||
@response['firewallAclsList_uri'] = href
|
||||
when 'application/vnd.tmrk.ecloud.networkGroupList+xml'
|
||||
@response['trustedNetworkGroupsList_uri'] = href
|
||||
link = {}
|
||||
for attribute in %w{href name rel type}
|
||||
if value = attr_value(attribute, attrs)
|
||||
link[attribute] = value
|
||||
end
|
||||
end
|
||||
@response['Link'] << link
|
||||
when 'Memory'
|
||||
@in_memory = true
|
||||
when 'Network'
|
||||
network = {}
|
||||
for attribute in %w{href name type}
|
||||
if value = attr_value(attribute, attrs)
|
||||
network[attribute] = value
|
||||
end
|
||||
end
|
||||
@response['AvailableNetworks'] << network
|
||||
when 'StorageCapacity'
|
||||
@in_storage_capacity = true
|
||||
when 'ComputeCapacity'
|
||||
@in_compute_capacity = true
|
||||
when 'Cpu'
|
||||
@in_compute_capacity && @in_cpu_capacity = true
|
||||
when 'Memory'
|
||||
@in_compute_capacity && @in_memory_capacity = true
|
||||
when 'ResourceEntities'
|
||||
@in_resource_entities = true
|
||||
when 'ResourceEntity'
|
||||
if @in_resource_entities
|
||||
@response['vms'].push({
|
||||
'name' => attr_value('name', attrs),
|
||||
'uri' => attr_value('href', attrs)
|
||||
})
|
||||
resource_entity = {}
|
||||
for attribute in %w{href name type}
|
||||
if value = attr_value(attribute, attrs)
|
||||
resource_entity[attribute] = value
|
||||
end
|
||||
end
|
||||
when 'AvailableNetworks'
|
||||
@in_available_networks = true
|
||||
when 'Network'
|
||||
if @in_available_networks
|
||||
@response['networks'].push({
|
||||
'name' => attr_value('name', attrs),
|
||||
'uri' => attr_value('href', attrs)
|
||||
})
|
||||
@response['ResourceEntities'] << resource_entity
|
||||
when 'Vdc'
|
||||
for attribute in %w{href name}
|
||||
if value = attr_value(attribute, attrs)
|
||||
@response[attribute] = value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'Allocated', 'Used'
|
||||
if @in_storage_capacity
|
||||
@response['storageCapacity'][name.downcase] = @value.to_i
|
||||
elsif @in_cpu_capacity
|
||||
@response['cpuCapacity'][name.downcase] = @value.to_i
|
||||
elsif @in_memory_capacity
|
||||
@response['memoryCapacity'][name.downcase] = @value.to_i
|
||||
when 'Description'
|
||||
@response[name] = @value
|
||||
when 'Allocated', 'Limit', 'Used'
|
||||
if @in_cpu
|
||||
@response['ComputeCapacity']['Cpu'][name] = @value.to_i
|
||||
elsif @in_deployed_vms_quota
|
||||
@response['ComputeCapacity']['DeployedVmsQuota'][name] = @value.to_i
|
||||
elsif @in_instantiated_vms_quota
|
||||
@response['ComputeCapacity']['InstantiatedVmsQuota'][name] = @value.to_i
|
||||
elsif @in_memory
|
||||
@response['ComputeCapacity']['Memory'][name] = @value.to_i
|
||||
elsif @in_storage_capacity
|
||||
@response['StorageCapacity'][name] = @value.to_i
|
||||
end
|
||||
when 'Cpu'
|
||||
@in_cpu = false
|
||||
when 'DeployedVmsQuota'
|
||||
@in_deployed_vms_quota = false
|
||||
when 'InstantiatedVmsQuota'
|
||||
@in_instantiated_vms_quota = false
|
||||
when 'Memory'
|
||||
@in_memory = false
|
||||
when 'StorageCapacity'
|
||||
@in_storage_capacity = false
|
||||
when 'ComputeCapacity'
|
||||
@in_compute_capacity = false
|
||||
when 'Cpu'
|
||||
@in_compute_capacity && @in_cpu_capacity = false
|
||||
when 'Memory'
|
||||
@in_compute_capacity && @in_memory_capacity = false
|
||||
when 'ResourceEntities'
|
||||
@in_resource_entities = false
|
||||
when 'AvailableNetworks'
|
||||
@in_available_networks = false
|
||||
when 'Units'
|
||||
if @in_storage_capacity
|
||||
@response['StorageCapacity'][name] = @value
|
||||
elsif @in_cpu
|
||||
@response['ComputeCapacity']['Cpu'][name] = @value
|
||||
elsif @in_memory
|
||||
@response['ComputeCapacity']['Memory'][name] = @value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
28
lib/fog/compute/parsers/terremark_ecloud/get_versions.rb
Normal file
28
lib/fog/compute/parsers/terremark_ecloud/get_versions.rb
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module TerremarkEcloud
|
||||
module Compute
|
||||
|
||||
class GetVersions < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = { 'SupportedVersions' => [] }
|
||||
@version_info = {}
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'LoginUrl', 'Version'
|
||||
@version_info[name] = @value
|
||||
when 'VersionInfo'
|
||||
@response['SupportedVersions'] << @version_info
|
||||
@version_info = {}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,105 +0,0 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module TerremarkEcloud
|
||||
module Compute
|
||||
|
||||
class GetVm < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = {
|
||||
'network_connections' => [],
|
||||
'disks' => []
|
||||
}
|
||||
|
||||
@network_connection = {}
|
||||
@virtual_hardware_item = {}
|
||||
end
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'VApp'
|
||||
@response['name'] = attr_value('name', attrs)
|
||||
@response['uri'] = attr_value('href', attrs)
|
||||
@response['status'] = case attr_value('status', attrs)
|
||||
when '0' then 'creating'
|
||||
when '1' then 'deploying'
|
||||
when '2' then 'powered_off'
|
||||
when '4' then 'powered_on'
|
||||
end
|
||||
@response['storage_size'] = attr_value('size', attrs).to_i
|
||||
when 'Link'
|
||||
href = attr_value('href', attrs)
|
||||
|
||||
case attr_value('type', attrs)
|
||||
when 'application/vnd.vmware.vcloud.vdc+xml'
|
||||
@response['vdc_uri'] = href
|
||||
when 'application/vnd.tmrk.ecloud.vApp+xml'
|
||||
@response['extension_uri'] = href
|
||||
end
|
||||
when 'NetworkConnectionSection'
|
||||
@in_network_connection_section = true
|
||||
when 'NetworkConnection'
|
||||
if @in_network_connection_section
|
||||
@in_network_connection = true
|
||||
@network_connection = { 'name' => attr_value('Network', attrs) }
|
||||
end
|
||||
when 'VirtualHardwareSection'
|
||||
@in_virtual_hardware_section = true
|
||||
when 'Item'
|
||||
if @in_virtual_hardware_section
|
||||
@in_virtual_hardware_item = true
|
||||
@virtual_hardware_item = {}
|
||||
end
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def end_element(name)
|
||||
case name
|
||||
when 'NetworkConnectionSection'
|
||||
@in_network_connection_section = false
|
||||
when 'NetworkConnection'
|
||||
if @in_network_connection_section
|
||||
@in_network_connection = false
|
||||
@response['network_connections'].push(@network_connection)
|
||||
end
|
||||
when 'IpAddress'
|
||||
@in_network_connection && @network_connection['ip_address'] = @value
|
||||
when 'Item'
|
||||
if @in_virtual_hardware_item
|
||||
@in_virtual_hardware_item = false
|
||||
|
||||
case @virtual_hardware_item['type']
|
||||
when 3
|
||||
@response['cpus'] = @virtual_hardware_item['count']
|
||||
when 4
|
||||
@response['memory'] = @virtual_hardware_item['count']
|
||||
when 17
|
||||
@response['disks'].push({
|
||||
'id' => @virtual_hardware_item['id'],
|
||||
'size' => @virtual_hardware_item['count']
|
||||
})
|
||||
end
|
||||
end
|
||||
when 'AddressOnParent'
|
||||
if @in_virtual_hardware_item
|
||||
@virtual_hardware_item['id'] = @value.to_i
|
||||
end
|
||||
when 'ResourceType'
|
||||
if @in_virtual_hardware_item
|
||||
@virtual_hardware_item['type'] = @value.to_i
|
||||
end
|
||||
when 'VirtualQuantity'
|
||||
if @in_virtual_hardware_item
|
||||
@virtual_hardware_item['count'] = @value.to_i
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module TerremarkEcloud
|
||||
module Compute
|
||||
|
||||
class InstantiateVmTemplate < Fog::Parsers::Base
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'VApp'
|
||||
@response['name'] = attr_value('name', attrs)
|
||||
@response['uri'] = attr_value('href', attrs)
|
||||
@response['status'] = 'deploying'
|
||||
end
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
27
lib/fog/compute/parsers/terremark_ecloud/login.rb
Normal file
27
lib/fog/compute/parsers/terremark_ecloud/login.rb
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
module Fog
|
||||
module Parsers
|
||||
module TerremarkEcloud
|
||||
module Compute
|
||||
|
||||
class Login < Fog::Parsers::Base
|
||||
|
||||
def reset
|
||||
@response = { 'OrgList' => [] }
|
||||
end
|
||||
|
||||
def start_element(name, attrs = [])
|
||||
case name
|
||||
when 'Org'
|
||||
@response['OrgList'] << {
|
||||
'href' => attr_value('href', attrs),
|
||||
'name' => attr_value('name', attrs),
|
||||
'type' => attr_value('type', attrs)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
def delete_vm(uri)
|
||||
response = request({
|
||||
:uri => uri,
|
||||
:method => 'DELETE',
|
||||
:expects => 202
|
||||
})
|
||||
|
||||
# raise here if Location is missing?
|
||||
|
||||
{ 'task_uri' => response.headers['Location'] }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,17 +1,24 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_catalog'
|
||||
|
||||
def get_catalog(catalog_uri)
|
||||
def get_catalog(href)
|
||||
request({
|
||||
:uri => catalog_uri,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetCatalog.new
|
||||
})
|
||||
:href => href,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetCatalog.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_catalog(href)
|
||||
Fog::Mock.not_implemented
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,17 +1,24 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_catalog_item'
|
||||
|
||||
def get_catalog_item(catalog_item_uri)
|
||||
def get_catalog_item(href)
|
||||
request({
|
||||
:uri => catalog_item_uri,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetCatalogItem.new
|
||||
})
|
||||
:href => href,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetCatalogItem.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_catalog_item(href)
|
||||
Fog::Mock.not_implemented
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_ip_addresses'
|
||||
|
||||
def get_ip_addresses(href)
|
||||
request({
|
||||
:href => href,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetIpAddresses.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_ip_addresses(href)
|
||||
Fog::Mock.not_implemented
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,17 +1,24 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_network'
|
||||
|
||||
def get_network(network_uri)
|
||||
def get_network(href)
|
||||
request({
|
||||
:uri => network_uri,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetNetwork.new
|
||||
})
|
||||
:href => href,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetNetwork.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_network(href)
|
||||
Fog::Mock.not_implemented
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_network_extensions'
|
||||
|
||||
def get_network_extensions(network_extensions_uri)
|
||||
request({
|
||||
:uri => network_extensions_uri,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetNetworkExtensions.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,17 +1,24 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_organization'
|
||||
|
||||
def get_organization(uri = nil)
|
||||
def get_organization(href = organization_href)
|
||||
request({
|
||||
:uri => uri || organization_uri,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetOrganization.new
|
||||
})
|
||||
:href => href,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetOrganization.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_organization(href = organization_href)
|
||||
Fog::Mock.not_implemented
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_task'
|
||||
|
||||
def get_task(uri)
|
||||
request({
|
||||
:uri => uri,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetTask.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,17 +1,24 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_vdc'
|
||||
|
||||
def get_vdc(uri)
|
||||
def get_vdc(href)
|
||||
request({
|
||||
:uri => uri,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetVdc.new
|
||||
})
|
||||
:href => href,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetVdc.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_vdc
|
||||
Fog::Mock.not_implemented
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
32
lib/fog/compute/requests/terremark_ecloud/get_versions.rb
Normal file
32
lib/fog/compute/requests/terremark_ecloud/get_versions.rb
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_versions'
|
||||
|
||||
def get_versions
|
||||
connection = Fog::Connection.new(@versions_endpoint)
|
||||
response = connection.request({
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetVersions.new
|
||||
});
|
||||
version_info = response.body['SupportedVersions'].detect {|version_info| version_info['Version'] == @version}
|
||||
unless login_url = version_info && version_info['LoginUrl']
|
||||
raise "TerremarkEcloud does not support version #{@version}"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class Mock
|
||||
|
||||
def get_versions
|
||||
Fog::Mock.not_implemented
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_vm'
|
||||
|
||||
def get_vm(uri)
|
||||
request({
|
||||
:uri => uri,
|
||||
:idempotent => true,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetVm.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,135 +0,0 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
require 'fog/compute/parsers/terremark_ecloud/instantiate_vm_template'
|
||||
|
||||
# Instantiate a VM template
|
||||
#
|
||||
# ==== Parameters
|
||||
# * options<~Hash>:
|
||||
# * 'vdc_uri'<~String>: URI of the VDC to place the VM in (required)
|
||||
# * 'catalog_item_uri'<~String>: URI of the catalog item (template) to use (required)
|
||||
# * 'network_uri'<~String>: URI of the network to place the VM in (required)
|
||||
# * 'name'<~String>: Name of the VM to create
|
||||
# * 'row'<~String>: UI row to place the VM in (required)
|
||||
# * 'group'<~String>: UI group to place the VM in (required)
|
||||
# * 'cpus'<~Integer>: Number of CPUs the VM should have (defaults to 1)
|
||||
# * 'memory'<~Integer>: Megabytes of memory the VM should have (defaults to 512)
|
||||
# * 'ipAddress'<~String>: IP to use within the network
|
||||
# * 'longName'<~String>: Long name for the VM
|
||||
# * 'tags'<~Array>: Tags to assign to the VM
|
||||
# * 'password'<~String>: Password
|
||||
def instantiate_vm_template(options = {})
|
||||
options['cpus'] ||= 1
|
||||
options['memory'] ||= 512
|
||||
|
||||
required_options = %w(vdc_uri catalog_item_uri network_uri name row group)
|
||||
supplied_options = options.keys
|
||||
missing_options = required_options - supplied_options
|
||||
|
||||
unless missing_options.empty?
|
||||
raise ArgumentError, "Missing required options: #{missing_options.sort.join(', ')}"
|
||||
end
|
||||
|
||||
# could take parsed catalog_item Hash instead/also to avoid this
|
||||
template_uri = get_catalog_item(options['catalog_item_uri']).body['template_uri']
|
||||
|
||||
builder = Builder::XmlMarkup.new
|
||||
body_xml = builder.InstantiateVAppTemplateParams({
|
||||
'name' => options['name'],
|
||||
'xmlns' => 'http://www.vmware.com/vcloud/v0.8',
|
||||
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
||||
'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema',
|
||||
'xml:lang' => 'en'
|
||||
}) do |b|
|
||||
b.VAppTemplate(:href => template_uri)
|
||||
b.InstantiationParams do
|
||||
b.ProductSection({
|
||||
'xmlns:q1' => 'http://www.vmware.com/vcloud/v0.8',
|
||||
'xmlns:ovf' => 'http://schemas.dmtf.org/ovf/envelope/1'
|
||||
}) do
|
||||
b.Property({
|
||||
'xmlns' => 'http://schemas.dmtf.org/ovf/envelope/1',
|
||||
'ovf:key' => 'row',
|
||||
'ovf:value' => options['row']
|
||||
})
|
||||
b.Property({
|
||||
'xmlns' => 'http://schemas.dmtf.org/ovf/envelope/1',
|
||||
'ovf:key' => 'group',
|
||||
'ovf:value' => options['group']
|
||||
})
|
||||
if options['password']
|
||||
b.Property({
|
||||
'xmlns' => 'http://schemas.dmtf.org/ovf/envelope/1',
|
||||
'ovf:key' => 'password',
|
||||
'ovf:value' => options['password']
|
||||
})
|
||||
end
|
||||
if options['ipAddress']
|
||||
b.Property({
|
||||
'xmlns' => 'http://schemas.dmtf.org/ovf/envelope/1',
|
||||
'ovf:key' => 'ipaddress',
|
||||
'ovf:value' => options['ipAddress']
|
||||
})
|
||||
end
|
||||
if options['longName']
|
||||
b.Property({
|
||||
'xmlns' => 'http://schemas.dmtf.org/ovf/envelope/1',
|
||||
'ovf:key' => 'longName',
|
||||
'ovf:value' => options['longName']
|
||||
})
|
||||
end
|
||||
if options['tags']
|
||||
b.Property({
|
||||
'xmlns' => 'http://schemas.dmtf.org/ovf/envelope/1',
|
||||
'ovf:key' => 'tags',
|
||||
'ovf:value' => options['tags'].join(',') # groan
|
||||
})
|
||||
end
|
||||
end # ProductSection
|
||||
|
||||
b.VirtualHardwareSection({
|
||||
'xmlns:q1' => 'http://www.vmware.com/vcloud/v0.8'
|
||||
}) do
|
||||
b.Item({
|
||||
'xmlns' => 'http://schemas.dmtf.org/ovf/envelope/1'
|
||||
}) do
|
||||
b.InstanceID(2, 'xmlns' => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
|
||||
b.ResourceType(4, 'xmlns' => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
|
||||
b.VirtualQuantity(options['memory'], 'xmlns' => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
|
||||
end
|
||||
b.Item({
|
||||
'xmlns' => 'http://schemas.dmtf.org/ovf/envelope/1'
|
||||
}) do
|
||||
b.InstanceID(1, 'xmlns' => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
|
||||
b.ResourceType(3, 'xmlns' => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
|
||||
b.VirtualQuantity(options['cpus'], 'xmlns' => 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData')
|
||||
end
|
||||
end # VirtualHardwareSection
|
||||
|
||||
b.NetworkConfigSection do
|
||||
b.NetworkConfig do
|
||||
b.NetworkAssociation(:href => options['network_uri'])
|
||||
end
|
||||
end
|
||||
end # InstantiationParams
|
||||
end # InstantiateVAppTemplateParams
|
||||
|
||||
request({
|
||||
:uri => options['vdc_uri'] + '/action/instantiatevAppTemplate',
|
||||
:method => 'POST',
|
||||
:headers => {
|
||||
'Content-Type' => 'application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml'
|
||||
},
|
||||
:body => body_xml,
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::InstantiateVmTemplate.new
|
||||
})
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
def power_off_vm(vm_uri)
|
||||
response = request({
|
||||
:uri => vm_uri + '/power/action/powerOff',
|
||||
:method => 'POST',
|
||||
:expects => 202
|
||||
})
|
||||
|
||||
{ 'task_uri' => response.headers['Location'] }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
def power_on_vm(vm_uri)
|
||||
response = request({
|
||||
:uri => vm_uri + '/power/action/powerOn',
|
||||
:method => 'POST',
|
||||
:expects => 202
|
||||
})
|
||||
|
||||
{ 'task_uri' => response.headers['Location'] }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
module Fog
|
||||
module TerremarkEcloud
|
||||
class Compute
|
||||
|
||||
class Real
|
||||
|
||||
def shutdown_vm(vm_uri)
|
||||
response = request({
|
||||
:uri => vm_uri + '/power/action/shutdown',
|
||||
:method => 'POST',
|
||||
:expects => 204
|
||||
})
|
||||
|
||||
{ 'task_uri' => response.headers['Location'] }
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -8,26 +8,19 @@ module Fog
|
|||
recognizes :versions_endpoint
|
||||
|
||||
request_path 'fog/compute/requests/terremark_ecloud'
|
||||
request :delete_vm
|
||||
request :get_catalog
|
||||
request :get_catalog_item
|
||||
request :get_ip_addresses
|
||||
request :get_network
|
||||
request :get_network_extensions
|
||||
request :get_organization
|
||||
request :get_task
|
||||
request :get_vdc
|
||||
request :get_vm
|
||||
request :instantiate_vm_template
|
||||
request :power_on_vm
|
||||
request :power_off_vm
|
||||
request :shutdown_vm
|
||||
|
||||
class Mock
|
||||
|
||||
def initialize(options={})
|
||||
end
|
||||
|
||||
def request(params)
|
||||
def organization_href
|
||||
Mock.not_implemented
|
||||
end
|
||||
|
||||
|
|
@ -36,99 +29,78 @@ module Fog
|
|||
class Real
|
||||
|
||||
def initialize(options = {})
|
||||
require 'fog/compute/parsers/terremark_ecloud/get_versions'
|
||||
require 'fog/compute/parsers/terremark_ecloud/login'
|
||||
|
||||
@username = options[:terremark_ecloud_username]
|
||||
@password = options[:terremark_ecloud_password]
|
||||
@version = '0.8b-ext2.6'
|
||||
@versions_endpoint = options[:versions_endpoint] || 'https://services.enterprisecloud.terremark.com/api/versions'
|
||||
end
|
||||
|
||||
if @versions_endpoint = options[:versions_endpoint]
|
||||
else
|
||||
@versions_endpoint = 'https://services.enterprisecloud.terremark.com/api/versions'
|
||||
def organization_href
|
||||
unless @organization_href
|
||||
get_token_and_organization
|
||||
end
|
||||
@organization_href
|
||||
end
|
||||
|
||||
def request(params)
|
||||
begin
|
||||
get_token_and_organization if @token.nil?
|
||||
response = authenticated_request(params)
|
||||
rescue Excon::Errors::Unauthorized
|
||||
get_token_and_organization
|
||||
response = authenticated_request(params)
|
||||
end
|
||||
end
|
||||
raise ArgumentError.new('Need :href in params') unless params[:href]
|
||||
|
||||
def organization_uri
|
||||
unless @organization_uri
|
||||
# set auth token
|
||||
if @token.nil?
|
||||
get_token_and_organization
|
||||
end
|
||||
@organization_uri
|
||||
|
||||
begin
|
||||
Fog::Connection.new(params[:href]).request({
|
||||
:parser => params[:parser],
|
||||
:expects => params[:expects] || 200,
|
||||
:method => params[:method] || 'GET',
|
||||
:body => params[:body],
|
||||
:headers => {
|
||||
'Cookie' => @token
|
||||
}.merge(params[:headers] || {})
|
||||
})
|
||||
rescue Excon::Errors::Unauthorized # expired token
|
||||
get_token_and_organization
|
||||
retry
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def authenticated_request(params)
|
||||
raise ArgumentError.new('Need :uri in params') unless params[:uri]
|
||||
|
||||
Fog::Connection.new(params[:uri]).request({
|
||||
:parser => params[:parser],
|
||||
:expects => params[:expects] || 200,
|
||||
:method => params[:method] || 'GET',
|
||||
:body => params[:body],
|
||||
:headers => {
|
||||
'Cookie' => @token
|
||||
}.merge(params[:headers] || {})
|
||||
})
|
||||
end
|
||||
|
||||
def get_token_and_organization
|
||||
login_uri = login_uri_for(@version)
|
||||
# lookup LoginUrl for specified version
|
||||
connection = Fog::Connection.new(@versions_endpoint)
|
||||
response = connection.request({
|
||||
:expects => 200,
|
||||
:method => 'GET',
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::GetVersions.new
|
||||
});
|
||||
version_info = response.body['SupportedVersions'].detect {|version_info| version_info['Version'] == @version}
|
||||
unless login_url = version_info && version_info['LoginUrl']
|
||||
# no LoginUrl matches specified version
|
||||
raise "TerremarkEcloud does not support version #{@version}"
|
||||
end
|
||||
|
||||
username_colon_password = [@username, @password].join(':')
|
||||
base64_encoded = Base64.encode64(username_colon_password).gsub("\n", '')
|
||||
authorization_header_data = "Basic #{base64_encoded}"
|
||||
|
||||
connection = Fog::Connection.new(login_uri)
|
||||
connection = Fog::Connection.new(login_url)
|
||||
response = connection.request({
|
||||
:expects => 200,
|
||||
:method => 'POST',
|
||||
:headers => {
|
||||
'Authorization' => authorization_header_data
|
||||
}
|
||||
})
|
||||
:expects => 200,
|
||||
:method => 'POST',
|
||||
:headers => {
|
||||
'Authorization' => ('Basic ' << Base64.encode64("#{@username}:#{@password}").chomp!),
|
||||
'Content-Type' => 'application/vnd.vmware.vcloud.orgList+xml'
|
||||
},
|
||||
:parser => Fog::Parsers::TerremarkEcloud::Compute::Login.new
|
||||
})
|
||||
|
||||
@token = response.headers['Set-Cookie']
|
||||
|
||||
unless response.body.empty?
|
||||
document = Fog::ToHashDocument.new
|
||||
parser = Nokogiri::XML::SAX::PushParser.new(document)
|
||||
parser << response.body
|
||||
parser.finish
|
||||
|
||||
response.body = document.body
|
||||
if organization = response.body['OrgList'].first
|
||||
@organization_href = organization['href']
|
||||
end
|
||||
|
||||
if organization = [response.body[:Org]].first
|
||||
@organization_uri = organization[:href]
|
||||
end
|
||||
end
|
||||
|
||||
def login_uri_for(version)
|
||||
connection = Fog::Connection.new(@versions_endpoint)
|
||||
response = connection.request({
|
||||
:expects => 200,
|
||||
:method => 'GET'
|
||||
})
|
||||
|
||||
unless response.body.empty?
|
||||
document = Fog::ToHashDocument.new
|
||||
parser = Nokogiri::XML::SAX::PushParser.new(document)
|
||||
parser << response.body
|
||||
parser.finish
|
||||
|
||||
response.body = document.body
|
||||
end
|
||||
|
||||
version_info = [response.body[:VersionInfo]].flatten.detect {|v| v[:Version] == version }
|
||||
version_info && version_info[:LoginUrl]
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ module Fog
|
|||
|
||||
def self.new(options={})
|
||||
location = caller.first
|
||||
warning = "[yellow][WARN] Fog::Terremark::Ecloud is deprecated, use Fog::Vcloud::Terremark::Ecloud[/]"
|
||||
warning = "[yellow][WARN] Fog::Terremark::Ecloud is deprecated, use Fog::Compute.new(:provider => 'TerremarkEcloud')[/]"
|
||||
warning << " [light_black](" << location << ")[/] "
|
||||
Formatador.display_line(warning)
|
||||
|
||||
|
|
|
|||
|
|
@ -2,32 +2,42 @@ Shindo.tests('TerremarkEcloud::Compute | catalog requests', ['terremark_ecloud']
|
|||
|
||||
@catalog_format = {
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'catalogItems' => [{
|
||||
'name' => String,
|
||||
'uri' => String
|
||||
}]
|
||||
'href' => String,
|
||||
'CatalogItems' => [{
|
||||
'href' => String,
|
||||
'name' => String,
|
||||
'type' => String
|
||||
}]
|
||||
}
|
||||
|
||||
@catalog_item_format = {
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'customization_uri' => String,
|
||||
'template_uri' => String,
|
||||
'properties' => [{
|
||||
'key' => String,
|
||||
'value' => String
|
||||
}]
|
||||
'name' => String,
|
||||
'Entity' => {
|
||||
'href' => String,
|
||||
'name' => String,
|
||||
'type' => String
|
||||
},
|
||||
'href' => String,
|
||||
'Link' => {
|
||||
'href' => String,
|
||||
'name' => String,
|
||||
'rel' => String,
|
||||
'type' => String
|
||||
},
|
||||
'Property' => {
|
||||
'LicensingCost' => String
|
||||
},
|
||||
'type' => String,
|
||||
}
|
||||
|
||||
tests('success') do
|
||||
|
||||
tests("#get_catalog").formats(@catalog_format) do
|
||||
TerremarkEcloud[:compute].get_catalog(TerremarkEcloud::Compute.preferred_vdc['catalog_uri']).body
|
||||
TerremarkEcloud[:compute].get_catalog(TerremarkEcloud::Compute.preferred_catalog['href']).body
|
||||
end
|
||||
|
||||
tests("#get_catalog_item").formats(@catalog_item_format) do
|
||||
TerremarkEcloud[:compute].get_catalog_item(TerremarkEcloud::Compute.preferred_catalog_item['uri']).body
|
||||
TerremarkEcloud[:compute].get_catalog_item(TerremarkEcloud::Compute.preferred_catalog_item['href']).body
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -11,51 +11,35 @@ class TerremarkEcloud
|
|||
end
|
||||
|
||||
def self.preferred_vdc
|
||||
@preferred_vdc ||= TerremarkEcloud[:compute].get_vdc(vdc_from_list(TerremarkEcloud[:compute].get_organization.body['vdcs'])['uri']).body
|
||||
@preferred_vdc ||= begin
|
||||
href = vdc_from_list(TerremarkEcloud[:compute].get_organization.body['Link'])['href']
|
||||
TerremarkEcloud[:compute].get_vdc(href).body
|
||||
end
|
||||
end
|
||||
|
||||
def self.preferred_catalog
|
||||
@preferred_catalog ||= begin
|
||||
catalog_href = preferred_vdc['Link'].detect {|link| link['type'] == 'application/vnd.vmware.vcloud.catalog+xml' }['href']
|
||||
TerremarkEcloud[:compute].get_catalog(catalog_href).body
|
||||
end
|
||||
end
|
||||
|
||||
def self.preferred_catalog_item
|
||||
return @preferred_catalog_item if @preferred_catalog_item
|
||||
|
||||
catalog = TerremarkEcloud[:compute].get_catalog(preferred_vdc['catalog_uri']).body
|
||||
catalog_item = catalog['catalogItems'].detect do |item|
|
||||
item['name'] == 'Ubuntu Server 10.04 x32'
|
||||
@preferred_catalog_item ||= begin
|
||||
catalog_item = preferred_catalog['CatalogItems'].detect do |item|
|
||||
item['name'] == 'Ubuntu Server 10.04 x32'
|
||||
end
|
||||
TerremarkEcloud[:compute].get_catalog_item(catalog_item['href']).body
|
||||
end
|
||||
|
||||
@preferred_catalog_item = TerremarkEcloud[:compute].get_catalog_item(catalog_item['uri']).body
|
||||
end
|
||||
|
||||
def self.preferred_network
|
||||
return @preferred_network if @preferred_network
|
||||
|
||||
preferred_vdc['networks'].detect do |network|
|
||||
fetched_network = TerremarkEcloud[:compute].get_network(network['uri']).body
|
||||
network_extensions_uri = fetched_network['extensions_uri']
|
||||
if TerremarkEcloud[:compute].get_network_extensions(network_extensions_uri).body['type'] == 'DMZ'
|
||||
return @preferred_network = fetched_network
|
||||
end
|
||||
@preferred_network ||= begin
|
||||
network_href = preferred_vdc['AvailableNetworks'].first['href']
|
||||
TerremarkEcloud[:compute].get_network(network_href).body
|
||||
end
|
||||
end
|
||||
|
||||
def self.create_vm!(options = {})
|
||||
data = TerremarkEcloud[:compute].instantiate_vm_template({
|
||||
'vdc_uri' => preferred_vdc['uri'],
|
||||
'catalog_item_uri' => preferred_catalog_item['uri'],
|
||||
'network_uri' => preferred_network['uri'],
|
||||
'name' => options['name'] || "fogtest-#{rand(99999)}",
|
||||
'row' => options['row'] || 'fogtest',
|
||||
'group' => options['group'] || 'fogtest'
|
||||
}).body
|
||||
|
||||
if options[:wait_for_powered_off]
|
||||
Fog.wait_for(600, 10) do
|
||||
TerremarkEcloud[:compute].get_vm(data['uri']).body['status'] == 'powered_off'
|
||||
end
|
||||
end
|
||||
|
||||
data
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,38 +1,29 @@
|
|||
Shindo.tests('TerremarkEcloud::Compute | network requests', ['terremark_ecloud']) do
|
||||
|
||||
@network_format = {
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'extensions_ips_uri' => String,
|
||||
'extensions_uri' => String,
|
||||
'features' => { 'FenceMode' => String },
|
||||
'configuration' => {
|
||||
'netmask' => String,
|
||||
'gateway' => String
|
||||
}
|
||||
}
|
||||
|
||||
@network_extensions_format = {
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'friendlyName' => String,
|
||||
'type' => String,
|
||||
'rnatAddress' => String,
|
||||
'gatewayAddress' => String,
|
||||
'broadcastAddress' => String,
|
||||
'address' => String
|
||||
'Configuration' => {
|
||||
'Gateway' => String,
|
||||
'Netmask' => String
|
||||
},
|
||||
'Features' => {
|
||||
'FenceMode' => String
|
||||
},
|
||||
'href' => String,
|
||||
'Link' => {
|
||||
'href' => String,
|
||||
'name' => String,
|
||||
'rel' => String,
|
||||
'type' => String
|
||||
},
|
||||
'name' => String
|
||||
}
|
||||
|
||||
tests('success') do
|
||||
|
||||
tests("#get_network").formats(@network_format) do
|
||||
TerremarkEcloud[:compute].get_network(TerremarkEcloud::Compute.preferred_network['uri']).body
|
||||
TerremarkEcloud[:compute].get_network(TerremarkEcloud::Compute.preferred_network['href']).body
|
||||
end
|
||||
|
||||
tests("#get_network_extensions").formats(@network_extensions_format) do
|
||||
network_extensions_uri = TerremarkEcloud::Compute.preferred_network['extensions_uri']
|
||||
TerremarkEcloud[:compute].get_network_extensions(network_extensions_uri).body
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,16 +1,14 @@
|
|||
Shindo.tests('TerremarkEcloud::Compute | organization requests', ['terremark_ecloud']) do
|
||||
|
||||
@organization_format = {
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'vdcs' => [{
|
||||
'name' => String,
|
||||
'uri' => String
|
||||
}],
|
||||
'catalog_uri' => String,
|
||||
'tasksList_uri' => String,
|
||||
'keysList_uri' => String,
|
||||
'tagsList_uri' => String
|
||||
'name' => String,
|
||||
'href' => String,
|
||||
'Link' => [{
|
||||
'href' => String,
|
||||
'name' => String,
|
||||
'rel' => String,
|
||||
'type' => String
|
||||
}],
|
||||
}
|
||||
|
||||
tests('success') do
|
||||
|
|
|
|||
|
|
@ -1,58 +0,0 @@
|
|||
Shindo.tests('TerremarkEcloud::Compute | task requests', ['terremark_ecloud']) do
|
||||
|
||||
@get_task_queued_format = {
|
||||
'uri' => String,
|
||||
'status' => String,
|
||||
'startTime' => Time,
|
||||
'endTime' => NilClass,
|
||||
'owner' => {
|
||||
'uri' => String,
|
||||
'type' => String,
|
||||
'name' => String
|
||||
},
|
||||
'result' => {}
|
||||
}
|
||||
|
||||
@get_task_format = {
|
||||
'uri' => String,
|
||||
'status' => String,
|
||||
'startTime' => Time,
|
||||
'endTime' => Time,
|
||||
'owner' => {
|
||||
'uri' => String,
|
||||
'type' => String,
|
||||
'name' => String
|
||||
},
|
||||
'result' => {
|
||||
'uri' => String,
|
||||
'type' => String,
|
||||
'name' => String
|
||||
}
|
||||
}
|
||||
|
||||
tests('success') do
|
||||
|
||||
# this is heavy but it works to start
|
||||
|
||||
@vm_uri = TerremarkEcloud::Compute.create_vm!(:wait_for_powered_off => true)['uri']
|
||||
|
||||
# fragile
|
||||
tests("#get_task when queued").formats(@get_task_queued_format) do
|
||||
@task_uri = TerremarkEcloud[:compute].power_on_vm(@vm_uri)['task_uri']
|
||||
|
||||
TerremarkEcloud[:compute].get_task(@task_uri).body
|
||||
end
|
||||
|
||||
Fog.wait_for do
|
||||
TerremarkEcloud[:compute].get_task(@task_uri).body['status'] == 'success'
|
||||
end
|
||||
|
||||
tests("#get_task").formats(@get_task_format) do
|
||||
TerremarkEcloud[:compute].get_task(@task_uri).body
|
||||
end
|
||||
|
||||
TerremarkEcloud[:compute].delete_vm(@vm_uri)
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -1,40 +1,57 @@
|
|||
Shindo.tests('TerremarkEcloud::Compute | vdc requests', ['terremark_ecloud']) do
|
||||
|
||||
@vdc_format = {
|
||||
'AvailableNetworks' => [{
|
||||
'href' => String,
|
||||
'name' => String,
|
||||
'type' => String
|
||||
}],
|
||||
'ComputeCapacity' => {
|
||||
'Cpu' => {
|
||||
'Allocated' => Integer,
|
||||
'Units' => String
|
||||
},
|
||||
'DeployedVmsQuota' => {
|
||||
'Limit' => Integer,
|
||||
'Used' => Integer
|
||||
},
|
||||
'InstantiatedVmsQuota' => {
|
||||
'Limit' => Integer,
|
||||
'Used' => Integer
|
||||
},
|
||||
'Memory' => {
|
||||
'Allocated' => Integer,
|
||||
'Units' => String
|
||||
}
|
||||
},
|
||||
'Description' => Fog::Nullable::String,
|
||||
'href' => String,
|
||||
'Link' => [{
|
||||
'href' => String,
|
||||
'name' => String,
|
||||
'rel' => String,
|
||||
'type' => String
|
||||
}],
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'catalog_uri' => String,
|
||||
'publicIpsList_uri' => String,
|
||||
'internetServicesList_uri' => String,
|
||||
'firewallAclsList_uri' => String,
|
||||
'trustedNetworkGroupsList_uri' => String,
|
||||
'storageCapacity' => {
|
||||
'allocated' => Integer,
|
||||
'used' => Integer
|
||||
},
|
||||
'cpuCapacity' => {
|
||||
'allocated' => Integer
|
||||
},
|
||||
'memoryCapacity' => {
|
||||
'allocated' => Integer
|
||||
},
|
||||
'networks' => [{
|
||||
'name' => String,
|
||||
'uri' => String
|
||||
}],
|
||||
'vms' => [{
|
||||
'name' => String,
|
||||
'uri' => String
|
||||
}]
|
||||
'ResourceEntities' => [{
|
||||
'href' => String,
|
||||
'name' => String,
|
||||
'type' => String
|
||||
}],
|
||||
'StorageCapacity' => {
|
||||
'Allocated' => Integer,
|
||||
'Units' => String,
|
||||
'Used' => Integer
|
||||
}
|
||||
}
|
||||
|
||||
tests('success') do
|
||||
|
||||
tests("#get_vdc").formats(@vdc_format) do
|
||||
vdc = TerremarkEcloud::Compute.preferred_vdc
|
||||
vdc_uri = vdc['uri']
|
||||
vdc_href = vdc['href']
|
||||
|
||||
TerremarkEcloud[:compute].get_vdc(vdc_uri).body
|
||||
TerremarkEcloud[:compute].get_vdc(vdc_href).body
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,114 +0,0 @@
|
|||
Shindo.tests('TerremarkEcloud::Compute | vm requests', ['terremark_ecloud']) do
|
||||
|
||||
@instantiate_vm_template_format = {
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'status' => String
|
||||
}
|
||||
|
||||
@get_vm_deploying_format = {
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'status' => String,
|
||||
'storage_size' => Integer,
|
||||
'vdc_uri' => String,
|
||||
'extension_uri' => String,
|
||||
'network_connections' => [],
|
||||
'disks' => []
|
||||
}
|
||||
|
||||
@get_vm_format = {
|
||||
'name' => String,
|
||||
'uri' => String,
|
||||
'status' => String,
|
||||
'storage_size' => Integer,
|
||||
'vdc_uri' => String,
|
||||
'extension_uri' => String,
|
||||
'network_connections' => [{
|
||||
'name' => String,
|
||||
'ip_address' => String
|
||||
}],
|
||||
'cpus' => Integer,
|
||||
'memory' => Integer,
|
||||
'disks' => [{
|
||||
'id' => Integer,
|
||||
'size' => Integer
|
||||
}]
|
||||
}
|
||||
|
||||
@power_on_vm_format = {
|
||||
'task_uri' => String
|
||||
}
|
||||
|
||||
@power_reset_vm_format = {
|
||||
'task_uri' => String
|
||||
}
|
||||
|
||||
@power_off_vm_format = {
|
||||
'task_uri' => String
|
||||
}
|
||||
|
||||
@shutdown_vm_format = {
|
||||
'task_uri' => String
|
||||
}
|
||||
|
||||
@delete_vm_format = {
|
||||
'task_uri' => String
|
||||
}
|
||||
|
||||
tests('success') do
|
||||
|
||||
tests("#instantiate_vm_template").formats(@instantiate_vm_template_format) do
|
||||
TerremarkEcloud::Compute.create_vm!.tap do |data|
|
||||
@vm_uri = data['uri']
|
||||
end
|
||||
end
|
||||
|
||||
tests("#get_vm when deploying").formats(@get_vm_deploying_format) do
|
||||
TerremarkEcloud[:compute].get_vm(@vm_uri).body
|
||||
end
|
||||
|
||||
# to be replaced with server.wait_for
|
||||
Fog.wait_for(600, 10) do
|
||||
TerremarkEcloud[:compute].get_vm(@vm_uri).body['status'] == 'powered_off'
|
||||
end
|
||||
|
||||
tests("#get_vm").formats(@get_vm_format) do
|
||||
TerremarkEcloud[:compute].get_vm(@vm_uri).body
|
||||
end
|
||||
|
||||
tests("#power_on_vm").formats(@power_on_vm_format) do
|
||||
TerremarkEcloud[:compute].power_on_vm(@vm_uri).tap do |data|
|
||||
@power_task_uri = data['task_uri']
|
||||
end
|
||||
end
|
||||
|
||||
Fog.wait_for { TerremarkEcloud[:compute].get_task(@power_task_uri).body['status'] == 'success' }
|
||||
|
||||
tests("#power_off_vm").formats(@power_off_vm_format) do
|
||||
TerremarkEcloud[:compute].power_off_vm(@vm_uri).tap do |data|
|
||||
@power_task_uri = data['task_uri']
|
||||
end
|
||||
end
|
||||
|
||||
Fog.wait_for { TerremarkEcloud[:compute].get_task(@power_task_uri).body['status'] == 'success' }
|
||||
|
||||
@power_task_uri = TerremarkEcloud[:compute].power_on_vm(@vm_uri)['task_uri']
|
||||
Fog.wait_for { TerremarkEcloud[:compute].get_task(@power_task_uri).body['status'] == 'success' }
|
||||
|
||||
tests("#shutdown_vm").formats(@shutdown_vm_format) do
|
||||
pending # need to wait for the VM to boot up
|
||||
TerremarkEcloud[:compute].shutdown_vm(@vm_uri).tap do |data|
|
||||
@power_task_uri = data['task_uri']
|
||||
end
|
||||
end
|
||||
|
||||
#Fog.wait_for { TerremarkEcloud[:compute].get_task(@power_task_uri).body['status'] == 'success' }
|
||||
|
||||
tests("#delete_vm").formats(@delete_vm_format) do
|
||||
TerremarkEcloud[:compute].delete_vm(@vm_uri)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue