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,23 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/vsphere/models/compute/datacenter'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Vsphere
7
+
8
+ class Datacenters < Fog::Collection
9
+
10
+ model Fog::Compute::Vsphere::Datacenter
11
+
12
+ def all(filters = {})
13
+ load connection.list_datacenters(filters)
14
+ end
15
+
16
+ def get(name)
17
+ new connection.get_datacenter(name)
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+
5
+ class Datastore < Fog::Model
6
+
7
+ identity :id
8
+
9
+ attribute :name
10
+ attribute :datacenter
11
+ attribute :type
12
+ attribute :freespace
13
+ attribute :accessible # reachable by at least one hypervisor
14
+ attribute :capacity
15
+
16
+ def to_s
17
+ name
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/vsphere/models/compute/datastore'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Vsphere
7
+
8
+ class Datastores < Fog::Collection
9
+
10
+ model Fog::Compute::Vsphere::Datastore
11
+ attr_accessor :datacenter
12
+
13
+ def all(filters = {})
14
+ load connection.list_datastores(filters.merge(:datacenter => datacenter))
15
+ end
16
+
17
+ def get(id)
18
+ requires :datacenter
19
+ new connection.get_datastore(id, datacenter)
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+
5
+ class Folder < Fog::Model
6
+
7
+ identity :id
8
+
9
+ attribute :name
10
+ attribute :parent
11
+ attribute :datacenter
12
+ attribute :path
13
+ attribute :type
14
+
15
+ def vms
16
+ return [] if type.to_s != 'vm'
17
+ connection.servers(:folder => path, :datacenter => datacenter)
18
+ end
19
+
20
+ def to_s
21
+ name
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,27 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/vsphere/models/compute/folder'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Vsphere
7
+
8
+ class Folders < Fog::Collection
9
+
10
+ model Fog::Compute::Vsphere::Folder
11
+ attr_accessor :datacenter, :type, :path
12
+
13
+ def all(filters = { })
14
+ requires :datacenter
15
+ requires :type
16
+ load connection.list_folders(filters.merge(:datacenter => datacenter, :type => type, :path => path))
17
+ end
18
+
19
+ def get(id)
20
+ requires :datacenter
21
+ new connection.get_folder(id, datacenter, type)
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+
5
+ class Interface < Fog::Model
6
+
7
+ identity :mac
8
+
9
+ attribute :network
10
+ attribute :name
11
+ attribute :status
12
+ attribute :summary
13
+ attribute :type
14
+
15
+ def initialize(attributes={} )
16
+ super defaults.merge(attributes)
17
+ end
18
+
19
+ def to_s
20
+ name
21
+ end
22
+
23
+ private
24
+
25
+ def defaults
26
+ {
27
+ :name=>"Network adapter",
28
+ :network=>"VM Network",
29
+ :summary=>"VM Network",
30
+ :type=> RbVmomi::VIM::VirtualE1000,
31
+ }
32
+ end
33
+
34
+
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,33 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/vsphere/models/compute/interface'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Vsphere
7
+
8
+ class Interfaces < Fog::Collection
9
+
10
+ model Fog::Compute::Vsphere::Interface
11
+
12
+ attr_accessor :vm
13
+
14
+ def all(filters = {})
15
+ requires :vm
16
+ case vm
17
+ when Fog::Compute::Vsphere::Server
18
+ load connection.list_vm_interfaces(vm.id)
19
+ when Fog::Compute::Vsphere::Template
20
+ load connection.list_template_interfaces(vm.id)
21
+ else
22
+ raise 'interfaces should have vm or template'
23
+ end
24
+ end
25
+
26
+ def get(id)
27
+ new connection.get_interface(id)
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+
5
+ class Network < Fog::Model
6
+
7
+ identity :id
8
+
9
+ attribute :name
10
+ attribute :datacenter
11
+ attribute :accessible # reachable by at least one hypervisor
12
+
13
+ def to_s
14
+ name
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/vsphere/models/compute/network'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Vsphere
7
+
8
+ class Networks < Fog::Collection
9
+
10
+ model Fog::Compute::Vsphere::Network
11
+ attr_accessor :datacenter
12
+
13
+ def all(filters = {})
14
+ load connection.list_networks(filters.merge(:datacenter => datacenter))
15
+ end
16
+
17
+ def get(id)
18
+ requires :datacenter
19
+ new connection.get_network(id, datacenter)
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+
5
+ class ResourcePool < Fog::Model
6
+
7
+ identity :id
8
+
9
+ attribute :name
10
+ attribute :cluster
11
+ attribute :datacenter
12
+ attribute :configured_memory_mb
13
+ attribute :overall_status
14
+
15
+ def to_s
16
+ name
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,26 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/vsphere/models/compute/resource_pool'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Vsphere
7
+
8
+ class ResourcePools < Fog::Collection
9
+
10
+ model Fog::Compute::Vsphere::ResourcePool
11
+ attr_accessor :datacenter, :cluster
12
+
13
+ def all(filters = {})
14
+ load connection.list_resource_pools(filters.merge(:datacenter => datacenter, :cluster => cluster))
15
+ end
16
+
17
+ def get(id)
18
+ requires :datacenter
19
+ requires :cluster
20
+ new connection.get_resource_pool(id, cluster, datacenter)
21
+ end
22
+
23
+ end
24
+ end
25
+ end
26
+ end
@@ -20,8 +20,6 @@ module Fog
20
20
  attribute :name
21
21
  # UUID may be the same from VM to VM if the user does not select (I copied it)
22
22
  attribute :uuid
23
- # Instance UUID should be unique across a vCenter deployment.
24
- attribute :instance_uuid
25
23
  attribute :hostname
26
24
  attribute :operatingsystem
27
25
  attribute :ipaddress, :aliases => 'public_ip_address'
@@ -30,12 +28,26 @@ module Fog
30
28
  attribute :tools_version
31
29
  attribute :mac_addresses, :aliases => 'macs'
32
30
  attribute :hypervisor, :aliases => 'host'
33
- attribute :is_a_template
34
31
  attribute :connection_state
35
32
  attribute :mo_ref
36
33
  attribute :path
37
34
  attribute :memory_mb
38
35
  attribute :cpus
36
+ attribute :interfaces
37
+ attribute :volumes
38
+ attribute :overall_status, :aliases => 'status'
39
+ attribute :cluster
40
+ attribute :datacenter
41
+ attribute :resource_pool
42
+ attribute :instance_uuid # move this --> id
43
+ attribute :guest_id
44
+
45
+ def initialize(attributes={} )
46
+ super defaults.merge(attributes)
47
+ self.instance_uuid ||= id # TODO: remvoe instance_uuid as it can be replaced with simple id
48
+ initialize_interfaces
49
+ initialize_volumes
50
+ end
39
51
 
40
52
  def vm_reconfig_memory(options = {})
41
53
  requires :instance_uuid, :memory
@@ -81,16 +93,8 @@ module Fog
81
93
  connection.vm_migrate('instance_uuid' => instance_uuid, 'priority' => options[:priority])
82
94
  end
83
95
 
84
- def create(options ={})
85
- requires :name, :path
86
- new_vm = self.class.new(create_results['vm_attributes'])
87
- new_vm.collection = self.collection
88
- new_vm.connection = self.connection
89
- new_vm
90
- end
91
-
92
96
  def clone(options = {})
93
- requires :name, :path
97
+ requires :name, :datacenter
94
98
  # Convert symbols to strings
95
99
  req_options = options.inject({}) { |hsh, (k,v)| hsh[k.to_s] = v; hsh }
96
100
  # Give our path to the request
@@ -131,6 +135,68 @@ module Fog
131
135
  memory_mb * 1024 * 1024
132
136
  end
133
137
 
138
+ def mac
139
+ interfaces.first.mac unless interfaces.empty?
140
+ end
141
+
142
+ def interfaces
143
+ attributes[:interfaces] ||= id.nil? ? [] : connection.interfaces( :vm => self )
144
+ end
145
+
146
+ def volumes
147
+ attributes[:volumes] ||= id.nil? ? [] : connection.volumes( :vm => self )
148
+ end
149
+
150
+ def folder
151
+ return nil unless datacenter and path
152
+ attributes[:folder] ||= connection.folders(:datacenter => datacenter, :type => :vm).get(path)
153
+ end
154
+
155
+ def save
156
+ requires :name, :cluster, :datacenter
157
+ if identity
158
+ raise "update is not supported yet"
159
+ # connection.update_vm(attributes)
160
+ else
161
+ self.id = connection.create_vm(attributes)
162
+ end
163
+ reload
164
+ end
165
+
166
+ def new?
167
+ id.nil?
168
+ end
169
+
170
+ def reload
171
+ # reload does not re-read assoiciated attributes, so we clear it manually
172
+ [:interfaces, :volumes].each do |attr|
173
+ self.attributes.delete(attr)
174
+ end
175
+ super
176
+ end
177
+
178
+ private
179
+
180
+ def defaults
181
+ {
182
+ :cpus => 1,
183
+ :memory_mb => 512,
184
+ :guest_id => 'otherGuest',
185
+ :path => '/'
186
+ }
187
+ end
188
+
189
+ def initialize_interfaces
190
+ if attributes[:interfaces] and attributes[:interfaces].is_a?(Array)
191
+ self.attributes[:interfaces].map! { |nic| nic.is_a?(Hash) ? connection.interfaces.new(nic) : nic }
192
+ end
193
+ end
194
+
195
+ def initialize_volumes
196
+ if attributes[:volumes] and attributes[:volumes].is_a?(Array)
197
+ self.attributes[:volumes].map! { |vol| vol.is_a?(Hash) ? connection.volumes.new(vol) : vol }
198
+ end
199
+ end
134
200
  end
135
201
 
136
202
  end
@@ -8,30 +8,26 @@ module Fog
8
8
  class Servers < Fog::Collection
9
9
 
10
10
  model Fog::Compute::Vsphere::Server
11
+ attr_accessor :datacenter
12
+ attr_accessor :network
13
+ attr_accessor :cluster
14
+ attr_accessor :resource_pool
15
+ attr_accessor :folder
11
16
 
12
- # 'path' => '/Datacenters/vm/Jeff/Templates' will be MUCH faster.
17
+ # 'folder' => '/Datacenters/vm/Jeff/Templates' will be MUCH faster.
13
18
  # than simply listing everything.
14
- def all(filters = {})
15
- # REVISIT: I'm not sure if this is the best way to implement search
16
- # filters on a collection but it does work. I need to study the AWS
17
- # code more to make sure this matches up.
18
- filters['folder'] ||= attributes['folder']
19
- response = connection.list_virtual_machines(filters)
20
- load(response['virtual_machines'])
19
+ def all(filters = { })
20
+ load connection.list_virtual_machines(filters.merge(
21
+ :datacenter => datacenter,
22
+ :cluster => cluster,
23
+ :network => network,
24
+ :resource_pool => resource_pool,
25
+ :folder => folder
26
+ ))
21
27
  end
22
28
 
23
- def get(id)
24
- # Is the id a managed_object_reference? This may be the case if we're reloading
25
- # a model of a VM in the process of being cloned, since it
26
- # will not have a instance_uuid yet.
27
- if id =~ /^vm-/
28
- response = connection.find_vm_by_ref('vm_ref' => id)
29
- server_attributes = response['virtual_machine']
30
- else
31
- response = connection.list_virtual_machines('instance_uuid' => id)
32
- server_attributes = response['virtual_machines'].first
33
- end
34
- new(server_attributes)
29
+ def get(id, datacenter = nil)
30
+ new connection.get_virtual_machine id, datacenter
35
31
  rescue Fog::Compute::Vsphere::NotFound
36
32
  nil
37
33
  end