fog 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Rakefile +3 -3
- data/changelog.txt +213 -0
- data/docs/compute/index.markdown +15 -1
- data/fog.gemspec +3 -3
- data/lib/fog.rb +1 -1
- data/lib/fog/aws.rb +9 -0
- data/lib/fog/aws/auto_scaling.rb +3 -1
- data/lib/fog/aws/cloud_formation.rb +2 -0
- data/lib/fog/aws/cloud_watch.rb +2 -0
- data/lib/fog/aws/compute.rb +9 -3
- data/lib/fog/aws/elasticache.rb +8 -1
- data/lib/fog/aws/elb.rb +2 -0
- data/lib/fog/aws/models/cloud_watch/metric_statistic.rb +1 -2
- data/lib/fog/aws/models/compute/security_group.rb +1 -1
- data/lib/fog/aws/models/compute/server.rb +3 -1
- data/lib/fog/aws/models/dns/records.rb +3 -3
- data/lib/fog/aws/models/elb/load_balancer.rb +6 -0
- data/lib/fog/aws/models/storage/file.rb +2 -2
- data/lib/fog/aws/models/storage/files.rb +4 -4
- data/lib/fog/aws/parsers/compute/describe_instance_status.rb +64 -0
- data/lib/fog/aws/parsers/compute/describe_security_groups.rb +1 -1
- data/lib/fog/aws/parsers/sqs/receive_message.rb +1 -1
- data/lib/fog/aws/parsers/sts/get_session_token.rb +31 -0
- data/lib/fog/aws/rds.rb +36 -1
- data/lib/fog/aws/requests/compute/describe_availability_zones.rb +3 -0
- data/lib/fog/aws/requests/compute/describe_instance_status.rb +36 -0
- data/lib/fog/aws/requests/compute/describe_security_groups.rb +2 -0
- data/lib/fog/aws/requests/elb/set_load_balancer_listener_ssl_certificate.rb +27 -0
- data/lib/fog/aws/requests/rds/create_db_instance.rb +64 -1
- data/lib/fog/aws/requests/rds/delete_db_instance.rb +19 -3
- data/lib/fog/aws/requests/rds/describe_db_instances.rb +40 -1
- data/lib/fog/aws/requests/rds/describe_db_reserved_instances.rb +1 -1
- data/lib/fog/aws/requests/rds/modify_db_instance.rb +24 -1
- data/lib/fog/aws/requests/rds/reboot_db_instance.rb +17 -1
- data/lib/fog/aws/requests/storage/{hash_to_acl.rb → acl_utils.rb} +8 -0
- data/lib/fog/aws/requests/storage/copy_object.rb +8 -0
- data/lib/fog/aws/requests/storage/get_bucket_acl.rb +7 -1
- data/lib/fog/aws/requests/storage/get_object_acl.rb +7 -1
- data/lib/fog/aws/requests/storage/get_object_http_url.rb +4 -3
- data/lib/fog/aws/requests/storage/get_object_https_url.rb +4 -3
- data/lib/fog/aws/requests/storage/put_bucket_acl.rb +2 -2
- data/lib/fog/aws/requests/storage/put_object_acl.rb +1 -1
- data/lib/fog/aws/requests/sts/get_federation_token.rb +20 -0
- data/lib/fog/aws/requests/sts/get_session_token.rb +18 -0
- data/lib/fog/aws/simpledb.rb +5 -1
- data/lib/fog/aws/sns.rb +2 -0
- data/lib/fog/aws/sqs.rb +5 -1
- data/lib/fog/aws/storage.rb +6 -0
- data/lib/fog/aws/sts.rb +137 -0
- data/lib/fog/bin.rb +1 -0
- data/lib/fog/bin/aws.rb +2 -0
- data/lib/fog/bin/clodo.rb +31 -0
- data/lib/fog/brightbox/compute.rb +7 -0
- data/lib/fog/brightbox/models/compute/cloud_ip.rb +10 -2
- data/lib/fog/brightbox/models/compute/firewall_policies.rb +29 -0
- data/lib/fog/brightbox/models/compute/firewall_policy.rb +65 -0
- data/lib/fog/brightbox/models/compute/firewall_rule.rb +54 -0
- data/lib/fog/brightbox/models/compute/firewall_rules.rb +24 -0
- data/lib/fog/brightbox/models/compute/image.rb +2 -0
- data/lib/fog/brightbox/models/compute/server.rb +41 -6
- data/lib/fog/brightbox/models/compute/server_group.rb +56 -17
- data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +14 -0
- data/lib/fog/clodo.rb +34 -0
- data/lib/fog/clodo/compute.rb +152 -0
- data/lib/fog/clodo/models/compute/image.rb +31 -0
- data/lib/fog/clodo/models/compute/images.rb +28 -0
- data/lib/fog/clodo/models/compute/server.rb +163 -0
- data/lib/fog/clodo/models/compute/servers.rb +36 -0
- data/lib/fog/clodo/requests/compute/add_ip_address.rb +49 -0
- data/lib/fog/clodo/requests/compute/create_server.rb +112 -0
- data/lib/fog/clodo/requests/compute/delete_ip_address.rb +47 -0
- data/lib/fog/clodo/requests/compute/delete_server.rb +44 -0
- data/lib/fog/clodo/requests/compute/get_image_details.rb +20 -0
- data/lib/fog/clodo/requests/compute/get_server_details.rb +49 -0
- data/lib/fog/clodo/requests/compute/list_images.rb +48 -0
- data/lib/fog/clodo/requests/compute/list_images_detail.rb +61 -0
- data/lib/fog/clodo/requests/compute/list_servers.rb +50 -0
- data/lib/fog/clodo/requests/compute/list_servers_detail.rb +51 -0
- data/lib/fog/clodo/requests/compute/move_ip_address.rb +34 -0
- data/lib/fog/clodo/requests/compute/reboot_server.rb +19 -0
- data/lib/fog/clodo/requests/compute/rebuild_server.rb +21 -0
- data/lib/fog/clodo/requests/compute/server_action.rb +25 -0
- data/lib/fog/clodo/requests/compute/start_server.rb +19 -0
- data/lib/fog/clodo/requests/compute/stop_server.rb +19 -0
- data/lib/fog/compute.rb +3 -0
- data/lib/fog/core/credentials.rb +3 -3
- data/lib/fog/core/errors.rb +2 -0
- data/lib/fog/core/wait_for.rb +1 -1
- data/lib/fog/dnsmadeeasy/dns.rb +1 -1
- data/lib/fog/libvirt/compute.rb +2 -0
- data/lib/fog/libvirt/models/compute/nodes.rb +1 -3
- data/lib/fog/libvirt/models/compute/server.rb +8 -1
- data/lib/fog/providers.rb +1 -0
- data/lib/fog/rackspace/dns.rb +10 -2
- data/lib/fog/rackspace/load_balancers.rb +3 -0
- data/lib/fog/rackspace/models/compute/server.rb +2 -2
- data/lib/fog/rackspace/models/dns/callback.rb +3 -1
- data/lib/fog/rackspace/models/dns/record.rb +4 -0
- data/lib/fog/rackspace/models/load_balancers/load_balancer.rb +18 -8
- data/lib/fog/rackspace/requests/load_balancers/delete_nodes.rb +1 -2
- data/lib/fog/rackspace/requests/load_balancers/get_error_page.rb +15 -0
- data/lib/fog/rackspace/requests/load_balancers/list_load_balancers.rb +8 -2
- data/lib/fog/rackspace/requests/load_balancers/remove_error_page.rb +15 -0
- data/lib/fog/rackspace/requests/load_balancers/set_error_page.rb +21 -0
- data/lib/fog/vcloud/compute.rb +7 -1
- data/lib/fog/vcloud/models/compute/catalogs.rb +4 -5
- data/lib/fog/vcloud/models/compute/helpers/status.rb +37 -0
- data/lib/fog/vcloud/models/compute/network.rb +13 -49
- data/lib/fog/vcloud/models/compute/networks.rb +12 -3
- data/lib/fog/vcloud/models/compute/organization.rb +44 -0
- data/lib/fog/vcloud/models/compute/organizations.rb +29 -0
- data/lib/fog/vcloud/models/compute/server.rb +35 -56
- data/lib/fog/vcloud/models/compute/servers.rb +11 -13
- data/lib/fog/vcloud/models/compute/vapp.rb +41 -0
- data/lib/fog/vcloud/models/compute/vapps.rb +32 -0
- data/lib/fog/vcloud/models/compute/vdc.rb +11 -26
- data/lib/fog/vcloud/models/compute/vdcs.rb +6 -8
- data/lib/fog/vcloud/requests/compute/get_server.rb +10 -0
- data/lib/fog/vsphere/compute.rb +1 -0
- data/lib/fog/vsphere/models/compute/server.rb +18 -0
- data/lib/fog/vsphere/models/compute/servers.rb +8 -2
- data/lib/fog/vsphere/requests/compute/datacenters.rb +34 -0
- data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +132 -91
- data/lib/fog/vsphere/requests/compute/vm_clone.rb +76 -37
- data/spec/lib/fog/aws/parsers/sqs/receive_message_spec.rb +58 -0
- data/tests/aws/models/elb/model_tests.rb +5 -0
- data/tests/aws/requests/compute/instance_tests.rb +23 -0
- data/tests/aws/requests/compute/security_group_tests.rb +1 -0
- data/tests/aws/requests/elb/listener_tests.rb +4 -0
- data/tests/aws/requests/storage/{hash_to_acl_tests.rb → acl_utils_tests.rb} +38 -2
- data/tests/aws/requests/storage/bucket_tests.rb +0 -3
- data/tests/aws/requests/storage/object_tests.rb +2 -4
- data/tests/aws/requests/sts/get_federation_token_tests.rb +21 -0
- data/tests/aws/requests/sts/session_token_tests.rb +16 -0
- data/tests/brightbox/requests/compute/account_tests.rb +11 -6
- data/tests/brightbox/requests/compute/api_client_tests.rb +23 -12
- data/tests/brightbox/requests/compute/cloud_ip_tests.rb +32 -17
- data/tests/brightbox/requests/compute/helper.rb +29 -3
- data/tests/brightbox/requests/compute/image_tests.rb +17 -14
- data/tests/brightbox/requests/compute/interface_tests.rb +3 -2
- data/tests/brightbox/requests/compute/load_balancer_tests.rb +57 -11
- data/tests/brightbox/requests/compute/server_group_tests.rb +29 -22
- data/tests/brightbox/requests/compute/server_tests.rb +41 -22
- data/tests/brightbox/requests/compute/server_type_tests.rb +7 -6
- data/tests/brightbox/requests/compute/user_tests.rb +11 -16
- data/tests/brightbox/requests/compute/zone_tests.rb +7 -6
- data/tests/clodo/requests/compute/image_tests.rb +36 -0
- data/tests/clodo/requests/compute/server_tests.rb +152 -0
- data/tests/compute/helper.rb +1 -1
- data/tests/core/credential_tests.rb +2 -2
- data/tests/glesys/requests/compute/helper.rb +91 -66
- data/tests/glesys/requests/compute/ip_tests.rb +1 -1
- data/tests/glesys/requests/compute/server_tests.rb +5 -5
- data/tests/helpers/mock_helper.rb +2 -0
- data/tests/rackspace/models/dns/zone_tests.rb +14 -0
- data/tests/rackspace/models/{access_list_tests.rb → load_balancers/access_list_tests.rb} +0 -0
- data/tests/rackspace/models/{access_lists_tests.rb → load_balancers/access_lists_tests.rb} +0 -0
- data/tests/rackspace/models/{load_balancer_tests.rb → load_balancers/load_balancer_tests.rb} +25 -0
- data/tests/rackspace/models/{load_balancers_tests.rb → load_balancers/load_balancers_tests.rb} +0 -0
- data/tests/rackspace/models/{node_tests.rb → load_balancers/node_tests.rb} +0 -0
- data/tests/rackspace/models/{nodes_tests.rb → load_balancers/nodes_tests.rb} +0 -0
- data/tests/rackspace/models/{virtual_ip_tests.rb → load_balancers/virtual_ip_tests.rb} +0 -0
- data/tests/rackspace/models/{virtual_ips_tests.rb → load_balancers/virtual_ips_tests.rb} +0 -0
- data/tests/rackspace/requests/dns/dns_tests.rb +4 -2
- data/tests/rackspace/requests/load_balancers/error_page_tests.rb +31 -0
- data/tests/rackspace/requests/load_balancers/helper.rb +27 -11
- data/tests/rackspace/requests/load_balancers/load_balancer_tests.rb +4 -1
- data/tests/rackspace/requests/load_balancers/node_tests.rb +24 -25
- data/tests/slicehost/requests/compute/slice_tests.rb +2 -2
- data/tests/storm_on_demand/requests/compute/server_tests.rb +3 -3
- data/tests/vcloud/data/api_+_v1.0_+_admin_+_network_+_2 +110 -0
- data/tests/vcloud/data/api_+_v1.0_+_login +5 -0
- data/tests/vcloud/data/api_+_v1.0_+_network_+_1 +44 -0
- data/tests/vcloud/data/api_+_v1.0_+_network_+_2 +31 -0
- data/tests/vcloud/data/api_+_v1.0_+_org_+_1 +17 -0
- data/tests/vcloud/data/api_+_v1.0_+_vApp_+_vapp-1 +369 -0
- data/tests/vcloud/data/api_+_v1.0_+_vApp_+_vm-1 +139 -0
- data/tests/vcloud/data/api_+_v1.0_+_vApp_+_vm-2 +155 -0
- data/tests/vcloud/data/api_+_v1.0_+_vdc_+_1 +61 -0
- data/tests/vcloud/models/compute/conn_helper.rb +20 -0
- data/tests/vcloud/models/compute/network_tests.rb +65 -0
- data/tests/vcloud/models/compute/networks_tests.rb +42 -0
- data/tests/vcloud/models/compute/organization_tests.rb +13 -0
- data/tests/vcloud/models/compute/organizations_tests.rb +14 -0
- data/tests/vcloud/models/compute/server_tests.rb +136 -0
- data/tests/vcloud/models/compute/servers_tests.rb +10 -89
- data/tests/vcloud/models/compute/vapp_tests.rb +27 -0
- data/tests/vcloud/models/compute/vapps_tests.rb +17 -0
- data/tests/vcloud/models/compute/vdc_tests.rb +42 -0
- data/tests/vcloud/models/compute/vdcs_tests.rb +17 -0
- data/tests/vsphere/requests/compute/vm_clone_tests.rb +2 -6
- metadata +151 -55
@@ -13,8 +13,9 @@ module Fog
|
|
13
13
|
attribute :href, :aliases => :Href
|
14
14
|
|
15
15
|
def all
|
16
|
-
check_href!(
|
17
|
-
|
16
|
+
check_href!("Vapp")
|
17
|
+
vapp.load_unless_loaded!
|
18
|
+
load(vapp.children||[])
|
18
19
|
end
|
19
20
|
|
20
21
|
def get(uri)
|
@@ -37,19 +38,16 @@ module Fog
|
|
37
38
|
|
38
39
|
private
|
39
40
|
|
40
|
-
def
|
41
|
-
|
42
|
-
resource_entities[:ResourceEntity]
|
43
|
-
end
|
41
|
+
def vapp
|
42
|
+
@vapp ||= (attributes[:vapp] || init_vapp)
|
44
43
|
end
|
45
44
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
45
|
+
def init_vapp
|
46
|
+
Fog::Vcloud::Compute::Vapp.new(
|
47
|
+
:connection => connection,
|
48
|
+
:href => self.href,
|
49
|
+
:collection => Fog::Vcloud::Compute::Vapps.new(:connection => connection)
|
50
|
+
)
|
53
51
|
end
|
54
52
|
|
55
53
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'fog/vcloud/models/compute/helpers/status'
|
2
|
+
module Fog
|
3
|
+
module Vcloud
|
4
|
+
class Compute
|
5
|
+
class Vapp < Fog::Vcloud::Model
|
6
|
+
|
7
|
+
include Fog::Vcloud::Compute::Helpers::Status
|
8
|
+
|
9
|
+
identity :href
|
10
|
+
|
11
|
+
ignore_attributes :xmlns, :xmlns_xsi, :xmlns_xsd
|
12
|
+
|
13
|
+
attribute :name
|
14
|
+
attribute :type
|
15
|
+
attribute :status
|
16
|
+
attribute :description, :aliases => :Description
|
17
|
+
attribute :deployed, :type => :boolean
|
18
|
+
|
19
|
+
attribute :children, :aliases => :Children, :squash => :Vm
|
20
|
+
attribute :lease_settings, :aliases => :LeaseSettingsSection
|
21
|
+
|
22
|
+
attribute :other_links, :aliases => :Link
|
23
|
+
|
24
|
+
def servers
|
25
|
+
@servers ||= Fog::Vcloud::Compute::Servers.
|
26
|
+
new( :connection => connection,
|
27
|
+
:href => href,
|
28
|
+
:vapp => self
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def networks
|
33
|
+
@networks ||= Fog::Vcloud::Compute::Networks.
|
34
|
+
new( :connection => connection,
|
35
|
+
:href => href
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'fog/vcloud/models/compute/vapp'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Vcloud
|
5
|
+
class Compute
|
6
|
+
|
7
|
+
class Vapps < Collection
|
8
|
+
|
9
|
+
model Fog::Vcloud::Compute::Vapp
|
10
|
+
|
11
|
+
undef_method :create
|
12
|
+
|
13
|
+
attribute :href
|
14
|
+
|
15
|
+
def all
|
16
|
+
resource_entities = (re=connection.get_vdc(self.href).body[:ResourceEntities][:ResourceEntity]).is_a?(Array) ? re : [re].compact
|
17
|
+
data = resource_entities.select { |re| re[:type] == "application/vnd.vmware.vcloud.vApp+xml" }
|
18
|
+
load(data)
|
19
|
+
end
|
20
|
+
|
21
|
+
def get(uri)
|
22
|
+
if data = connection.get_vapp(uri)
|
23
|
+
new(data.body)
|
24
|
+
end
|
25
|
+
rescue Fog::Errors::NotFound
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -10,13 +10,17 @@ module Fog
|
|
10
10
|
attribute :name
|
11
11
|
attribute :type
|
12
12
|
attribute :description, :aliases => :Description
|
13
|
-
attribute :
|
13
|
+
attribute :network_quota, :aliases => :NetworkQuota, :type => :integer
|
14
|
+
attribute :nic_quota, :aliases => :NicQuota, :type => :integer
|
15
|
+
attribute :vm_quota, :aliases => :VmQuota, :type => :integer
|
16
|
+
attribute :is_enabled, :aliases => :IsEnabled, :type => :boolean
|
14
17
|
attribute :compute_capacity, :aliases => :ComputeCapacity
|
15
18
|
attribute :storage_capacity, :aliases => :StorageCapacity
|
16
19
|
attribute :available_networks, :aliases => :AvailableNetworks, :squash => :Network
|
20
|
+
|
21
|
+
attribute :other_links, :aliases => :Link
|
22
|
+
|
17
23
|
attribute :resource_entities, :aliases => :ResourceEntities, :squash => :ResourceEntity
|
18
|
-
attribute :deployed_vm_quota
|
19
|
-
attribute :instantiated_vm_quota
|
20
24
|
|
21
25
|
def networks
|
22
26
|
@networks ||= Fog::Vcloud::Compute::Networks.
|
@@ -24,32 +28,13 @@ module Fog
|
|
24
28
|
:href => href )
|
25
29
|
end
|
26
30
|
|
27
|
-
def
|
28
|
-
@
|
31
|
+
def vapps
|
32
|
+
@vapps ||= Fog::Vcloud::Compute::Vapps.
|
29
33
|
new( :connection => connection,
|
30
|
-
:href => href
|
34
|
+
:href => href
|
35
|
+
)
|
31
36
|
end
|
32
37
|
|
33
|
-
def tasks
|
34
|
-
@tasks ||= Fog::Vcloud::Compute::Tasks.
|
35
|
-
new( :connection => connection,
|
36
|
-
:href => href + "/tasksList" )
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def collection_based_on_type(type, klass = nil)
|
42
|
-
load_unless_loaded!
|
43
|
-
test_links = other_links.kind_of?(Array) ? other_links : [other_links]
|
44
|
-
if link = test_links.detect { |link| link[:type] == type }
|
45
|
-
case type
|
46
|
-
when "application/vnd.vmware.vcloud.catalog+xml"
|
47
|
-
Fog::Vcloud::Compute::Catalog
|
48
|
-
end.new( :connection => connection, :href => link[:href] )
|
49
|
-
else
|
50
|
-
[ ]
|
51
|
-
end
|
52
|
-
end
|
53
38
|
end
|
54
39
|
end
|
55
40
|
end
|
@@ -10,8 +10,11 @@ module Fog
|
|
10
10
|
|
11
11
|
undef_method :create
|
12
12
|
|
13
|
+
attribute :href
|
14
|
+
|
13
15
|
def all
|
14
|
-
|
16
|
+
links = (l=connection.get_organization(org_uri).body[:Link]).is_a?(Array) ? l : [l].compact
|
17
|
+
data = links.select { |link| link[:type] == "application/vnd.vmware.vcloud.vdc+xml" }
|
15
18
|
data.each { |link| link.delete_if { |key, value| [:rel].include?(key) } }
|
16
19
|
load(data)
|
17
20
|
end
|
@@ -24,16 +27,11 @@ module Fog
|
|
24
27
|
nil
|
25
28
|
end
|
26
29
|
|
27
|
-
def organization_uri
|
28
|
-
@organization_uri ||= connection.default_organization_uri
|
29
|
-
end
|
30
|
-
|
31
30
|
private
|
32
31
|
|
33
|
-
def
|
34
|
-
|
32
|
+
def org_uri
|
33
|
+
self.href ||= connection.default_organization_uri
|
35
34
|
end
|
36
|
-
|
37
35
|
end
|
38
36
|
end
|
39
37
|
end
|
data/lib/fog/vsphere/compute.rb
CHANGED
@@ -57,6 +57,24 @@ module Fog
|
|
57
57
|
connection.vm_destroy('instance_uuid' => instance_uuid)
|
58
58
|
end
|
59
59
|
|
60
|
+
def clone(options = {})
|
61
|
+
requires :name, :path
|
62
|
+
# Convert symbols to strings
|
63
|
+
req_options = options.inject({}) { |hsh, (k,v)| hsh[k.to_s] = v; hsh }
|
64
|
+
# Give our path to the request
|
65
|
+
req_options['path'] ="#{path}/#{name}"
|
66
|
+
# Perform the actual clone
|
67
|
+
clone_results = connection.vm_clone(req_options)
|
68
|
+
# Create the new VM model.
|
69
|
+
new_vm = self.class.new(clone_results['vm_attributes'])
|
70
|
+
# We need to assign the collection and the connection otherwise we
|
71
|
+
# cannot reload the model.
|
72
|
+
new_vm.collection = self.collection
|
73
|
+
new_vm.connection = self.connection
|
74
|
+
# Return the new VM model.
|
75
|
+
new_vm
|
76
|
+
end
|
77
|
+
|
60
78
|
end
|
61
79
|
|
62
80
|
end
|
@@ -9,8 +9,14 @@ module Fog
|
|
9
9
|
|
10
10
|
model Fog::Compute::Vsphere::Server
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
# 'path' => '/Datacenters/vm/Jeff/Templates' will be MUCH faster.
|
13
|
+
# 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)
|
14
20
|
load(response['virtual_machines'])
|
15
21
|
end
|
16
22
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Vsphere
|
4
|
+
class Real
|
5
|
+
def datacenters
|
6
|
+
@datacenters ||= datacenters_reload
|
7
|
+
# Hide the values which are the RbVmomi instances
|
8
|
+
@datacenters.keys
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def datacenters_reload
|
14
|
+
@rootfolder ||= @connection.rootFolder
|
15
|
+
inventory = @rootfolder.inventory(:Datacenter => [ 'name' ])[@rootfolder]
|
16
|
+
# Convert the inventory into a Hash of the form: We remove the
|
17
|
+
# property selectors. { "<dc_name>" => #<RbVmomi::VIM::Datacenter> }
|
18
|
+
# The Datacenter instance itself is at index 0 and the properties we
|
19
|
+
# collected are at index 1.
|
20
|
+
inventory.inject({}) do |memo, (name,dc_ary)|
|
21
|
+
memo[name] = dc_ary[0]
|
22
|
+
memo
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Mock
|
28
|
+
def datacenters
|
29
|
+
[ "Solutions", "Solutions2", "Solutions3" ]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,13 +1,15 @@
|
|
1
1
|
module Fog
|
2
2
|
module Compute
|
3
3
|
class Vsphere
|
4
|
-
|
5
4
|
class Real
|
6
|
-
|
7
5
|
def list_virtual_machines(options = {})
|
8
|
-
#
|
6
|
+
# Listing all VM's can be quite slow and expensive. Try and optimize
|
7
|
+
# based on the available options we have. These conditions are in
|
8
|
+
# ascending order of time to complete for large deployments.
|
9
9
|
if options['instance_uuid'] then
|
10
10
|
list_all_virtual_machines_by_instance_uuid(options)
|
11
|
+
elsif options['folder'] then
|
12
|
+
list_all_virtual_machines_in_folder(options)
|
11
13
|
else
|
12
14
|
list_all_virtual_machines
|
13
15
|
end
|
@@ -15,6 +17,48 @@ module Fog
|
|
15
17
|
|
16
18
|
private
|
17
19
|
|
20
|
+
def list_all_virtual_machines_in_folder(options = {})
|
21
|
+
# Tap gets rid of the leading empty string and "Datacenters" element
|
22
|
+
# and returns the array.
|
23
|
+
path_elements = options['folder'].split('/').tap { |ary| ary.shift 2 }
|
24
|
+
# The DC name itself.
|
25
|
+
dc_name = path_elements.shift
|
26
|
+
# If the first path element contains "vm" this denotes the vmFolder
|
27
|
+
# and needs to be shifted out since each DC contains only one
|
28
|
+
# vmFolder
|
29
|
+
path_elements.shift if path_elements[0] = 'vm'
|
30
|
+
# Make sure @datacenters is populated (the keys are DataCenter instances)
|
31
|
+
self.datacenters.include? dc_name or raise ArgumentError, "Could not find a Datacenter named #{dc_name}"
|
32
|
+
# Get the datacenter managed object
|
33
|
+
dc = @datacenters[dc_name]
|
34
|
+
|
35
|
+
# Get the VM Folder (Group) efficiently
|
36
|
+
vm_folder = dc.vmFolder
|
37
|
+
|
38
|
+
# Walk the tree resetting the folder pointer as we go
|
39
|
+
folder = path_elements.inject(vm_folder) do |current_folder, sub_folder_name|
|
40
|
+
# JJM VIM::Folder#find appears to be quite efficient as it uses the
|
41
|
+
# searchIndex It certainly appears to be faster than
|
42
|
+
# VIM::Folder#inventory since that returns _all_ managed objects of
|
43
|
+
# a certain type _and_ their properties.
|
44
|
+
sub_folder = current_folder.find(sub_folder_name, RbVmomi::VIM::Folder)
|
45
|
+
raise ArgumentError, "Could not descend into #{sub_folder_name}. Please check your path." unless sub_folder
|
46
|
+
sub_folder
|
47
|
+
end
|
48
|
+
|
49
|
+
# This should be efficient since we're not obtaining properties
|
50
|
+
virtual_machines = folder.children.inject([]) do |ary, child|
|
51
|
+
if child.is_a? RbVmomi::VIM::VirtualMachine then
|
52
|
+
ary << convert_vm_mob_ref_to_attr_hash(child)
|
53
|
+
end
|
54
|
+
ary
|
55
|
+
end
|
56
|
+
|
57
|
+
# Return the managed objects themselves as an array. These may be converted
|
58
|
+
# to an attribute has using convert_vm_mob_ref_to_attr_hash
|
59
|
+
{ 'virtual_machines' => virtual_machines }
|
60
|
+
end
|
61
|
+
|
18
62
|
def list_all_virtual_machines_by_instance_uuid(options = {})
|
19
63
|
uuid = options['instance_uuid']
|
20
64
|
search_filter = { :uuid => uuid, 'vmSearch' => true, 'instanceUuid' => true }
|
@@ -94,102 +138,99 @@ module Fog
|
|
94
138
|
case options['instance_uuid']
|
95
139
|
when nil
|
96
140
|
rval = YAML.load <<-'ENDvmLISTING'
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
141
|
+
---
|
142
|
+
virtual_machines:
|
143
|
+
- name: centos56gm
|
144
|
+
hypervisor: gunab.puppetlabs.lan
|
145
|
+
tools_version: guestToolsCurrent
|
146
|
+
ipaddress:
|
147
|
+
mo_ref: vm-698
|
148
|
+
power_state: poweredOff
|
149
|
+
uuid: 42322347-d791-cd34-80b9-e25fe28ad37c
|
150
|
+
is_a_template: true
|
151
|
+
id: 50323f93-6835-1178-8b8f-9e2109890e1a
|
152
|
+
tools_state: toolsNotRunning
|
153
|
+
connection_state: connected
|
154
|
+
instance_uuid: 50323f93-6835-1178-8b8f-9e2109890e1a
|
155
|
+
hostname:
|
156
|
+
mac_addresses:
|
157
|
+
Network adapter 1: 00:50:56:b2:00:a1
|
158
|
+
operatingsystem:
|
159
|
+
- name: centos56gm2
|
160
|
+
hypervisor: gunab.puppetlabs.lan
|
161
|
+
tools_version: guestToolsCurrent
|
162
|
+
ipaddress:
|
163
|
+
mo_ref: vm-640
|
164
|
+
power_state: poweredOff
|
165
|
+
uuid: 564ddcbe-853a-d29a-b329-a0a3693a004d
|
166
|
+
is_a_template: true
|
167
|
+
id: 5257dee8-050c-cbcd-ae25-db0e582ab530
|
168
|
+
tools_state: toolsNotRunning
|
169
|
+
connection_state: connected
|
170
|
+
instance_uuid: 5257dee8-050c-cbcd-ae25-db0e582ab530
|
171
|
+
hostname:
|
172
|
+
mac_addresses:
|
173
|
+
Network adapter 1: 00:0c:29:3a:00:4d
|
174
|
+
operatingsystem:
|
175
|
+
- name: dashboard_gm
|
176
|
+
hypervisor: gunab.puppetlabs.lan
|
177
|
+
tools_version: guestToolsCurrent
|
178
|
+
ipaddress: 192.168.100.184
|
179
|
+
mo_ref: vm-669
|
180
|
+
power_state: poweredOn
|
181
|
+
uuid: 564d3f91-3452-a509-a678-1246f7897979
|
182
|
+
is_a_template: false
|
183
|
+
id: 5032739c-c871-c0d2-034f-9700a0b5383e
|
184
|
+
tools_state: toolsOk
|
185
|
+
connection_state: connected
|
186
|
+
instance_uuid: 5032739c-c871-c0d2-034f-9700a0b5383e
|
187
|
+
hostname: compliance.puppetlabs.vm
|
188
|
+
mac_addresses:
|
189
|
+
Network adapter 1: 00:50:56:b2:00:96
|
190
|
+
operatingsystem: Red Hat Enterprise Linux 6 (64-bit)
|
191
|
+
- name: jefftest
|
192
|
+
hypervisor: gunab.puppetlabs.lan
|
193
|
+
tools_version: guestToolsCurrent
|
194
|
+
ipaddress: 192.168.100.187
|
195
|
+
mo_ref: vm-715
|
196
|
+
power_state: poweredOn
|
197
|
+
uuid: 42329da7-e8ab-29ec-1892-d6a4a964912a
|
198
|
+
is_a_template: false
|
199
|
+
id: 5032c8a5-9c5e-ba7a-3804-832a03e16381
|
200
|
+
tools_state: toolsOk
|
201
|
+
connection_state: connected
|
202
|
+
instance_uuid: 5032c8a5-9c5e-ba7a-3804-832a03e16381
|
203
|
+
hostname: centos56gm.localdomain
|
204
|
+
mac_addresses:
|
205
|
+
Network adapter 1: 00:50:56:b2:00:af
|
206
|
+
operatingsystem: CentOS 4/5 (32-bit)
|
207
|
+
ENDvmLISTING
|
164
208
|
when '5032c8a5-9c5e-ba7a-3804-832a03e16381'
|
165
209
|
YAML.load <<-'5032c8a5-9c5e-ba7a-3804-832a03e16381'
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
210
|
+
---
|
211
|
+
virtual_machines:
|
212
|
+
- name: jefftest
|
213
|
+
hypervisor: gunab.puppetlabs.lan
|
214
|
+
tools_version: guestToolsCurrent
|
215
|
+
ipaddress: 192.168.100.187
|
216
|
+
mo_ref: vm-715
|
217
|
+
power_state: poweredOn
|
218
|
+
uuid: 42329da7-e8ab-29ec-1892-d6a4a964912a
|
219
|
+
is_a_template: false
|
220
|
+
id: 5032c8a5-9c5e-ba7a-3804-832a03e16381
|
221
|
+
tools_state: toolsOk
|
222
|
+
connection_state: connected
|
223
|
+
instance_uuid: 5032c8a5-9c5e-ba7a-3804-832a03e16381
|
224
|
+
hostname: centos56gm.localdomain
|
225
|
+
mac_addresses:
|
226
|
+
Network adapter 1: 00:50:56:b2:00:af
|
227
|
+
operatingsystem: CentOS 4/5 (32-bit)
|
184
228
|
5032c8a5-9c5e-ba7a-3804-832a03e16381
|
185
229
|
when 'does-not-exist-and-is-not-a-uuid', '50323f93-6835-1178-8b8f-9e2109890e1a'
|
186
230
|
{ 'virtual_machines' => [] }
|
187
231
|
end
|
188
232
|
end
|
189
|
-
|
190
233
|
end
|
191
|
-
|
192
234
|
end
|
193
235
|
end
|
194
236
|
end
|
195
|
-
|