ruby_vcloud_sdk 0.4.8 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +296 -0
  3. data/lib/ruby_vcloud_sdk.rb +0 -4
  4. data/lib/ruby_vcloud_sdk/catalog.rb +377 -0
  5. data/lib/ruby_vcloud_sdk/catalog_item.rb +26 -0
  6. data/lib/ruby_vcloud_sdk/client.rb +25 -882
  7. data/lib/ruby_vcloud_sdk/config.rb +1 -7
  8. data/lib/ruby_vcloud_sdk/connection/connection.rb +114 -54
  9. data/lib/ruby_vcloud_sdk/cpu.rb +11 -0
  10. data/lib/ruby_vcloud_sdk/disk.rb +55 -0
  11. data/lib/ruby_vcloud_sdk/edge_gateway.rb +32 -0
  12. data/lib/ruby_vcloud_sdk/infrastructure.rb +135 -0
  13. data/lib/ruby_vcloud_sdk/ip_ranges.rb +95 -0
  14. data/lib/ruby_vcloud_sdk/memory.rb +11 -0
  15. data/lib/ruby_vcloud_sdk/network.rb +32 -0
  16. data/lib/ruby_vcloud_sdk/powerable.rb +78 -0
  17. data/lib/ruby_vcloud_sdk/resources.rb +13 -0
  18. data/lib/ruby_vcloud_sdk/session.rb +46 -0
  19. data/lib/ruby_vcloud_sdk/vapp.rb +122 -0
  20. data/lib/ruby_vcloud_sdk/vdc.rb +210 -0
  21. data/lib/ruby_vcloud_sdk/vdc_storage_profile.rb +23 -0
  22. data/lib/ruby_vcloud_sdk/version.rb +1 -1
  23. data/lib/ruby_vcloud_sdk/vm.rb +132 -0
  24. data/lib/ruby_vcloud_sdk/xml/constants.rb +6 -4
  25. data/lib/ruby_vcloud_sdk/xml/wrapper.rb +109 -30
  26. data/lib/ruby_vcloud_sdk/xml/wrapper_classes.rb +45 -2
  27. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/admin_catalog.rb +13 -4
  28. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/allocated_ip_addresses.rb +9 -0
  29. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/catalog_item.rb +6 -14
  30. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/disk.rb +24 -14
  31. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/disk_attach_or_detach_params.rb +0 -2
  32. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/disk_create_params.rb +1 -3
  33. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/edge_gateway.rb +13 -0
  34. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/gateway_interface.rb +22 -0
  35. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/hard_disk_item_wrapper.rb +4 -4
  36. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/ip_address.rb +10 -0
  37. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/ip_range.rb +13 -0
  38. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/ip_ranges.rb +9 -0
  39. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/ip_scope.rb +6 -32
  40. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/item.rb +1 -7
  41. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/link.rb +14 -0
  42. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/media.rb +4 -20
  43. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/media_insert_or_eject_params.rb +1 -3
  44. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/network_connection_section.rb +0 -4
  45. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/nic_item_wrapper.rb +0 -2
  46. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/org.rb +44 -0
  47. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/org_vdc_network.rb +11 -3
  48. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/query_result_records.rb +14 -0
  49. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/recompose_vapp_params.rb +42 -0
  50. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/session.rb +5 -5
  51. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/supported_versions.rb +19 -0
  52. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/task.rb +1 -1
  53. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/upload_vapp_template_params.rb +2 -4
  54. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/vapp.rb +13 -22
  55. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/vapp_template.rb +0 -2
  56. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/vcloud.rb +5 -3
  57. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/vdc.rb +72 -15
  58. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/virtual_hardware_section.rb +8 -6
  59. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/vm.rb +29 -25
  60. data/lib/ruby_vcloud_sdk/xml/wrapper_classes/vms.rb +12 -0
  61. data/lib/ruby_vcloud_sdk/xml/xml_templates/AdminCatalog.xml +6 -1
  62. data/lib/ruby_vcloud_sdk/xml/xml_templates/RecomposeVAppParams.xml +16 -1
  63. metadata +116 -233
  64. data/README +0 -1
  65. data/Rakefile +0 -50
  66. data/lib/ruby_vcloud_sdk/util.rb +0 -21
  67. data/spec/assets/admin_org_response.xml +0 -75
  68. data/spec/assets/catalog_add_item_response.xml +0 -8
  69. data/spec/assets/catalog_add_vapp_request.xml +0 -5
  70. data/spec/assets/catalog_item_added_response.xml +0 -19
  71. data/spec/assets/catalog_response.xml +0 -19
  72. data/spec/assets/existing_media_busy_response.xml +0 -19
  73. data/spec/assets/existing_media_catalog_item.xml +0 -8
  74. data/spec/assets/existing_media_delete_task_done.xml +0 -6
  75. data/spec/assets/existing_media_done_response.xml +0 -11
  76. data/spec/assets/existing_vapp_resolver_response.xml +0 -3
  77. data/spec/assets/existing_vapp_template_catalog_resolver_response.xml +0 -3
  78. data/spec/assets/existing_vapp_template_instantiate_response.xml +0 -20
  79. data/spec/assets/existing_vapp_template_instantiate_task_error_response.xml +0 -7
  80. data/spec/assets/existing_vapp_template_instantiate_task_start_response.xml +0 -7
  81. data/spec/assets/existing_vapp_template_instantiate_task_success_response.xml +0 -7
  82. data/spec/assets/existing_vapp_template_item_response.xml +0 -8
  83. data/spec/assets/existing_vapp_template_ready_response.xml +0 -79
  84. data/spec/assets/finalize_upload_task_done_response.xml +0 -7
  85. data/spec/assets/finalize_upload_task_response.xml +0 -7
  86. data/spec/assets/indy_disk_attach_request.xml +0 -3
  87. data/spec/assets/indy_disk_attach_task.xml +0 -6
  88. data/spec/assets/indy_disk_attach_task_error.xml +0 -6
  89. data/spec/assets/indy_disk_create_error.xml +0 -1
  90. data/spec/assets/indy_disk_create_request.xml +0 -4
  91. data/spec/assets/indy_disk_create_response.xml +0 -19
  92. data/spec/assets/indy_disk_delete_task.xml +0 -6
  93. data/spec/assets/indy_disk_detach_request.xml +0 -3
  94. data/spec/assets/indy_disk_detach_task.xml +0 -6
  95. data/spec/assets/indy_disk_response.xml +0 -11
  96. data/spec/assets/instantiated_suspended_vapp_response.xml +0 -209
  97. data/spec/assets/instantiated_vapp_delelete_done_task.xml +0 -5
  98. data/spec/assets/instantiated_vapp_delelete_running_task.xml +0 -6
  99. data/spec/assets/instantiated_vapp_network_config_add_network_request.xml +0 -36
  100. data/spec/assets/instantiated_vapp_network_config_modify_network_task_success.xml +0 -6
  101. data/spec/assets/instantiated_vapp_network_config_remove_network_request.xml +0 -6
  102. data/spec/assets/instantiated_vapp_network_config_section_response.xml +0 -17
  103. data/spec/assets/instantiated_vapp_off_response.xml +0 -206
  104. data/spec/assets/instantiated_vapp_on_response.xml +0 -205
  105. data/spec/assets/instantiated_vapp_power_task_running.xml +0 -6
  106. data/spec/assets/instantiated_vapp_power_task_success.xml +0 -6
  107. data/spec/assets/instantiated_vapp_response.xml +0 -205
  108. data/spec/assets/instantiated_vm_change_task_running.xml +0 -6
  109. data/spec/assets/instantiated_vm_change_task_success.xml +0 -6
  110. data/spec/assets/instantiated_vm_cpu_response.xml +0 -11
  111. data/spec/assets/instantiated_vm_insert_media_task_done.xml +0 -6
  112. data/spec/assets/instantiated_vm_memory_response.xml +0 -11
  113. data/spec/assets/instantiated_vm_modify_task_running.xml +0 -6
  114. data/spec/assets/instantiated_vm_modify_task_success.xml +0 -5
  115. data/spec/assets/instantiated_vm_network_section_response.xml +0 -11
  116. data/spec/assets/instantiated_vm_response.xml +0 -149
  117. data/spec/assets/media_add_to_catalog_request.xml +0 -5
  118. data/spec/assets/media_add_to_catalog_response.xml +0 -8
  119. data/spec/assets/media_delete_task_done.xml +0 -6
  120. data/spec/assets/media_upload_pending_response.xml +0 -13
  121. data/spec/assets/media_upload_request.xml +0 -2
  122. data/spec/assets/metadata_set_request.xml +0 -3
  123. data/spec/assets/metadata_set_task_done.xml +0 -6
  124. data/spec/assets/org_network_response.xml +0 -22
  125. data/spec/assets/reconfigure_vm_request.xml +0 -133
  126. data/spec/assets/reconfigure_vm_task.xml +0 -8
  127. data/spec/assets/session.xml +0 -7
  128. data/spec/assets/test-config.yml +0 -38
  129. data/spec/assets/undeploy_params.xml +0 -1
  130. data/spec/assets/vapp_template_catalog_resolver_response.xml +0 -3
  131. data/spec/assets/vapp_template_delelete_done_task.xml +0 -5
  132. data/spec/assets/vapp_template_delelete_running_task.xml +0 -6
  133. data/spec/assets/vapp_template_instantiate_request.xml +0 -8
  134. data/spec/assets/vapp_template_instantiate_with_locality_request.xml +0 -14
  135. data/spec/assets/vapp_template_no_disk_response.xml +0 -27
  136. data/spec/assets/vapp_template_ready_response.xml +0 -79
  137. data/spec/assets/vapp_template_upload_complete.xml +0 -28
  138. data/spec/assets/vapp_template_upload_failed.xml +0 -28
  139. data/spec/assets/vapp_template_upload_request.xml +0 -4
  140. data/spec/assets/vapp_template_upload_response.xml +0 -25
  141. data/spec/assets/vcloud_response.xml +0 -56
  142. data/spec/assets/vdc_response.xml +0 -57
  143. data/spec/spec_helper.rb +0 -107
  144. data/spec/unit/client_response.rb +0 -700
  145. data/spec/unit/client_spec.rb +0 -1152
@@ -1,6 +1,5 @@
1
1
  module VCloudSdk
2
2
  module Xml
3
-
4
3
  class MediaInsertOrEjectParams < Wrapper
5
4
  def media_href=(value)
6
5
  media["href"] = value
@@ -9,9 +8,8 @@ module VCloudSdk
9
8
  private
10
9
 
11
10
  def media
12
- get_nodes("Media", nil, true).first
11
+ get_nodes("Media", nil, true).first
13
12
  end
14
13
  end
15
-
16
14
  end
17
15
  end
@@ -7,10 +7,6 @@ module VCloudSdk
7
7
  link_node.node.before(item.node)
8
8
  end
9
9
 
10
- def edit_link
11
- get_nodes("Link", {"rel" => "edit"}, true).first
12
- end
13
-
14
10
  def network_connections
15
11
  get_nodes("NetworkConnection")
16
12
  end
@@ -1,5 +1,3 @@
1
- require "item"
2
-
3
1
  module VCloudSdk
4
2
  module Xml
5
3
 
@@ -0,0 +1,44 @@
1
+ module VCloudSdk
2
+ module Xml
3
+ class Org < Wrapper
4
+ def vdc_link(name)
5
+ get_nodes(XML_TYPE[:LINK],
6
+ { type: MEDIA_TYPE[:VDC],
7
+ name: name },
8
+ true).first
9
+ end
10
+
11
+ def catalogs
12
+ get_nodes(XML_TYPE[:LINK],
13
+ { type: MEDIA_TYPE[:CATALOG] },
14
+ true)
15
+ end
16
+
17
+ def catalog_link(name)
18
+ get_nodes(XML_TYPE[:LINK],
19
+ { type: MEDIA_TYPE[:CATALOG],
20
+ name: name },
21
+ true).first
22
+ end
23
+
24
+ def networks
25
+ get_nodes(XML_TYPE[:LINK],
26
+ { type: MEDIA_TYPE[:ORG_NETWORK] },
27
+ true)
28
+ end
29
+
30
+ def network(name)
31
+ get_nodes(XML_TYPE[:LINK],
32
+ { type: MEDIA_TYPE[:ORG_NETWORK],
33
+ name: name },
34
+ true).first
35
+ end
36
+
37
+ def disks
38
+ get_nodes(XML_TYPE[:LINK],
39
+ { type: MEDIA_TYPE[:DISK] },
40
+ true)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,11 +1,19 @@
1
1
  module VCloudSdk
2
2
  module Xml
3
-
4
3
  class OrgVdcNetwork < Wrapper
5
4
  def ip_scope
6
- get_nodes("IpScope").first
5
+ get_nodes(:IpScope).first
6
+ end
7
+
8
+ def ip_ranges
9
+ get_nodes(:IpRanges).first
7
10
  end
8
- end
9
11
 
12
+ def allocated_addresses_link
13
+ get_nodes(XML_TYPE[:LINK],
14
+ { type: MEDIA_TYPE[:ALLOCATED_NETWORK_IPS] },
15
+ true).first
16
+ end
17
+ end
10
18
  end
11
19
  end
@@ -0,0 +1,14 @@
1
+ module VCloudSdk
2
+ module Xml
3
+ class QueryResultRecords < Wrapper
4
+ # Reference: http://pubs.vmware.com/vcd-55/index.jsp?topic=%2Fcom.vmware.vcloud.api.reference.doc_55%2Fdoc%2Ftypes%2FQueryResultOrgVdcStorageProfileRecordType.html
5
+ def org_vdc_storage_profile_records
6
+ get_nodes("OrgVdcStorageProfileRecord")
7
+ end
8
+
9
+ def edge_gateway_records
10
+ get_nodes("EdgeGatewayRecord")
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,42 @@
1
+ module VCloudSdk
2
+ module Xml
3
+ class RecomposeVAppParams < Wrapper
4
+ def description
5
+ get_nodes("Description").first
6
+ end
7
+
8
+ def description=(desc)
9
+ description.content = desc
10
+ end
11
+
12
+ def all_eulas_accepted=(value)
13
+ eulas_node = get_nodes("AllEULAsAccepted").first
14
+ eulas_node.content = value
15
+ end
16
+
17
+ def add_source_item(entity_to_add_href)
18
+ return unless entity_to_add_href
19
+
20
+ node_sourced_item = create_child("SourcedItem",
21
+ namespace.prefix,
22
+ namespace.href)
23
+ node_source = add_child("Source",
24
+ namespace.prefix,
25
+ namespace.href,
26
+ node_sourced_item)
27
+ node_source["href"] = entity_to_add_href
28
+
29
+ get_nodes("AllEULAsAccepted").first.node.before(node_sourced_item)
30
+ end
31
+
32
+ def add_delete_item(entity_to_delete_href)
33
+ return unless entity_to_delete_href
34
+
35
+ node_delete_item = create_child("DeleteItem")
36
+ node_delete_item["href"] = entity_to_delete_href
37
+
38
+ get_nodes("AllEULAsAccepted").first.node.after(node_delete_item)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -2,14 +2,14 @@ module VCloudSdk
2
2
  module Xml
3
3
 
4
4
  class Session < Wrapper
5
- def admin_root
6
- get_nodes("Link", {"type" =>
7
- VCloudSdk::Xml::ADMIN_MEDIA_TYPE[:VCLOUD]}).first
5
+ def organization
6
+ get_nodes(XML_TYPE[:LINK],
7
+ { type: VCloudSdk::Xml::MEDIA_TYPE[:ORGANIZATION] }).first
8
8
  end
9
9
 
10
10
  def entity_resolver
11
- get_nodes("Link", {"type" =>
12
- VCloudSdk::Xml::MEDIA_TYPE[:ENTITY]}).first
11
+ get_nodes(XML_TYPE[:LINK],
12
+ { type: VCloudSdk::Xml::MEDIA_TYPE[:ENTITY] }).first
13
13
  end
14
14
  end
15
15
 
@@ -0,0 +1,19 @@
1
+ module VCloudSdk
2
+ module Xml
3
+
4
+ class SupportedVersions < Wrapper
5
+ def login_url
6
+ ns = namespace.href # Typically it's 'http://www.vmware.com/vcloud/versions'
7
+ get_nodes('VersionInfo', nil, false, ns).each do |node|
8
+ if node.get_nodes('Version', nil, false, ns).first.content \
9
+ == VCloudSdk::Client::VCLOUD_VERSION_NUMBER
10
+ return node.get_nodes("LoginUrl", nil, false, ns).first
11
+ end
12
+ end
13
+
14
+ nil
15
+ end
16
+ end
17
+
18
+ end
19
+ end
@@ -3,7 +3,7 @@ module VCloudSdk
3
3
 
4
4
  class Task < Wrapper
5
5
  def cancel_link
6
- get_nodes("Link", {"rel" => "task:cancel"}).first
6
+ get_nodes(XML_TYPE[:LINK], { rel: "task:cancel" }).first
7
7
  end
8
8
 
9
9
  def status
@@ -1,11 +1,9 @@
1
1
  module VCloudSdk
2
2
  module Xml
3
-
4
3
  class UploadVAppTemplateParams < Wrapper
5
- def name=(name)
6
- @root["name"] = name
4
+ def storage_profile=(storage_profile)
5
+ add_child(storage_profile) unless storage_profile.nil?
7
6
  end
8
7
  end
9
-
10
8
  end
11
9
  end
@@ -1,6 +1,5 @@
1
1
  module VCloudSdk
2
2
  module Xml
3
-
4
3
  class VApp < Wrapper
5
4
  def description
6
5
  get_nodes("Description").first.content
@@ -10,36 +9,28 @@ module VCloudSdk
10
9
  get_nodes("NetworkConfigSection").first
11
10
  end
12
11
 
13
- def power_on_link
14
- get_nodes("Link", {"rel" => "power:powerOn"}, true).first
15
- end
16
-
17
- def power_off_link
18
- get_nodes("Link", {"rel" => "power:powerOff"}, true).first
19
- end
20
-
21
12
  def reboot_link
22
13
  get_nodes("Link", {"rel" => "power:reboot"}, true).first
23
14
  end
24
15
 
25
- def remove_link
26
- get_nodes("Link", {"rel" => "remove"}, true).first
27
- end
28
-
29
- def running_tasks
30
- get_nodes("Task", {"status" => "running"})
16
+ def tasks
17
+ get_nodes(XML_TYPE[:TASK])
31
18
  end
32
19
 
33
- def tasks
34
- get_nodes("Task")
20
+ def discard_state
21
+ get_nodes("Link", {"rel" => "discardState"}, true).first
35
22
  end
36
23
 
37
- def undeploy_link
38
- get_nodes("Link", {"rel" => "undeploy"}, true).first
24
+ def recompose_vapp_link
25
+ link = get_nodes(XML_TYPE[:LINK],
26
+ { rel: "recompose" },
27
+ true).first
39
28
  end
40
29
 
41
- def discard_state
42
- get_nodes("Link", {"rel" => "discardState"}, true).first
30
+ def vdc_link
31
+ get_nodes(XML_TYPE[:LINK],
32
+ { type: MEDIA_TYPE[:VDC] },
33
+ true).first
43
34
  end
44
35
 
45
36
  def vms
@@ -47,7 +38,7 @@ module VCloudSdk
47
38
  end
48
39
 
49
40
  def vm(name)
50
- get_nodes("Vm", {"name" => name}).first
41
+ get_nodes("Vm", name: name).first
51
42
  end
52
43
  end
53
44
 
@@ -1,5 +1,3 @@
1
- require "vapp"
2
-
3
1
  module VCloudSdk
4
2
  module Xml
5
3
 
@@ -3,11 +3,13 @@ module VCloudSdk
3
3
 
4
4
  class VCloud < Wrapper
5
5
  def organizations
6
- get_nodes("OrganizationReference")
6
+ get_nodes('OrganizationReference')
7
7
  end
8
8
 
9
- def organization(name)
10
- get_nodes("OrganizationReference", {"name" => name}).first
9
+ def organization
10
+ # TODO: check and make sure that
11
+ # there is only one "OrganizationReference" node in response
12
+ get_nodes('OrganizationReference').first
11
13
  end
12
14
  end
13
15
 
@@ -1,54 +1,111 @@
1
1
  module VCloudSdk
2
2
  module Xml
3
-
4
3
  class Vdc < Wrapper
5
4
  def add_disk_link
6
- get_nodes("Link", {"type"=>MEDIA_TYPE[:DISK_CREATE_PARAMS]}).first
5
+ get_nodes(XML_TYPE[:LINK],
6
+ type: MEDIA_TYPE[:DISK_CREATE_PARAMS])
7
+ .first
7
8
  end
8
9
 
9
10
  def disks(name = nil)
10
11
  if name.nil?
11
- get_nodes("ResourceEntity", {"type"=>MEDIA_TYPE[:DISK]})
12
+ get_nodes("ResourceEntity",
13
+ type: MEDIA_TYPE[:DISK])
12
14
  else
13
15
  get_nodes("ResourceEntity",
14
- {"type"=>MEDIA_TYPE[:DISK], "name"=>name})
16
+ type: MEDIA_TYPE[:DISK], name: name)
17
+ .first
15
18
  end
16
19
  end
17
20
 
18
21
  def instantiate_vapp_template_link
19
- get_nodes("Link",
20
- {"type"=>MEDIA_TYPE[:INSTANTIATE_VAPP_TEMPLATE_PARAMS]}).first
22
+ get_nodes(XML_TYPE[:LINK],
23
+ type: MEDIA_TYPE[:INSTANTIATE_VAPP_TEMPLATE_PARAMS])
24
+ .first
21
25
  end
22
26
 
23
27
  def upload_link
24
- get_nodes("Link",
25
- {"type"=>MEDIA_TYPE[:UPLOAD_VAPP_TEMPLATE_PARAMS]}).first
28
+ get_nodes(XML_TYPE[:LINK],
29
+ type: MEDIA_TYPE[:UPLOAD_VAPP_TEMPLATE_PARAMS])
30
+ .first
26
31
  end
27
32
 
28
33
  def upload_media_link
29
- get_nodes("Link", {"type"=>MEDIA_TYPE[:MEDIA]}).first
34
+ get_nodes(XML_TYPE[:LINK],
35
+ type: MEDIA_TYPE[:MEDIA])
36
+ .first
37
+ end
38
+
39
+ def vapps
40
+ get_nodes(:ResourceEntity, type: MEDIA_TYPE[:VAPP])
41
+ end
42
+
43
+ def edge_gateways_link
44
+ get_nodes(XML_TYPE[:LINK],
45
+ rel: "edgeGateways")
46
+ .first
30
47
  end
31
48
 
32
49
  # vApp Template names are not unique so multiple ones can be returned.
33
50
  def get_vapp_templates(name)
34
51
  get_nodes("ResourceEntity",
35
- {"type"=>MEDIA_TYPE[:VAPP_TEMPLATE], "name"=>name})
52
+ type: MEDIA_TYPE[:VAPP_TEMPLATE], name: name)
36
53
  end
37
54
 
38
55
  def available_networks
39
- get_nodes("Network", {"type"=>MEDIA_TYPE[:NETWORK]})
56
+ get_nodes("Network",
57
+ type: MEDIA_TYPE[:NETWORK])
40
58
  end
41
59
 
42
60
  def available_network(name)
43
61
  get_nodes("Network",
44
- {"type"=>MEDIA_TYPE[:NETWORK], "name"=>name}).first
62
+ type: MEDIA_TYPE[:NETWORK], name: name)
63
+ .first
45
64
  end
46
65
 
47
66
  def storage_profiles
48
- get_nodes("VdcStorageProfile",
49
- {"type"=>MEDIA_TYPE[:VDC_STORAGE_PROFILE]})
67
+ get_nodes(:VdcStorageProfile, type: MEDIA_TYPE[:VDC_STORAGE_PROFILE])
50
68
  end
51
- end
52
69
 
70
+ def storage_profile(name)
71
+ get_nodes(:VdcStorageProfile,
72
+ type: MEDIA_TYPE[:VDC_STORAGE_PROFILE], name: name)
73
+ .first
74
+ end
75
+
76
+ def available_cpu_cores
77
+ cpu_resource = get_nodes("ComputeCapacity")
78
+ .first.get_nodes("Cpu").first
79
+ available_cpu_clock_speed = get_available_resource(cpu_resource)
80
+
81
+ # clock units can only be MHz or GHz
82
+ units = cpu_resource.get_nodes("Units").first.content
83
+ if units == "MHz"
84
+ available_cpu_clock_speed = available_cpu_clock_speed / 1000
85
+ end
86
+
87
+ # We assume 1 GHz is converted to 1 vCpu core
88
+ available_cpu_clock_speed
89
+ end
90
+
91
+ def available_memory_mb
92
+ memory_resource = get_nodes("ComputeCapacity")
93
+ .first.get_nodes("Memory").first
94
+ available_memory = get_available_resource(memory_resource)
95
+
96
+ # clock units can only be MB or GB
97
+ units = memory_resource.get_nodes("Units").first.content
98
+ available_memory = available_memory * 1024 if units == "GB"
99
+ available_memory
100
+ end
101
+
102
+ private
103
+
104
+ def get_available_resource(resource_node)
105
+ limited_resource = resource_node.get_nodes("Limit").first.content.to_i
106
+ return -1 if limited_resource == 0
107
+ limited_resource - resource_node.get_nodes("Used").first.content.to_i
108
+ end
109
+ end
53
110
  end
54
111
  end
@@ -1,6 +1,5 @@
1
1
  module VCloudSdk
2
2
  module Xml
3
-
4
3
  class VirtualHardwareSection < Wrapper
5
4
  def add_item(item)
6
5
  system_node = get_nodes("System", nil, true, OVF).first
@@ -8,8 +7,10 @@ module VCloudSdk
8
7
  end
9
8
 
10
9
  def edit_link
11
- get_nodes("Link", {"rel" => "edit",
12
- "type" => MEDIA_TYPE[:VIRTUAL_HARDWARE_SECTION]}, true).first
10
+ get_nodes(XML_TYPE[:LINK],
11
+ { rel: XML_TYPE[:EDIT],
12
+ type: MEDIA_TYPE[:VIRTUAL_HARDWARE_SECTION] },
13
+ true).first
13
14
  end
14
15
 
15
16
  def cpu
@@ -54,8 +55,10 @@ module VCloudSdk
54
55
  end
55
56
 
56
57
  def hard_disks
57
- items = hardware.find_all { |h| h.get_rasd_content(
58
- RASD_TYPES[:RESOURCE_TYPE]) == HARDWARE_TYPE[:HARD_DISK] }
58
+ items = hardware.select do |h|
59
+ h.get_rasd_content(
60
+ RASD_TYPES[:RESOURCE_TYPE]) == HARDWARE_TYPE[:HARD_DISK]
61
+ end
59
62
  items.map { |i| HardDiskItemWrapper.new(i) }
60
63
  end
61
64
 
@@ -63,6 +66,5 @@ module VCloudSdk
63
66
  get_nodes("Item", nil, false, OVF)
64
67
  end
65
68
  end
66
-
67
69
  end
68
70
  end