fog 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. data/.gitignore +2 -2
  2. data/README.md +9 -10
  3. data/Rakefile +15 -299
  4. data/changelog.txt +153 -0
  5. data/docs/about/contributing.markdown +1 -0
  6. data/docs/dns/index.markdown +1 -1
  7. data/docs/index.markdown +8 -3
  8. data/fog.gemspec +3 -3
  9. data/lib/fog.rb +0 -5
  10. data/lib/fog/aws/auto_scaling.rb +1 -1
  11. data/lib/fog/aws/cloud_watch.rb +1 -1
  12. data/lib/fog/aws/compute.rb +2 -1
  13. data/lib/fog/aws/dynamodb.rb +30 -64
  14. data/lib/fog/aws/elb.rb +1 -1
  15. data/lib/fog/aws/glacier.rb +1 -1
  16. data/lib/fog/aws/iam.rb +1 -0
  17. data/lib/fog/aws/models/auto_scaling/group.rb +1 -1
  18. data/lib/fog/aws/models/compute/server.rb +2 -0
  19. data/lib/fog/aws/models/compute/volume.rb +0 -1
  20. data/lib/fog/aws/models/iam/user.rb +1 -1
  21. data/lib/fog/aws/parsers/compute/describe_instances.rb +3 -1
  22. data/lib/fog/aws/parsers/compute/describe_reserved_instances_offerings.rb +1 -1
  23. data/lib/fog/aws/parsers/storage/delete_multiple_objects.rb +50 -0
  24. data/lib/fog/aws/rds.rb +2 -2
  25. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +3 -0
  26. data/lib/fog/aws/requests/compute/describe_reserved_instances_offerings.rb +11 -8
  27. data/lib/fog/aws/requests/compute/modify_volume_attribute.rb +51 -0
  28. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +1 -0
  29. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +172 -0
  30. data/lib/fog/aws/signaturev4.rb +1 -1
  31. data/lib/fog/aws/sqs.rb +1 -1
  32. data/lib/fog/aws/storage.rb +2 -0
  33. data/lib/fog/bluebox/requests/compute/create_block.rb +1 -3
  34. data/lib/fog/brightbox/compute.rb +239 -84
  35. data/lib/fog/brightbox/models/compute/account.rb +9 -3
  36. data/lib/fog/brightbox/models/compute/server.rb +2 -1
  37. data/lib/fog/brightbox/models/compute/servers.rb +33 -1
  38. data/lib/fog/brightbox/oauth2.rb +164 -0
  39. data/lib/fog/brightbox/requests/compute/activate_console_server.rb +9 -2
  40. data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +11 -2
  41. data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +11 -2
  42. data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +9 -11
  43. data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +11 -2
  44. data/lib/fog/brightbox/requests/compute/create_api_client.rb +11 -2
  45. data/lib/fog/brightbox/requests/compute/create_application.rb +11 -2
  46. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +11 -1
  47. data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +13 -2
  48. data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +17 -2
  49. data/lib/fog/brightbox/requests/compute/create_image.rb +18 -2
  50. data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +14 -2
  51. data/lib/fog/brightbox/requests/compute/create_server.rb +17 -2
  52. data/lib/fog/brightbox/requests/compute/create_server_group.rb +11 -2
  53. data/lib/fog/brightbox/requests/compute/destroy_api_client.rb +9 -2
  54. data/lib/fog/brightbox/requests/compute/destroy_application.rb +9 -2
  55. data/lib/fog/brightbox/requests/compute/destroy_cloud_ip.rb +9 -2
  56. data/lib/fog/brightbox/requests/compute/destroy_firewall_policy.rb +9 -2
  57. data/lib/fog/brightbox/requests/compute/destroy_firewall_rule.rb +9 -2
  58. data/lib/fog/brightbox/requests/compute/destroy_image.rb +9 -2
  59. data/lib/fog/brightbox/requests/compute/destroy_load_balancer.rb +9 -2
  60. data/lib/fog/brightbox/requests/compute/destroy_server.rb +9 -2
  61. data/lib/fog/brightbox/requests/compute/destroy_server_group.rb +9 -2
  62. data/lib/fog/brightbox/requests/compute/get_account.rb +7 -15
  63. data/lib/fog/brightbox/requests/compute/get_api_client.rb +9 -2
  64. data/lib/fog/brightbox/requests/compute/get_application.rb +9 -2
  65. data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +1 -3
  66. data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +9 -2
  67. data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +9 -2
  68. data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +9 -2
  69. data/lib/fog/brightbox/requests/compute/get_image.rb +9 -2
  70. data/lib/fog/brightbox/requests/compute/get_interface.rb +9 -2
  71. data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +9 -2
  72. data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +1 -5
  73. data/lib/fog/brightbox/requests/compute/get_server.rb +9 -2
  74. data/lib/fog/brightbox/requests/compute/get_server_group.rb +9 -2
  75. data/lib/fog/brightbox/requests/compute/get_server_type.rb +9 -2
  76. data/lib/fog/brightbox/requests/compute/get_user.rb +7 -15
  77. data/lib/fog/brightbox/requests/compute/get_zone.rb +9 -2
  78. data/lib/fog/brightbox/requests/compute/list_accounts.rb +6 -2
  79. data/lib/fog/brightbox/requests/compute/list_api_clients.rb +8 -2
  80. data/lib/fog/brightbox/requests/compute/list_applications.rb +8 -2
  81. data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +8 -2
  82. data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +8 -2
  83. data/lib/fog/brightbox/requests/compute/list_images.rb +8 -2
  84. data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +8 -2
  85. data/lib/fog/brightbox/requests/compute/list_server_groups.rb +8 -2
  86. data/lib/fog/brightbox/requests/compute/list_server_types.rb +8 -2
  87. data/lib/fog/brightbox/requests/compute/list_servers.rb +8 -2
  88. data/lib/fog/brightbox/requests/compute/list_users.rb +8 -2
  89. data/lib/fog/brightbox/requests/compute/list_zones.rb +8 -2
  90. data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +11 -2
  91. data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +10 -12
  92. data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +11 -2
  93. data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +11 -2
  94. data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +11 -2
  95. data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +9 -10
  96. data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +22 -3
  97. data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +18 -0
  98. data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +13 -1
  99. data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +9 -2
  100. data/lib/fog/brightbox/requests/compute/shutdown_server.rb +9 -2
  101. data/lib/fog/brightbox/requests/compute/snapshot_server.rb +9 -2
  102. data/lib/fog/brightbox/requests/compute/start_server.rb +9 -2
  103. data/lib/fog/brightbox/requests/compute/stop_server.rb +9 -2
  104. data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +9 -2
  105. data/lib/fog/brightbox/requests/compute/update_account.rb +32 -34
  106. data/lib/fog/brightbox/requests/compute/update_api_client.rb +12 -2
  107. data/lib/fog/brightbox/requests/compute/update_application.rb +12 -2
  108. data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +13 -2
  109. data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +16 -1
  110. data/lib/fog/brightbox/requests/compute/update_image.rb +17 -2
  111. data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +15 -2
  112. data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +12 -19
  113. data/lib/fog/brightbox/requests/compute/update_server.rb +12 -2
  114. data/lib/fog/brightbox/requests/compute/update_server_group.rb +12 -2
  115. data/lib/fog/brightbox/requests/compute/update_user.rb +15 -2
  116. data/lib/fog/cloudstack/models/compute/server.rb +3 -1
  117. data/lib/fog/core.rb +1 -0
  118. data/lib/fog/core/connection.rb +1 -0
  119. data/lib/fog/google/storage.rb +13 -2
  120. data/lib/fog/libvirt/models/compute/server.rb +1 -0
  121. data/lib/fog/libvirt/requests/compute/list_domains.rb +2 -2
  122. data/lib/fog/openstack.rb +57 -58
  123. data/lib/fog/openstack/compute.rb +15 -14
  124. data/lib/fog/openstack/identity.rb +10 -2
  125. data/lib/fog/openstack/image.rb +1 -1
  126. data/lib/fog/openstack/models/compute/flavor.rb +5 -1
  127. data/lib/fog/openstack/models/compute/security_group.rb +1 -1
  128. data/lib/fog/openstack/models/compute/server.rb +5 -0
  129. data/lib/fog/openstack/models/identity/users.rb +1 -2
  130. data/lib/fog/openstack/requests/compute/create_flavor.rb +4 -1
  131. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  132. data/lib/fog/openstack/requests/compute/get_limits.rb +93 -0
  133. data/lib/fog/openstack/requests/compute/list_tenants.rb +1 -0
  134. data/lib/fog/openstack/requests/compute/release_address.rb +13 -1
  135. data/lib/fog/openstack/requests/compute/reset_server_state.rb +24 -0
  136. data/lib/fog/openstack/requests/identity/create_role.rb +1 -1
  137. data/lib/fog/openstack/requests/identity/set_tenant.rb +21 -0
  138. data/lib/fog/openstack/volume.rb +2 -1
  139. data/lib/fog/rackspace/models/compute_v2/server.rb +27 -0
  140. data/lib/fog/rackspace/models/compute_v2/servers.rb +8 -0
  141. data/lib/fog/rackspace/models/dns/record.rb +14 -1
  142. data/lib/fog/rackspace/models/storage/file.rb +68 -2
  143. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +3 -0
  144. data/lib/fog/version.rb +5 -0
  145. data/lib/fog/vsphere/compute.rb +74 -8
  146. data/lib/fog/vsphere/models/compute/cluster.rb +31 -0
  147. data/lib/fog/vsphere/models/compute/clusters.rb +26 -0
  148. data/lib/fog/vsphere/models/compute/datacenter.rb +35 -0
  149. data/lib/fog/vsphere/models/compute/datacenters.rb +23 -0
  150. data/lib/fog/vsphere/models/compute/datastore.rb +24 -0
  151. data/lib/fog/vsphere/models/compute/datastores.rb +25 -0
  152. data/lib/fog/vsphere/models/compute/folder.rb +28 -0
  153. data/lib/fog/vsphere/models/compute/folders.rb +27 -0
  154. data/lib/fog/vsphere/models/compute/interface.rb +39 -0
  155. data/lib/fog/vsphere/models/compute/interfaces.rb +33 -0
  156. data/lib/fog/vsphere/models/compute/network.rb +21 -0
  157. data/lib/fog/vsphere/models/compute/networks.rb +25 -0
  158. data/lib/fog/vsphere/models/compute/resource_pool.rb +23 -0
  159. data/lib/fog/vsphere/models/compute/resource_pools.rb +26 -0
  160. data/lib/fog/vsphere/models/compute/server.rb +78 -12
  161. data/lib/fog/vsphere/models/compute/servers.rb +16 -20
  162. data/lib/fog/vsphere/models/compute/template.rb +13 -0
  163. data/lib/fog/vsphere/models/compute/templates.rb +23 -0
  164. data/lib/fog/vsphere/models/compute/volume.rb +45 -0
  165. data/lib/fog/vsphere/models/compute/volumes.rb +33 -0
  166. data/lib/fog/vsphere/requests/compute/create_vm.rb +114 -0
  167. data/lib/fog/vsphere/requests/compute/get_cluster.rb +25 -0
  168. data/lib/fog/vsphere/requests/compute/get_datacenter.rb +29 -0
  169. data/lib/fog/vsphere/requests/compute/get_datastore.rb +25 -0
  170. data/lib/fog/vsphere/requests/compute/get_folder.rb +73 -0
  171. data/lib/fog/vsphere/requests/compute/get_network.rb +25 -0
  172. data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +26 -0
  173. data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +62 -0
  174. data/lib/fog/vsphere/requests/compute/list_clusters.rb +37 -0
  175. data/lib/fog/vsphere/requests/compute/list_datacenters.rb +34 -0
  176. data/lib/fog/vsphere/requests/compute/list_datastores.rb +40 -0
  177. data/lib/fog/vsphere/requests/compute/list_folders.rb +45 -0
  178. data/lib/fog/vsphere/requests/compute/list_networks.rb +38 -0
  179. data/lib/fog/vsphere/requests/compute/list_resource_pools.rb +39 -0
  180. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +132 -166
  181. data/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb +52 -0
  182. data/lib/fog/vsphere/requests/compute/list_vm_volumes.rb +51 -0
  183. data/lib/fog/vsphere/requests/compute/vm_clone.rb +6 -8
  184. data/lib/fog/vsphere/requests/compute/vm_destroy.rb +1 -8
  185. data/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb +1 -2
  186. data/lib/tasks/changelog_task.rb +98 -0
  187. data/lib/tasks/documentation_task.rb +155 -0
  188. data/lib/tasks/test_task.rb +46 -0
  189. data/tests/aws/models/iam/users_tests.rb +16 -2
  190. data/tests/aws/requests/auto_scaling/notification_configuration_tests.rb +1 -0
  191. data/tests/aws/requests/auto_scaling/tag_tests.rb +1 -0
  192. data/tests/aws/requests/compute/instance_tests.rb +2 -0
  193. data/tests/aws/requests/compute/volume_tests.rb +8 -0
  194. data/tests/aws/requests/storage/object_tests.rb +18 -1
  195. data/tests/aws/requests/storage/versioning_tests.rb +70 -0
  196. data/tests/brightbox/compute_tests.rb +96 -4
  197. data/tests/brightbox/models/compute/account_tests.rb +15 -0
  198. data/tests/brightbox/oauth2_tests.rb +103 -0
  199. data/tests/brightbox/requests/compute/account_tests.rb +9 -2
  200. data/tests/brightbox/requests/compute/interface_tests.rb +18 -4
  201. data/tests/dns/models/record_tests.rb +17 -3
  202. data/tests/openstack/requests/compute/address_tests.rb +22 -19
  203. data/tests/openstack/requests/compute/flavor_tests.rb +4 -2
  204. data/tests/openstack/requests/compute/limit_tests.rb +60 -0
  205. data/tests/openstack/requests/compute/quota_tests.rb +16 -3
  206. data/tests/openstack/requests/compute/security_group_tests.rb +1 -1
  207. data/tests/rackspace/models/compute_v2/servers_tests.rb +6 -0
  208. data/tests/rackspace/models/storage/file_tests.rb +172 -0
  209. data/tests/rackspace/requests/dns/helper.rb +12 -26
  210. data/tests/vsphere/compute_tests.rb +3 -3
  211. data/tests/vsphere/models/compute/server_tests.rb +1 -2
  212. data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +5 -13
  213. data/tests/vsphere/requests/compute/vm_clone_tests.rb +2 -2
  214. metadata +59 -11
  215. data/lib/fog/vsphere/requests/compute/datacenters.rb +0 -34
  216. data/lib/fog/vsphere/requests/compute/find_vm_by_ref.rb +0 -41
  217. data/lib/fog/vsphere/requests/compute/vm_create.rb +0 -97
  218. data/tests/vsphere/requests/compute/find_vm_by_ref_tests.rb +0 -26
  219. data/tests/vsphere/requests/compute/vm_create_tests.rb +0 -20
@@ -0,0 +1,37 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def list_clusters(filters = { })
6
+ datacenter_name = filters[:datacenter]
7
+
8
+ raw_clusters(datacenter_name).map do |cluster|
9
+ cluster_attributes(cluster, datacenter_name)
10
+ end
11
+ end
12
+
13
+ def raw_clusters(datacenter)
14
+ find_raw_datacenter(datacenter).hostFolder.childEntity.grep(RbVmomi::VIM::ClusterComputeResource)
15
+ end
16
+
17
+ protected
18
+
19
+ def cluster_attributes cluster, datacenter_name
20
+ {
21
+ :id => managed_obj_id(cluster),
22
+ :name => cluster.name,
23
+ :num_host => cluster.summary.numHosts,
24
+ :num_cpu_cores => cluster.summary.numCpuCores,
25
+ :overall_status => cluster.summary.overallStatus,
26
+ :datacenter => datacenter_name || parent_attribute(cluster.path, :datacenter)[1],
27
+ }
28
+ end
29
+
30
+ end
31
+ class Mock
32
+ def list_clusters(filters = { })
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,34 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+
6
+ def list_datacenters filters = {}
7
+ raw_datacenters.map do |dc|
8
+ {
9
+ :id => managed_obj_id(dc),
10
+ :name => dc.name,
11
+ :status => dc.overallStatus
12
+ }
13
+ end
14
+ end
15
+
16
+ protected
17
+
18
+ def raw_datacenters
19
+ @raw_datacenters ||= @connection.rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter)
20
+ end
21
+
22
+ def find_datacenters name=nil
23
+ name ? [get_raw_datacenter(name)] : raw_datacenters
24
+ end
25
+ end
26
+
27
+ class Mock
28
+ def list_datacenters filters = {}
29
+ [ {:name => "Solutions", :status => "grey"}, {:name => "Solutions2", :status => "green" }]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,40 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def list_datastores(filters = { })
6
+ datacenter_name = filters[:datacenter]
7
+ # default to show all datastores
8
+ only_active = filters[:accessible] || false
9
+ raw_datastores(datacenter_name).map do |datastore|
10
+ next if only_active and !datastore.summary.accessible
11
+ datastore_attributes(datastore, datacenter_name)
12
+ end.compact
13
+ end
14
+
15
+ def raw_datastores(datacenter_name)
16
+ find_raw_datacenter(datacenter_name).datastore
17
+ end
18
+ protected
19
+
20
+ def datastore_attributes datastore, datacenter
21
+ {
22
+ :id => managed_obj_id(datastore),
23
+ :name => datastore.name,
24
+ :accessible => datastore.summary.accessible,
25
+ :type => datastore.summary.type,
26
+ :freespace => datastore.summary.freeSpace,
27
+ :capacity => datastore.summary.capacity,
28
+ :datacenter => datacenter,
29
+ }
30
+ end
31
+
32
+ end
33
+ class Mock
34
+ def list_datastores(datacenter_name)
35
+ []
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ # Grabs all sub folders within a given path folder.
6
+ #
7
+ # ==== Parameters
8
+ # * filters<~Hash>:
9
+ # * :datacenter<~String> - *REQUIRED* Your datacenter where you're
10
+ # looking for folders. Example: 'my-datacenter-name' (passed if you
11
+ # are using the models/collections)
12
+ # eg: vspconn.datacenters.first.vm_folders('mypath')
13
+ # * :path<~String> - Your path where you're looking for
14
+ # more folders, if return = none you will get an error. If you don't
15
+ # define it will look in the main datacenter folder for any folders
16
+ # in that datacenter.
17
+ #
18
+ # Example Usage Testing Only:
19
+ # vspconn = Fog::Compute[:vsphere]
20
+ # mydc = vspconn.datacenters.first
21
+ # folders = mydc.vm_folders
22
+ #
23
+ def list_folders(filters = { })
24
+ path = filters[:path] || filters['path'] || ''
25
+ datacenter_name = filters[:datacenter]
26
+ get_raw_vmfolders(path, datacenter_name).map do |folder|
27
+ folder_attributes(folder, datacenter_name)
28
+ end
29
+ end
30
+
31
+ protected
32
+
33
+ def get_raw_vmfolders(path, datacenter_name)
34
+ folder = get_raw_vmfolder(path, datacenter_name)
35
+ child_folders(folder).flatten.compact
36
+ end
37
+
38
+ def child_folders folder
39
+ [folder, folder.childEntity.grep(RbVmomi::VIM::Folder).map(&method(:child_folders)).flatten]
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,38 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def list_networks(filters = { })
6
+ datacenter_name = filters[:datacenter]
7
+ # default to show all networks
8
+ only_active = filters[:accessible] || false
9
+ raw_networks(datacenter_name).map do |network|
10
+ next if only_active and !network.summary.accessible
11
+ network_attributes(network, datacenter_name)
12
+ end.compact
13
+ end
14
+
15
+ def raw_networks(datacenter_name)
16
+ find_raw_datacenter(datacenter_name).network
17
+ end
18
+
19
+ protected
20
+
21
+ def network_attributes network, datacenter
22
+ {
23
+ :id => managed_obj_id(network),
24
+ :name => network.name,
25
+ :accessible => network.summary.accessible,
26
+ :datacenter => datacenter,
27
+ }
28
+ end
29
+
30
+ end
31
+ class Mock
32
+ def list_networks(datacenter_name)
33
+ []
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,39 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def list_resource_pools(filters = { })
6
+ datacenter_name = filters[:datacenter]
7
+ cluster_name = filters[:cluster]
8
+ cluster = get_raw_cluster(cluster_name, datacenter_name)
9
+ list_raw_resource_pools(cluster).map do |resource_pool|
10
+ resource_pool_attributes(resource_pool, cluster_name, datacenter_name)
11
+ end
12
+ end
13
+
14
+ protected
15
+
16
+ # root ResourcePool + Children if they exists
17
+ def list_raw_resource_pools(cluster)
18
+ [cluster.resourcePool, cluster.resourcePool.resourcePool].flatten
19
+ end
20
+
21
+ def resource_pool_attributes resource_pool, cluster, datacenter
22
+ {
23
+ :id => managed_obj_id(resource_pool),
24
+ :name => resource_pool.name,
25
+ :configured_memory_mb => resource_pool.summary.configuredMemoryMB,
26
+ :overall_status => resource_pool.overallStatus,
27
+ :cluster => cluster,
28
+ :datacenter => datacenter
29
+ }
30
+ end
31
+
32
+ end
33
+ class Mock
34
+ def list_resource_pools(filters = { })
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -2,97 +2,43 @@ module Fog
2
2
  module Compute
3
3
  class Vsphere
4
4
  class Real
5
- def list_virtual_machines(options = {})
5
+ def list_virtual_machines(options = { })
6
6
  # Listing all VM's can be quite slow and expensive. Try and optimize
7
7
  # based on the available options we have. These conditions are in
8
- # ascending order of time to complete for large deployments.
8
+ # ascending order of time to complete for large deployments.
9
+
10
+ options[:folder] ||= options['folder']
9
11
  if options['instance_uuid'] then
10
- list_all_virtual_machines_by_instance_uuid(options)
11
- elsif options['folder'] then
12
- list_all_virtual_machines_in_folder(options)
12
+ [connection.get_virtual_machine(options['instance_uuid'])]
13
+ elsif options[:folder] && options[:datacenter] then
14
+ list_all_virtual_machines_in_folder(options[:folder], options[:datacenter])
13
15
  else
14
- list_all_virtual_machines
16
+ list_all_virtual_machines(options)
15
17
  end
16
18
  end
17
19
 
18
20
  private
19
21
 
20
- def list_all_virtual_machines_in_folder(options = {})
21
- # Tap gets rid of the leading empty string and "Datacenters" element
22
- # and returns the array.
23
- path_elements = options['folder'].split('/').tap { |ary| ary.shift 2 }
24
- # The DC name itself.
25
- dc_name = path_elements.shift
26
- # If the first path element contains "vm" this denotes the vmFolder
27
- # and needs to be shifted out since each DC contains only one
28
- # vmFolder
29
- path_elements.shift if path_elements[0] == 'vm'
30
- # Make sure @datacenters is populated (the keys are DataCenter instances)
31
- self.datacenters.include? dc_name or raise ArgumentError, "Could not find a Datacenter named #{dc_name}"
32
- # Get the datacenter managed object
33
- dc = @datacenters[dc_name]
34
-
35
- # Get the VM Folder (Group) efficiently
36
- vm_folder = dc.vmFolder
22
+ def list_all_virtual_machines_in_folder(path, datacenter_name)
23
+ folder = get_raw_vmfolder(path, datacenter_name)
37
24
 
38
- # Walk the tree resetting the folder pointer as we go
39
- folder = path_elements.inject(vm_folder) do |current_folder, sub_folder_name|
40
- # JJM VIM::Folder#find appears to be quite efficient as it uses the
41
- # searchIndex It certainly appears to be faster than
42
- # VIM::Folder#inventory since that returns _all_ managed objects of
43
- # a certain type _and_ their properties.
44
- sub_folder = current_folder.find(sub_folder_name, RbVmomi::VIM::Folder)
45
- raise ArgumentError, "Could not descend into #{sub_folder_name}. Please check your path." unless sub_folder
46
- sub_folder
47
- end
48
-
49
- # This should be efficient since we're not obtaining properties
50
- virtual_machines = folder.children.inject([]) do |ary, child|
51
- if child.is_a? RbVmomi::VIM::VirtualMachine then
52
- ary << convert_vm_mob_ref_to_attr_hash(child)
53
- end
54
- ary
55
- end
56
-
57
- # Return the managed objects themselves as an array. These may be converted
58
- # to an attribute has using convert_vm_mob_ref_to_attr_hash
59
- { 'virtual_machines' => virtual_machines }
25
+ folder.children.grep(RbVmomi::VIM::VirtualMachine).map(&method(:convert_vm_mob_ref_to_attr_hash))
60
26
  end
61
27
 
62
- def list_all_virtual_machines_by_instance_uuid(options = {})
63
- uuid = options['instance_uuid']
64
- search_filter = { :uuid => uuid, 'vmSearch' => true, 'instanceUuid' => true }
65
- vm_mob_ref = @connection.searchIndex.FindAllByUuid(search_filter).first
66
- if vm_attribute_hash = convert_vm_mob_ref_to_attr_hash(vm_mob_ref) then
67
- virtual_machines = [ vm_attribute_hash ]
68
- else
69
- virtual_machines = [ ]
70
- end
71
- { 'virtual_machines' => virtual_machines }
72
- end
28
+ def list_all_virtual_machines(options = { })
29
+ datacenters = find_datacenters(options[:datacenter])
30
+ # TODO: go though nested folders
31
+ vms = datacenters.map { |dc| dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine) }.flatten
32
+ # remove all template based virtual machines
33
+ vms.delete_if { |v| v.config.template }
73
34
 
74
- def list_all_virtual_machines
75
- virtual_machines = list_all_virtual_machine_mobs.collect do |vm_mob|
35
+ vms.map do |vm_mob|
76
36
  convert_vm_mob_ref_to_attr_hash(vm_mob)
77
37
  end
78
- { 'virtual_machines' => virtual_machines }
79
- end
80
-
81
-
82
- # NOTE: This is a private instance method required by the vm_clone
83
- # request. It's very hard to get the Managed Object Reference
84
- # of a Template because we can't search for it by instance_uuid
85
- # As a result, we need a list of all virtual machines, and we
86
- # need them in "native" format, not filter attribute format.
87
- def list_all_virtual_machine_mobs
88
- # Find each datacenter
89
- datacenters = @connection.rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter)
90
- # Next, search the "vmFolder" inventory of each data center:
91
- datacenters.map {|dc| dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine) }.flatten
92
38
  end
93
39
 
94
40
  def get_folder_path(folder, root = nil)
95
- if ( not folder.methods.include?('parent') ) or ( folder == root )
41
+ if (not folder.methods.include?('parent')) or (folder == root)
96
42
  return
97
43
  end
98
44
  "#{get_folder_path(folder.parent)}/#{folder.name}"
@@ -105,100 +51,120 @@ module Fog
105
51
  nil
106
52
  end
107
53
 
108
- def list_virtual_machines(options = {})
54
+ def list_virtual_machines(options = { })
109
55
  case options['instance_uuid']
110
- when nil
111
- rval = YAML.load <<-'ENDvmLISTING'
112
- ---
113
- virtual_machines:
114
- - name: centos56gm
115
- hypervisor: gunab.puppetlabs.lan
116
- tools_version: guestToolsCurrent
117
- ipaddress:
118
- mo_ref: vm-698
119
- power_state: poweredOff
120
- uuid: 42322347-d791-cd34-80b9-e25fe28ad37c
121
- is_a_template: true
122
- id: 50323f93-6835-1178-8b8f-9e2109890e1a
123
- tools_state: toolsNotRunning
124
- connection_state: connected
125
- instance_uuid: 50323f93-6835-1178-8b8f-9e2109890e1a
126
- hostname:
127
- mac_addresses:
128
- Network adapter 1: 00:50:56:b2:00:a1
129
- operatingsystem:
130
- - name: centos56gm2
131
- hypervisor: gunab.puppetlabs.lan
132
- tools_version: guestToolsCurrent
133
- ipaddress:
134
- mo_ref: vm-640
135
- power_state: poweredOff
136
- uuid: 564ddcbe-853a-d29a-b329-a0a3693a004d
137
- is_a_template: true
138
- id: 5257dee8-050c-cbcd-ae25-db0e582ab530
139
- tools_state: toolsNotRunning
140
- connection_state: connected
141
- instance_uuid: 5257dee8-050c-cbcd-ae25-db0e582ab530
142
- hostname:
143
- mac_addresses:
144
- Network adapter 1: 00:0c:29:3a:00:4d
145
- operatingsystem:
146
- - name: dashboard_gm
147
- hypervisor: gunab.puppetlabs.lan
148
- tools_version: guestToolsCurrent
149
- ipaddress: 192.168.100.184
150
- mo_ref: vm-669
151
- power_state: poweredOn
152
- uuid: 564d3f91-3452-a509-a678-1246f7897979
153
- is_a_template: false
154
- id: 5032739c-c871-c0d2-034f-9700a0b5383e
155
- tools_state: toolsOk
156
- connection_state: connected
157
- instance_uuid: 5032739c-c871-c0d2-034f-9700a0b5383e
158
- hostname: compliance.puppetlabs.vm
159
- mac_addresses:
160
- Network adapter 1: 00:50:56:b2:00:96
161
- operatingsystem: Red Hat Enterprise Linux 6 (64-bit)
162
- - name: jefftest
163
- hypervisor: gunab.puppetlabs.lan
164
- tools_version: guestToolsCurrent
165
- ipaddress: 192.168.100.187
166
- mo_ref: vm-715
167
- power_state: poweredOn
168
- uuid: 42329da7-e8ab-29ec-1892-d6a4a964912a
169
- is_a_template: false
170
- id: 5032c8a5-9c5e-ba7a-3804-832a03e16381
171
- tools_state: toolsOk
172
- connection_state: connected
173
- instance_uuid: 5032c8a5-9c5e-ba7a-3804-832a03e16381
174
- hostname: centos56gm.localdomain
175
- mac_addresses:
176
- Network adapter 1: 00:50:56:b2:00:af
177
- operatingsystem: CentOS 4/5 (32-bit)
178
- ENDvmLISTING
179
- when '5032c8a5-9c5e-ba7a-3804-832a03e16381'
180
- YAML.load <<-'5032c8a5-9c5e-ba7a-3804-832a03e16381'
181
- ---
182
- virtual_machines:
183
- - name: jefftest
184
- hypervisor: gunab.puppetlabs.lan
185
- tools_version: guestToolsCurrent
186
- ipaddress: 192.168.100.187
187
- mo_ref: vm-715
188
- power_state: poweredOn
189
- uuid: 42329da7-e8ab-29ec-1892-d6a4a964912a
190
- is_a_template: false
191
- id: 5032c8a5-9c5e-ba7a-3804-832a03e16381
192
- tools_state: toolsOk
193
- connection_state: connected
194
- instance_uuid: 5032c8a5-9c5e-ba7a-3804-832a03e16381
195
- hostname: centos56gm.localdomain
196
- mac_addresses:
197
- Network adapter 1: 00:50:56:b2:00:af
198
- operatingsystem: CentOS 4/5 (32-bit)
199
- 5032c8a5-9c5e-ba7a-3804-832a03e16381
200
- when 'does-not-exist-and-is-not-a-uuid', '50323f93-6835-1178-8b8f-9e2109890e1a'
201
- { 'virtual_machines' => [] }
56
+ when nil
57
+
58
+ [
59
+ { :resource_pool => "Resources",
60
+ :memory_mb => 2196,
61
+ :mac_addresses => { "Network adapter 1" => "00:50:56:a9:00:28" },
62
+ :power_state => "poweredOn",
63
+ :cpus => 1,
64
+ :hostname => "dhcp75-197.virt.bos.redhat.com",
65
+ :mo_ref => "vm-562",
66
+ :connection_state => "connected",
67
+ :overall_status => "green",
68
+ :datacenter => "Solutions",
69
+ :volumes =>
70
+ [{
71
+ :id => "6000C29c-a47d-4cd9-5249-c371de775f06",
72
+ :datastore => "Storage1",
73
+ :mode => "persistent",
74
+ :size => 8388608,
75
+ :thin => true,
76
+ :name => "Hard disk 1",
77
+ :filename => "[Storage1] rhel6-mfojtik/rhel6-mfojtik.vmdk",
78
+ :size_gb => 8
79
+ }],
80
+ :interfaces =>
81
+ [{ :mac => "00:50:56:a9:00:28",
82
+ :network => "VM Network",
83
+ :name => "Network adapter 1",
84
+ :status => "ok",
85
+ :summary => "VM Network",
86
+ }],
87
+ :hypervisor => "gunab.puppetlabs.lan",
88
+ :guest_id => "rhel6_64Guest",
89
+ :tools_state => "toolsOk",
90
+ :cluster => "Solutionscluster",
91
+ :name => "rhel64",
92
+ :operatingsystem => "Red Hat Enterprise Linux 6 (64-bit)",
93
+ :uuid => "4229f0e9-bfdc-d9a7-7bac-12070772e6dc",
94
+ :path => "/Datacenters/Solutions/vm",
95
+ :id => "5029c440-85ee-c2a1-e9dd-b63e39364603",
96
+ :tools_version => "guestToolsUnmanaged",
97
+ :ipaddress => "192.168.100.184",
98
+ },
99
+ { :resource_pool => "Resources",
100
+ :memory_mb => 512,
101
+ :power_state => "poweredOn",
102
+ :mac_addresses => { "Network adapter 1" => "00:50:56:a9:00:00" },
103
+ :hostname => nil,
104
+ :cpus => 1,
105
+ :connection_state => "connected",
106
+ :mo_ref => "vm-621",
107
+ :overall_status => "green",
108
+ :datacenter => "Solutions",
109
+ :volumes =>
110
+ [{ :thin => false,
111
+ :size_gb => 10,
112
+ :datastore => "datastore1",
113
+ :filename => "[datastore1] i-1342439683/i-1342439683.vmdk",
114
+ :size => 10485762,
115
+ :name => "Hard disk 1",
116
+ :mode => "persistent",
117
+ :id => "6000C29b-f364-d073-8316-8e98ac0a0eae" }],
118
+ :interfaces =>
119
+ [{ :summary => "VM Network",
120
+ :mac => "00:50:56:a9:00:00",
121
+ :status => "ok",
122
+ :network => "VM Network",
123
+ :name => "Network adapter 1" }],
124
+ :instance_uuid => "502916a3-b42e-17c7-43ce-b3206e9524dc",
125
+ :hypervisor => "gunab.puppetlabs.lan",
126
+ :guest_id => nil,
127
+ :cluster => "Solutionscluster",
128
+ :tools_state => "toolsNotInstalled",
129
+ :uuid => "4229e0de-30cb-ceb2-21f9-4d8d8beabb52",
130
+ :name => "i-1342439683",
131
+ :operatingsystem => nil,
132
+ :path => "/",
133
+ :tools_version => "guestToolsNotInstalled",
134
+ :id => "502916a3-b42e-17c7-43ce-b3206e9524dc",
135
+ :ipaddress => nil }
136
+
137
+
138
+ ]
139
+ when '5032c8a5-9c5e-ba7a-3804-832a03e16381'
140
+ [{ :resource_pool => "Resources",
141
+ :memory_mb => 2196,
142
+ :power_state => "poweredOn",
143
+ :mac_addresses => { "Network adapter 1" => "00:50:56:b2:00:af" },
144
+ :hostname => "centos56gm.localdomain",
145
+ :cpus => 1,
146
+ :connection_state => "connected",
147
+ :mo_ref => "vm-715",
148
+ :overall_status => "green",
149
+ :datacenter => "Solutions",
150
+ :instance_uuid => "5029c440-85ee-c2a1-e9dd-b63e39364603",
151
+ :hypervisor => "gunab.puppetlabs.lan",
152
+ :guest_id => "rhel6_64Guest",
153
+ :cluster => "Solutionscluster",
154
+ :tools_state => "toolsOk",
155
+ :name => "jefftest",
156
+ :operatingsystem => "Red Hat Enterprise Linux 6 (64-bit)",
157
+ :path => "/",
158
+ :tools_version => "guestToolsUnmanaged",
159
+ :ipaddress => "192.168.100.187",
160
+ :id => "5032c8a5-9c5e-ba7a-3804-832a03e16381",
161
+ :uuid => "42329da7-e8ab-29ec-1892-d6a4a964912a"
162
+
163
+ }
164
+
165
+ ]
166
+ when 'does-not-exist-and-is-not-a-uuid', '50323f93-6835-1178-8b8f-9e2109890e1a'
167
+ []
202
168
  end
203
169
  end
204
170
  end