fog 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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