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,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