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,13 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+
5
+ class Template < Fog::Model
6
+
7
+ identity :id
8
+
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/vsphere/models/compute/template'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Vsphere
7
+
8
+ class Templates < Fog::Collection
9
+
10
+ model Fog::Compute::Vsphere::Template
11
+
12
+ def all(filters = {})
13
+ load connection.list_templates(filters)
14
+ end
15
+
16
+ def get(id)
17
+ new connection.get_template(id)
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,45 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+
5
+ class Volume < Fog::Model
6
+ DISK_SIZE_TO_GB = 1048576
7
+ identity :id
8
+
9
+ attribute :datastore
10
+ attribute :mode
11
+ attribute :size
12
+ attribute :thin
13
+ attribute :name
14
+ attribute :filename
15
+ attribute :size_gb
16
+
17
+ def initialize(attributes={} )
18
+ super defaults.merge(attributes)
19
+ end
20
+
21
+ def size_gb
22
+ attributes[:size_gb] ||= attributes[:size].to_i / DISK_SIZE_TO_GB if attributes[:size]
23
+ end
24
+
25
+ def size_gb= s
26
+ attributes[:size] = s.to_i * DISK_SIZE_TO_GB if s
27
+ end
28
+
29
+ def to_s
30
+ name
31
+ end
32
+
33
+ private
34
+
35
+ def defaults
36
+ {
37
+ :thin=>true,
38
+ :name=>"Hard disk",
39
+ :mode=>"persistent"
40
+ }
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,33 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/vsphere/models/compute/volume'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Vsphere
7
+
8
+ class Volumes < Fog::Collection
9
+
10
+ model Fog::Compute::Vsphere::Volume
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_volumes(vm.id)
19
+ when Fog::Compute::Vsphere::Template
20
+ load connection.list_template_volumes(vm.id)
21
+ else
22
+ raise 'volumes should have vm or template'
23
+ end
24
+ end
25
+
26
+ def get(id)
27
+ new connection.get_volume(id)
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,114 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def create_vm attributes = { }
6
+ # build up vm configuration
7
+
8
+ vm_cfg = {
9
+ :name => attributes[:name],
10
+ :guestId => attributes[:guest_id],
11
+ :files => { :vmPathName => vm_path_name(attributes) },
12
+ :numCPUs => attributes[:cpus],
13
+ :memoryMB => attributes[:memory_mb],
14
+ :deviceChange => device_change(attributes),
15
+ :extraConfig => extra_config(attributes),
16
+ }
17
+ resource_pool = if attributes[:resource_pool]
18
+ get_raw_resource_pool(attributes[:resource_pool], attributes[:cluster], attributes[:datacenter])
19
+ else
20
+ get_raw_cluster(attributes[:cluster], attributes[:datacenter]).resourcePool
21
+ end
22
+ vmFolder = get_raw_vmfolder(attributes[:path], attributes[:datacenter])
23
+ vm = vmFolder.CreateVM_Task(:config => vm_cfg, :pool => resource_pool).wait_for_completion
24
+ vm.config.instanceUuid
25
+ rescue => e
26
+ raise e, "failed to create vm: #{e}"
27
+ end
28
+
29
+ private
30
+
31
+ # this methods defines where the vm config files would be located,
32
+ # by default we prefer to keep it at the same place the (first) vmdk is located
33
+ def vm_path_name attributes
34
+ datastore = attributes[:volumes].first.datastore unless attributes[:volumes].empty?
35
+ datastore ||= 'datastore1'
36
+ "[#{datastore}]"
37
+ end
38
+
39
+ def device_change attributes
40
+ devices = []
41
+ if (nics = attributes[:interfaces])
42
+ devices << nics.map { |nic| create_interface(nic, nics.index(nic)) }
43
+ end
44
+
45
+ if (disks = attributes[:volumes])
46
+ devices << create_controller
47
+ devices << disks.map { |disk| create_disk(disk, disks.index(disk)) }
48
+ end
49
+ devices.flatten
50
+ end
51
+
52
+ def create_interface nic, index = 0, operation = :add
53
+ {
54
+ :operation => operation,
55
+ :device => nic.type.new(
56
+ :key => index,
57
+ :deviceInfo =>
58
+ {
59
+ :label => nic.name,
60
+ :summary => nic.summary,
61
+ },
62
+ :backing => RbVmomi::VIM.VirtualEthernetCardNetworkBackingInfo(:deviceName => nic.network),
63
+ :addressType => 'generated')
64
+ }
65
+ end
66
+
67
+ def create_controller operation = :add, controller_key = 1000, bus_id = 0
68
+ {
69
+ :operation => operation,
70
+ :device => RbVmomi::VIM.VirtualLsiLogicController(
71
+ :key => controller_key,
72
+ :busNumber => bus_id,
73
+ :sharedBus => :noSharing
74
+ )
75
+ }
76
+ end
77
+
78
+ def create_disk disk, index = 0, operation = :add, controller_key = 1000, unit_id = 0
79
+ {
80
+ :operation => operation,
81
+ :fileOperation => :create,
82
+ :device => RbVmomi::VIM.VirtualDisk(
83
+ :key => index,
84
+ :backing => RbVmomi::VIM.VirtualDiskFlatVer2BackingInfo(
85
+ :fileName => "[#{disk.datastore}]",
86
+ :diskMode => disk.mode.to_sym,
87
+ :thinProvisioned => disk.thin
88
+ ),
89
+ :controllerKey => controller_key,
90
+ :unitNumber => unit_id,
91
+ :capacityInKB => disk.size
92
+ )
93
+ }
94
+ end
95
+
96
+ def extra_config attributes
97
+ [
98
+ {
99
+ :key => 'bios.bootOrder',
100
+ :value => 'ethernet0'
101
+ }
102
+ ]
103
+ end
104
+
105
+ end
106
+
107
+ class Mock
108
+ def create_vm attributes = { }
109
+ end
110
+
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,25 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def get_cluster(name, datacenter_name)
6
+ cluster = get_raw_cluster(name, datacenter_name)
7
+ raise(Fog::Compute::Vsphere::NotFound) unless cluster
8
+ cluster_attributes(cluster, datacenter_name)
9
+ end
10
+
11
+ protected
12
+
13
+ def get_raw_cluster(name, datacenter_name)
14
+ dc = find_raw_datacenter(datacenter_name)
15
+ dc.find_compute_resource(name)
16
+ end
17
+ end
18
+
19
+ class Mock
20
+ def get_cluster(id)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def get_datacenter name
6
+ dc = find_raw_datacenter(name)
7
+ raise(Fog::Compute::Vsphere::NotFound) unless dc
8
+ {:name => dc.name, :status => dc.overallStatus}
9
+ end
10
+
11
+ protected
12
+
13
+ def find_raw_datacenter name
14
+ raw_datacenters.find {|d| d.name == name} || get_raw_datacenter(name)
15
+ end
16
+
17
+ def get_raw_datacenter name
18
+ @connection.serviceInstance.find_datacenter(name)
19
+ end
20
+ end
21
+
22
+ class Mock
23
+ def get_datacenter name
24
+ {:name => "Solutions", :status => "grey"}
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def get_datastore(name, datacenter_name)
6
+ datastore = get_raw_datastore(name, datacenter_name)
7
+ raise(Fog::Compute::Vsphere::NotFound) unless datastore
8
+ datastore_attributes(datastore, datacenter_name)
9
+ end
10
+
11
+ protected
12
+
13
+ def get_raw_datastore(name, datacenter_name)
14
+ dc = find_raw_datacenter(datacenter_name)
15
+ dc.datastoreFolder.find(name)
16
+ end
17
+ end
18
+
19
+ class Mock
20
+ def get_datastore(name, datacenter_name)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,73 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def get_folder(path, datacenter_name, type = nil)
6
+ type ||= 'vm'
7
+
8
+ # Cycle through all types of folders.
9
+ case type
10
+ when 'vm', :vm
11
+ # if you're a vm then grab the VM.
12
+ folder = get_raw_vmfolder(path, datacenter_name)
13
+ raise(Fog::Compute::Vsphere::NotFound) unless folder
14
+ folder_attributes(folder, datacenter_name)
15
+ when 'network', :network
16
+ raise "not implemented"
17
+ when 'datastore', :datastore
18
+ raise "not implemented"
19
+ else
20
+ raise ArgumentError, "#{type} is unknown"
21
+ end
22
+ end
23
+
24
+ protected
25
+
26
+ def get_raw_vmfolder(path, datacenter_name)
27
+ # The required path syntax - 'topfolder/subfolder
28
+
29
+ # Clean up path to be relative since we're providing datacenter name
30
+ paths = path.sub(/^\/?Datacenters\/#{datacenter_name}\/vm\/?/, '').split('/')
31
+ dc = find_raw_datacenter(datacenter_name)
32
+ dc_root_folder = dc.vmFolder
33
+
34
+ return dc_root_folder if paths.empty?
35
+ # Walk the tree resetting the folder pointer as we go
36
+ paths.inject(dc_root_folder) do |last_returned_folder, sub_folder|
37
+ # JJM VIM::Folder#find appears to be quite efficient as it uses the
38
+ # searchIndex It certainly appears to be faster than
39
+ # VIM::Folder#inventory since that returns _all_ managed objects of
40
+ # a certain type _and_ their properties.
41
+ sub = last_returned_folder.find(sub_folder, RbVmomi::VIM::Folder)
42
+ raise ArgumentError, "Could not descend into #{sub_folder}. Please check your path. #{path}" unless sub
43
+ sub
44
+ end
45
+ end
46
+
47
+ def folder_attributes(folder, datacenter_name)
48
+ {
49
+ :id => managed_obj_id(folder),
50
+ :name => folder.name,
51
+ :parent => folder.parent.name,
52
+ :datacenter => datacenter_name,
53
+ :type => folder_type(folder),
54
+ :path => folder.path.map(&:last).join('/'),
55
+ }
56
+ end
57
+
58
+ def folder_type(folder)
59
+ types = folder.childType
60
+ return :vm if types.include?('VirtualMachine')
61
+ return :network if types.include?('Network')
62
+ return :datastore if types.include?('Datastore')
63
+ end
64
+ end
65
+
66
+ class Mock
67
+ def get_folder(path, filters = { })
68
+ end
69
+ end
70
+
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,25 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def get_network(name, datacenter_name)
6
+ network = get_raw_network(name, datacenter_name)
7
+ raise(Fog::Compute::Vsphere::NotFound) unless network
8
+ network_attributes(network, datacenter_name)
9
+ end
10
+
11
+ protected
12
+
13
+ def get_raw_network(name, datacenter_name)
14
+ dc = find_raw_datacenter(datacenter_name)
15
+ dc.networkFolder.find(name)
16
+ end
17
+ end
18
+
19
+ class Mock
20
+ def get_network(id)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def get_resource_pool(name, cluster_name, datacenter_name)
6
+ resource_pool = get_raw_resource_pool(name, cluster_name, datacenter_name)
7
+ raise(Fog::Compute::Vsphere::NotFound) unless resource_pool
8
+ resource_pool_attributes(resource_pool, cluster_name, datacenter_name)
9
+ end
10
+
11
+ protected
12
+
13
+ def get_raw_resource_pool(name, cluster_name, datacenter_name)
14
+ dc = get_raw_datacenter(datacenter_name)
15
+ cluster = dc.find_compute_resource(cluster_name)
16
+ cluster.resourcePool.find name
17
+ end
18
+ end
19
+
20
+ class Mock
21
+ def get_resource_pool(name, cluster_name, datacenter_name)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,62 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def get_virtual_machine(id, datacenter_name = nil)
6
+ convert_vm_mob_ref_to_attr_hash(get_vm_ref(id, datacenter_name))
7
+ end
8
+
9
+ protected
10
+
11
+ def get_vm_ref(id, dc = nil)
12
+ vm = case id
13
+ # UUID based
14
+ when /[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}/
15
+ @connection.searchIndex.FindByUuid :uuid => id, :vmSearch => true, :instanceUuid => true, :datacenter => dc
16
+ else
17
+ # try to find based on VM name
18
+ if dc
19
+ get_datacenter(dc).find_vm(id)
20
+ else
21
+ raw_datacenters.map { |d| d.find_vm(id) }.compact.first
22
+ end
23
+ end
24
+ vm ? vm : raise(Fog::Compute::Vsphere::NotFound, "#{id} was not found")
25
+ end
26
+ end
27
+
28
+ class Mock
29
+ def get_virtual_machine(id, datacenter_name = nil)
30
+ case id
31
+ when "5032c8a5-9c5e-ba7a-3804-832a03e16381", 'vm-715'
32
+ { :resource_pool => "Resources",
33
+ :memory_mb => 2196,
34
+ :power_state => "poweredOn",
35
+ :mac_addresses => { "Network adapter 1" => "00:50:56:b2:00:af" },
36
+ :hostname => "centos56gm.localdomain",
37
+ :cpus => 1,
38
+ :connection_state => "connected",
39
+ :mo_ref => "vm-715",
40
+ :overall_status => "green",
41
+ :datacenter => "Solutions",
42
+ :instance_uuid => "5029c440-85ee-c2a1-e9dd-b63e39364603",
43
+ :hypervisor => "gunab.puppetlabs.lan",
44
+ :guest_id => "rhel6_64Guest",
45
+ :cluster => "virtlabcluster",
46
+ :tools_state => "toolsOk",
47
+ :name => "jefftest",
48
+ :operatingsystem => "Red Hat Enterprise Linux 6 (64-bit)",
49
+ :path => "/",
50
+ :tools_version => "guestToolsUnmanaged",
51
+ :ipaddress => "192.168.100.187",
52
+ :id => "5032c8a5-9c5e-ba7a-3804-832a03e16381",
53
+ :uuid => "42329da7-e8ab-29ec-1892-d6a4a964912a"
54
+ }
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
62
+ end