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