fog 1.7.0 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -2
- data/README.md +9 -10
- data/Rakefile +15 -299
- data/changelog.txt +153 -0
- data/docs/about/contributing.markdown +1 -0
- data/docs/dns/index.markdown +1 -1
- data/docs/index.markdown +8 -3
- data/fog.gemspec +3 -3
- data/lib/fog.rb +0 -5
- data/lib/fog/aws/auto_scaling.rb +1 -1
- data/lib/fog/aws/cloud_watch.rb +1 -1
- data/lib/fog/aws/compute.rb +2 -1
- data/lib/fog/aws/dynamodb.rb +30 -64
- data/lib/fog/aws/elb.rb +1 -1
- data/lib/fog/aws/glacier.rb +1 -1
- data/lib/fog/aws/iam.rb +1 -0
- data/lib/fog/aws/models/auto_scaling/group.rb +1 -1
- data/lib/fog/aws/models/compute/server.rb +2 -0
- data/lib/fog/aws/models/compute/volume.rb +0 -1
- data/lib/fog/aws/models/iam/user.rb +1 -1
- data/lib/fog/aws/parsers/compute/describe_instances.rb +3 -1
- data/lib/fog/aws/parsers/compute/describe_reserved_instances_offerings.rb +1 -1
- data/lib/fog/aws/parsers/storage/delete_multiple_objects.rb +50 -0
- data/lib/fog/aws/rds.rb +2 -2
- data/lib/fog/aws/requests/compute/describe_availability_zones.rb +3 -0
- data/lib/fog/aws/requests/compute/describe_reserved_instances_offerings.rb +11 -8
- data/lib/fog/aws/requests/compute/modify_volume_attribute.rb +51 -0
- data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +1 -0
- data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +172 -0
- data/lib/fog/aws/signaturev4.rb +1 -1
- data/lib/fog/aws/sqs.rb +1 -1
- data/lib/fog/aws/storage.rb +2 -0
- data/lib/fog/bluebox/requests/compute/create_block.rb +1 -3
- data/lib/fog/brightbox/compute.rb +239 -84
- data/lib/fog/brightbox/models/compute/account.rb +9 -3
- data/lib/fog/brightbox/models/compute/server.rb +2 -1
- data/lib/fog/brightbox/models/compute/servers.rb +33 -1
- data/lib/fog/brightbox/oauth2.rb +164 -0
- data/lib/fog/brightbox/requests/compute/activate_console_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +11 -2
- data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +11 -2
- data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +9 -11
- data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +11 -2
- data/lib/fog/brightbox/requests/compute/create_api_client.rb +11 -2
- data/lib/fog/brightbox/requests/compute/create_application.rb +11 -2
- data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +11 -1
- data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +13 -2
- data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +17 -2
- data/lib/fog/brightbox/requests/compute/create_image.rb +18 -2
- data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +14 -2
- data/lib/fog/brightbox/requests/compute/create_server.rb +17 -2
- data/lib/fog/brightbox/requests/compute/create_server_group.rb +11 -2
- data/lib/fog/brightbox/requests/compute/destroy_api_client.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_application.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_cloud_ip.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_firewall_policy.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_firewall_rule.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_image.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_load_balancer.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/destroy_server_group.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_account.rb +7 -15
- data/lib/fog/brightbox/requests/compute/get_api_client.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_application.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +1 -3
- data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_image.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_interface.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +1 -5
- data/lib/fog/brightbox/requests/compute/get_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_server_group.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_server_type.rb +9 -2
- data/lib/fog/brightbox/requests/compute/get_user.rb +7 -15
- data/lib/fog/brightbox/requests/compute/get_zone.rb +9 -2
- data/lib/fog/brightbox/requests/compute/list_accounts.rb +6 -2
- data/lib/fog/brightbox/requests/compute/list_api_clients.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_applications.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_images.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_server_groups.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_server_types.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_servers.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_users.rb +8 -2
- data/lib/fog/brightbox/requests/compute/list_zones.rb +8 -2
- data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +11 -2
- data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +10 -12
- data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +11 -2
- data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +11 -2
- data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +11 -2
- data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +9 -10
- data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +22 -3
- data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +18 -0
- data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +13 -1
- data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +9 -2
- data/lib/fog/brightbox/requests/compute/shutdown_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/snapshot_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/start_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/stop_server.rb +9 -2
- data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +9 -2
- data/lib/fog/brightbox/requests/compute/update_account.rb +32 -34
- data/lib/fog/brightbox/requests/compute/update_api_client.rb +12 -2
- data/lib/fog/brightbox/requests/compute/update_application.rb +12 -2
- data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +13 -2
- data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +16 -1
- data/lib/fog/brightbox/requests/compute/update_image.rb +17 -2
- data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +15 -2
- data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +12 -19
- data/lib/fog/brightbox/requests/compute/update_server.rb +12 -2
- data/lib/fog/brightbox/requests/compute/update_server_group.rb +12 -2
- data/lib/fog/brightbox/requests/compute/update_user.rb +15 -2
- data/lib/fog/cloudstack/models/compute/server.rb +3 -1
- data/lib/fog/core.rb +1 -0
- data/lib/fog/core/connection.rb +1 -0
- data/lib/fog/google/storage.rb +13 -2
- data/lib/fog/libvirt/models/compute/server.rb +1 -0
- data/lib/fog/libvirt/requests/compute/list_domains.rb +2 -2
- data/lib/fog/openstack.rb +57 -58
- data/lib/fog/openstack/compute.rb +15 -14
- data/lib/fog/openstack/identity.rb +10 -2
- data/lib/fog/openstack/image.rb +1 -1
- data/lib/fog/openstack/models/compute/flavor.rb +5 -1
- data/lib/fog/openstack/models/compute/security_group.rb +1 -1
- data/lib/fog/openstack/models/compute/server.rb +5 -0
- data/lib/fog/openstack/models/identity/users.rb +1 -2
- data/lib/fog/openstack/requests/compute/create_flavor.rb +4 -1
- data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
- data/lib/fog/openstack/requests/compute/get_limits.rb +93 -0
- data/lib/fog/openstack/requests/compute/list_tenants.rb +1 -0
- data/lib/fog/openstack/requests/compute/release_address.rb +13 -1
- data/lib/fog/openstack/requests/compute/reset_server_state.rb +24 -0
- data/lib/fog/openstack/requests/identity/create_role.rb +1 -1
- data/lib/fog/openstack/requests/identity/set_tenant.rb +21 -0
- data/lib/fog/openstack/volume.rb +2 -1
- data/lib/fog/rackspace/models/compute_v2/server.rb +27 -0
- data/lib/fog/rackspace/models/compute_v2/servers.rb +8 -0
- data/lib/fog/rackspace/models/dns/record.rb +14 -1
- data/lib/fog/rackspace/models/storage/file.rb +68 -2
- data/lib/fog/rackspace/requests/compute_v2/create_server.rb +3 -0
- data/lib/fog/version.rb +5 -0
- data/lib/fog/vsphere/compute.rb +74 -8
- data/lib/fog/vsphere/models/compute/cluster.rb +31 -0
- data/lib/fog/vsphere/models/compute/clusters.rb +26 -0
- data/lib/fog/vsphere/models/compute/datacenter.rb +35 -0
- data/lib/fog/vsphere/models/compute/datacenters.rb +23 -0
- data/lib/fog/vsphere/models/compute/datastore.rb +24 -0
- data/lib/fog/vsphere/models/compute/datastores.rb +25 -0
- data/lib/fog/vsphere/models/compute/folder.rb +28 -0
- data/lib/fog/vsphere/models/compute/folders.rb +27 -0
- data/lib/fog/vsphere/models/compute/interface.rb +39 -0
- data/lib/fog/vsphere/models/compute/interfaces.rb +33 -0
- data/lib/fog/vsphere/models/compute/network.rb +21 -0
- data/lib/fog/vsphere/models/compute/networks.rb +25 -0
- data/lib/fog/vsphere/models/compute/resource_pool.rb +23 -0
- data/lib/fog/vsphere/models/compute/resource_pools.rb +26 -0
- data/lib/fog/vsphere/models/compute/server.rb +78 -12
- data/lib/fog/vsphere/models/compute/servers.rb +16 -20
- data/lib/fog/vsphere/models/compute/template.rb +13 -0
- data/lib/fog/vsphere/models/compute/templates.rb +23 -0
- data/lib/fog/vsphere/models/compute/volume.rb +45 -0
- data/lib/fog/vsphere/models/compute/volumes.rb +33 -0
- data/lib/fog/vsphere/requests/compute/create_vm.rb +114 -0
- data/lib/fog/vsphere/requests/compute/get_cluster.rb +25 -0
- data/lib/fog/vsphere/requests/compute/get_datacenter.rb +29 -0
- data/lib/fog/vsphere/requests/compute/get_datastore.rb +25 -0
- data/lib/fog/vsphere/requests/compute/get_folder.rb +73 -0
- data/lib/fog/vsphere/requests/compute/get_network.rb +25 -0
- data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +26 -0
- data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +62 -0
- data/lib/fog/vsphere/requests/compute/list_clusters.rb +37 -0
- data/lib/fog/vsphere/requests/compute/list_datacenters.rb +34 -0
- data/lib/fog/vsphere/requests/compute/list_datastores.rb +40 -0
- data/lib/fog/vsphere/requests/compute/list_folders.rb +45 -0
- data/lib/fog/vsphere/requests/compute/list_networks.rb +38 -0
- data/lib/fog/vsphere/requests/compute/list_resource_pools.rb +39 -0
- data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +132 -166
- data/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb +52 -0
- data/lib/fog/vsphere/requests/compute/list_vm_volumes.rb +51 -0
- data/lib/fog/vsphere/requests/compute/vm_clone.rb +6 -8
- data/lib/fog/vsphere/requests/compute/vm_destroy.rb +1 -8
- data/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb +1 -2
- data/lib/tasks/changelog_task.rb +98 -0
- data/lib/tasks/documentation_task.rb +155 -0
- data/lib/tasks/test_task.rb +46 -0
- data/tests/aws/models/iam/users_tests.rb +16 -2
- data/tests/aws/requests/auto_scaling/notification_configuration_tests.rb +1 -0
- data/tests/aws/requests/auto_scaling/tag_tests.rb +1 -0
- data/tests/aws/requests/compute/instance_tests.rb +2 -0
- data/tests/aws/requests/compute/volume_tests.rb +8 -0
- data/tests/aws/requests/storage/object_tests.rb +18 -1
- data/tests/aws/requests/storage/versioning_tests.rb +70 -0
- data/tests/brightbox/compute_tests.rb +96 -4
- data/tests/brightbox/models/compute/account_tests.rb +15 -0
- data/tests/brightbox/oauth2_tests.rb +103 -0
- data/tests/brightbox/requests/compute/account_tests.rb +9 -2
- data/tests/brightbox/requests/compute/interface_tests.rb +18 -4
- data/tests/dns/models/record_tests.rb +17 -3
- data/tests/openstack/requests/compute/address_tests.rb +22 -19
- data/tests/openstack/requests/compute/flavor_tests.rb +4 -2
- data/tests/openstack/requests/compute/limit_tests.rb +60 -0
- data/tests/openstack/requests/compute/quota_tests.rb +16 -3
- data/tests/openstack/requests/compute/security_group_tests.rb +1 -1
- data/tests/rackspace/models/compute_v2/servers_tests.rb +6 -0
- data/tests/rackspace/models/storage/file_tests.rb +172 -0
- data/tests/rackspace/requests/dns/helper.rb +12 -26
- data/tests/vsphere/compute_tests.rb +3 -3
- data/tests/vsphere/models/compute/server_tests.rb +1 -2
- data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +5 -13
- data/tests/vsphere/requests/compute/vm_clone_tests.rb +2 -2
- metadata +59 -11
- data/lib/fog/vsphere/requests/compute/datacenters.rb +0 -34
- data/lib/fog/vsphere/requests/compute/find_vm_by_ref.rb +0 -41
- data/lib/fog/vsphere/requests/compute/vm_create.rb +0 -97
- data/tests/vsphere/requests/compute/find_vm_by_ref_tests.rb +0 -26
- data/tests/vsphere/requests/compute/vm_create_tests.rb +0 -20
@@ -0,0 +1,37 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Vsphere
|
4
|
+
class Real
|
5
|
+
def list_clusters(filters = { })
|
6
|
+
datacenter_name = filters[:datacenter]
|
7
|
+
|
8
|
+
raw_clusters(datacenter_name).map do |cluster|
|
9
|
+
cluster_attributes(cluster, datacenter_name)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def raw_clusters(datacenter)
|
14
|
+
find_raw_datacenter(datacenter).hostFolder.childEntity.grep(RbVmomi::VIM::ClusterComputeResource)
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def cluster_attributes cluster, datacenter_name
|
20
|
+
{
|
21
|
+
:id => managed_obj_id(cluster),
|
22
|
+
:name => cluster.name,
|
23
|
+
:num_host => cluster.summary.numHosts,
|
24
|
+
:num_cpu_cores => cluster.summary.numCpuCores,
|
25
|
+
:overall_status => cluster.summary.overallStatus,
|
26
|
+
:datacenter => datacenter_name || parent_attribute(cluster.path, :datacenter)[1],
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
class Mock
|
32
|
+
def list_clusters(filters = { })
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Vsphere
|
4
|
+
class Real
|
5
|
+
|
6
|
+
def list_datacenters filters = {}
|
7
|
+
raw_datacenters.map do |dc|
|
8
|
+
{
|
9
|
+
:id => managed_obj_id(dc),
|
10
|
+
:name => dc.name,
|
11
|
+
:status => dc.overallStatus
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def raw_datacenters
|
19
|
+
@raw_datacenters ||= @connection.rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter)
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_datacenters name=nil
|
23
|
+
name ? [get_raw_datacenter(name)] : raw_datacenters
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Mock
|
28
|
+
def list_datacenters filters = {}
|
29
|
+
[ {:name => "Solutions", :status => "grey"}, {:name => "Solutions2", :status => "green" }]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Vsphere
|
4
|
+
class Real
|
5
|
+
def list_datastores(filters = { })
|
6
|
+
datacenter_name = filters[:datacenter]
|
7
|
+
# default to show all datastores
|
8
|
+
only_active = filters[:accessible] || false
|
9
|
+
raw_datastores(datacenter_name).map do |datastore|
|
10
|
+
next if only_active and !datastore.summary.accessible
|
11
|
+
datastore_attributes(datastore, datacenter_name)
|
12
|
+
end.compact
|
13
|
+
end
|
14
|
+
|
15
|
+
def raw_datastores(datacenter_name)
|
16
|
+
find_raw_datacenter(datacenter_name).datastore
|
17
|
+
end
|
18
|
+
protected
|
19
|
+
|
20
|
+
def datastore_attributes datastore, datacenter
|
21
|
+
{
|
22
|
+
:id => managed_obj_id(datastore),
|
23
|
+
:name => datastore.name,
|
24
|
+
:accessible => datastore.summary.accessible,
|
25
|
+
:type => datastore.summary.type,
|
26
|
+
:freespace => datastore.summary.freeSpace,
|
27
|
+
:capacity => datastore.summary.capacity,
|
28
|
+
:datacenter => datacenter,
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
class Mock
|
34
|
+
def list_datastores(datacenter_name)
|
35
|
+
[]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Vsphere
|
4
|
+
class Real
|
5
|
+
# Grabs all sub folders within a given path folder.
|
6
|
+
#
|
7
|
+
# ==== Parameters
|
8
|
+
# * filters<~Hash>:
|
9
|
+
# * :datacenter<~String> - *REQUIRED* Your datacenter where you're
|
10
|
+
# looking for folders. Example: 'my-datacenter-name' (passed if you
|
11
|
+
# are using the models/collections)
|
12
|
+
# eg: vspconn.datacenters.first.vm_folders('mypath')
|
13
|
+
# * :path<~String> - Your path where you're looking for
|
14
|
+
# more folders, if return = none you will get an error. If you don't
|
15
|
+
# define it will look in the main datacenter folder for any folders
|
16
|
+
# in that datacenter.
|
17
|
+
#
|
18
|
+
# Example Usage Testing Only:
|
19
|
+
# vspconn = Fog::Compute[:vsphere]
|
20
|
+
# mydc = vspconn.datacenters.first
|
21
|
+
# folders = mydc.vm_folders
|
22
|
+
#
|
23
|
+
def list_folders(filters = { })
|
24
|
+
path = filters[:path] || filters['path'] || ''
|
25
|
+
datacenter_name = filters[:datacenter]
|
26
|
+
get_raw_vmfolders(path, datacenter_name).map do |folder|
|
27
|
+
folder_attributes(folder, datacenter_name)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
def get_raw_vmfolders(path, datacenter_name)
|
34
|
+
folder = get_raw_vmfolder(path, datacenter_name)
|
35
|
+
child_folders(folder).flatten.compact
|
36
|
+
end
|
37
|
+
|
38
|
+
def child_folders folder
|
39
|
+
[folder, folder.childEntity.grep(RbVmomi::VIM::Folder).map(&method(:child_folders)).flatten]
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Vsphere
|
4
|
+
class Real
|
5
|
+
def list_networks(filters = { })
|
6
|
+
datacenter_name = filters[:datacenter]
|
7
|
+
# default to show all networks
|
8
|
+
only_active = filters[:accessible] || false
|
9
|
+
raw_networks(datacenter_name).map do |network|
|
10
|
+
next if only_active and !network.summary.accessible
|
11
|
+
network_attributes(network, datacenter_name)
|
12
|
+
end.compact
|
13
|
+
end
|
14
|
+
|
15
|
+
def raw_networks(datacenter_name)
|
16
|
+
find_raw_datacenter(datacenter_name).network
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def network_attributes network, datacenter
|
22
|
+
{
|
23
|
+
:id => managed_obj_id(network),
|
24
|
+
:name => network.name,
|
25
|
+
:accessible => network.summary.accessible,
|
26
|
+
:datacenter => datacenter,
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
class Mock
|
32
|
+
def list_networks(datacenter_name)
|
33
|
+
[]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Fog
|
2
|
+
module Compute
|
3
|
+
class Vsphere
|
4
|
+
class Real
|
5
|
+
def list_resource_pools(filters = { })
|
6
|
+
datacenter_name = filters[:datacenter]
|
7
|
+
cluster_name = filters[:cluster]
|
8
|
+
cluster = get_raw_cluster(cluster_name, datacenter_name)
|
9
|
+
list_raw_resource_pools(cluster).map do |resource_pool|
|
10
|
+
resource_pool_attributes(resource_pool, cluster_name, datacenter_name)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
# root ResourcePool + Children if they exists
|
17
|
+
def list_raw_resource_pools(cluster)
|
18
|
+
[cluster.resourcePool, cluster.resourcePool.resourcePool].flatten
|
19
|
+
end
|
20
|
+
|
21
|
+
def resource_pool_attributes resource_pool, cluster, datacenter
|
22
|
+
{
|
23
|
+
:id => managed_obj_id(resource_pool),
|
24
|
+
:name => resource_pool.name,
|
25
|
+
:configured_memory_mb => resource_pool.summary.configuredMemoryMB,
|
26
|
+
:overall_status => resource_pool.overallStatus,
|
27
|
+
:cluster => cluster,
|
28
|
+
:datacenter => datacenter
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
class Mock
|
34
|
+
def list_resource_pools(filters = { })
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -2,97 +2,43 @@ module Fog
|
|
2
2
|
module Compute
|
3
3
|
class Vsphere
|
4
4
|
class Real
|
5
|
-
def list_virtual_machines(options = {})
|
5
|
+
def list_virtual_machines(options = { })
|
6
6
|
# Listing all VM's can be quite slow and expensive. Try and optimize
|
7
7
|
# based on the available options we have. These conditions are in
|
8
|
-
# ascending order of
|
8
|
+
# ascending order of time to complete for large deployments.
|
9
|
+
|
10
|
+
options[:folder] ||= options['folder']
|
9
11
|
if options['instance_uuid'] then
|
10
|
-
|
11
|
-
elsif options[
|
12
|
-
list_all_virtual_machines_in_folder(options)
|
12
|
+
[connection.get_virtual_machine(options['instance_uuid'])]
|
13
|
+
elsif options[:folder] && options[:datacenter] then
|
14
|
+
list_all_virtual_machines_in_folder(options[:folder], options[:datacenter])
|
13
15
|
else
|
14
|
-
list_all_virtual_machines
|
16
|
+
list_all_virtual_machines(options)
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
18
20
|
private
|
19
21
|
|
20
|
-
def list_all_virtual_machines_in_folder(
|
21
|
-
|
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
|
22
|
+
def list_all_virtual_machines_in_folder(path, datacenter_name)
|
23
|
+
folder = get_raw_vmfolder(path, datacenter_name)
|
37
24
|
|
38
|
-
|
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 }
|
25
|
+
folder.children.grep(RbVmomi::VIM::VirtualMachine).map(&method(:convert_vm_mob_ref_to_attr_hash))
|
60
26
|
end
|
61
27
|
|
62
|
-
def
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
else
|
69
|
-
virtual_machines = [ ]
|
70
|
-
end
|
71
|
-
{ 'virtual_machines' => virtual_machines }
|
72
|
-
end
|
28
|
+
def list_all_virtual_machines(options = { })
|
29
|
+
datacenters = find_datacenters(options[:datacenter])
|
30
|
+
# TODO: go though nested folders
|
31
|
+
vms = datacenters.map { |dc| dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine) }.flatten
|
32
|
+
# remove all template based virtual machines
|
33
|
+
vms.delete_if { |v| v.config.template }
|
73
34
|
|
74
|
-
|
75
|
-
virtual_machines = list_all_virtual_machine_mobs.collect do |vm_mob|
|
35
|
+
vms.map do |vm_mob|
|
76
36
|
convert_vm_mob_ref_to_attr_hash(vm_mob)
|
77
37
|
end
|
78
|
-
{ 'virtual_machines' => virtual_machines }
|
79
|
-
end
|
80
|
-
|
81
|
-
|
82
|
-
# NOTE: This is a private instance method required by the vm_clone
|
83
|
-
# request. It's very hard to get the Managed Object Reference
|
84
|
-
# of a Template because we can't search for it by instance_uuid
|
85
|
-
# As a result, we need a list of all virtual machines, and we
|
86
|
-
# need them in "native" format, not filter attribute format.
|
87
|
-
def list_all_virtual_machine_mobs
|
88
|
-
# Find each datacenter
|
89
|
-
datacenters = @connection.rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter)
|
90
|
-
# Next, search the "vmFolder" inventory of each data center:
|
91
|
-
datacenters.map {|dc| dc.vmFolder.childEntity.grep(RbVmomi::VIM::VirtualMachine) }.flatten
|
92
38
|
end
|
93
39
|
|
94
40
|
def get_folder_path(folder, root = nil)
|
95
|
-
if (
|
41
|
+
if (not folder.methods.include?('parent')) or (folder == root)
|
96
42
|
return
|
97
43
|
end
|
98
44
|
"#{get_folder_path(folder.parent)}/#{folder.name}"
|
@@ -105,100 +51,120 @@ module Fog
|
|
105
51
|
nil
|
106
52
|
end
|
107
53
|
|
108
|
-
def list_virtual_machines(options = {})
|
54
|
+
def list_virtual_machines(options = { })
|
109
55
|
case options['instance_uuid']
|
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
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
Network adapter 1
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
56
|
+
when nil
|
57
|
+
|
58
|
+
[
|
59
|
+
{ :resource_pool => "Resources",
|
60
|
+
:memory_mb => 2196,
|
61
|
+
:mac_addresses => { "Network adapter 1" => "00:50:56:a9:00:28" },
|
62
|
+
:power_state => "poweredOn",
|
63
|
+
:cpus => 1,
|
64
|
+
:hostname => "dhcp75-197.virt.bos.redhat.com",
|
65
|
+
:mo_ref => "vm-562",
|
66
|
+
:connection_state => "connected",
|
67
|
+
:overall_status => "green",
|
68
|
+
:datacenter => "Solutions",
|
69
|
+
:volumes =>
|
70
|
+
[{
|
71
|
+
:id => "6000C29c-a47d-4cd9-5249-c371de775f06",
|
72
|
+
:datastore => "Storage1",
|
73
|
+
:mode => "persistent",
|
74
|
+
:size => 8388608,
|
75
|
+
:thin => true,
|
76
|
+
:name => "Hard disk 1",
|
77
|
+
:filename => "[Storage1] rhel6-mfojtik/rhel6-mfojtik.vmdk",
|
78
|
+
:size_gb => 8
|
79
|
+
}],
|
80
|
+
:interfaces =>
|
81
|
+
[{ :mac => "00:50:56:a9:00:28",
|
82
|
+
:network => "VM Network",
|
83
|
+
:name => "Network adapter 1",
|
84
|
+
:status => "ok",
|
85
|
+
:summary => "VM Network",
|
86
|
+
}],
|
87
|
+
:hypervisor => "gunab.puppetlabs.lan",
|
88
|
+
:guest_id => "rhel6_64Guest",
|
89
|
+
:tools_state => "toolsOk",
|
90
|
+
:cluster => "Solutionscluster",
|
91
|
+
:name => "rhel64",
|
92
|
+
:operatingsystem => "Red Hat Enterprise Linux 6 (64-bit)",
|
93
|
+
:uuid => "4229f0e9-bfdc-d9a7-7bac-12070772e6dc",
|
94
|
+
:path => "/Datacenters/Solutions/vm",
|
95
|
+
:id => "5029c440-85ee-c2a1-e9dd-b63e39364603",
|
96
|
+
:tools_version => "guestToolsUnmanaged",
|
97
|
+
:ipaddress => "192.168.100.184",
|
98
|
+
},
|
99
|
+
{ :resource_pool => "Resources",
|
100
|
+
:memory_mb => 512,
|
101
|
+
:power_state => "poweredOn",
|
102
|
+
:mac_addresses => { "Network adapter 1" => "00:50:56:a9:00:00" },
|
103
|
+
:hostname => nil,
|
104
|
+
:cpus => 1,
|
105
|
+
:connection_state => "connected",
|
106
|
+
:mo_ref => "vm-621",
|
107
|
+
:overall_status => "green",
|
108
|
+
:datacenter => "Solutions",
|
109
|
+
:volumes =>
|
110
|
+
[{ :thin => false,
|
111
|
+
:size_gb => 10,
|
112
|
+
:datastore => "datastore1",
|
113
|
+
:filename => "[datastore1] i-1342439683/i-1342439683.vmdk",
|
114
|
+
:size => 10485762,
|
115
|
+
:name => "Hard disk 1",
|
116
|
+
:mode => "persistent",
|
117
|
+
:id => "6000C29b-f364-d073-8316-8e98ac0a0eae" }],
|
118
|
+
:interfaces =>
|
119
|
+
[{ :summary => "VM Network",
|
120
|
+
:mac => "00:50:56:a9:00:00",
|
121
|
+
:status => "ok",
|
122
|
+
:network => "VM Network",
|
123
|
+
:name => "Network adapter 1" }],
|
124
|
+
:instance_uuid => "502916a3-b42e-17c7-43ce-b3206e9524dc",
|
125
|
+
:hypervisor => "gunab.puppetlabs.lan",
|
126
|
+
:guest_id => nil,
|
127
|
+
:cluster => "Solutionscluster",
|
128
|
+
:tools_state => "toolsNotInstalled",
|
129
|
+
:uuid => "4229e0de-30cb-ceb2-21f9-4d8d8beabb52",
|
130
|
+
:name => "i-1342439683",
|
131
|
+
:operatingsystem => nil,
|
132
|
+
:path => "/",
|
133
|
+
:tools_version => "guestToolsNotInstalled",
|
134
|
+
:id => "502916a3-b42e-17c7-43ce-b3206e9524dc",
|
135
|
+
:ipaddress => nil }
|
136
|
+
|
137
|
+
|
138
|
+
]
|
139
|
+
when '5032c8a5-9c5e-ba7a-3804-832a03e16381'
|
140
|
+
[{ :resource_pool => "Resources",
|
141
|
+
:memory_mb => 2196,
|
142
|
+
:power_state => "poweredOn",
|
143
|
+
:mac_addresses => { "Network adapter 1" => "00:50:56:b2:00:af" },
|
144
|
+
:hostname => "centos56gm.localdomain",
|
145
|
+
:cpus => 1,
|
146
|
+
:connection_state => "connected",
|
147
|
+
:mo_ref => "vm-715",
|
148
|
+
:overall_status => "green",
|
149
|
+
:datacenter => "Solutions",
|
150
|
+
:instance_uuid => "5029c440-85ee-c2a1-e9dd-b63e39364603",
|
151
|
+
:hypervisor => "gunab.puppetlabs.lan",
|
152
|
+
:guest_id => "rhel6_64Guest",
|
153
|
+
:cluster => "Solutionscluster",
|
154
|
+
:tools_state => "toolsOk",
|
155
|
+
:name => "jefftest",
|
156
|
+
:operatingsystem => "Red Hat Enterprise Linux 6 (64-bit)",
|
157
|
+
:path => "/",
|
158
|
+
:tools_version => "guestToolsUnmanaged",
|
159
|
+
:ipaddress => "192.168.100.187",
|
160
|
+
:id => "5032c8a5-9c5e-ba7a-3804-832a03e16381",
|
161
|
+
:uuid => "42329da7-e8ab-29ec-1892-d6a4a964912a"
|
162
|
+
|
163
|
+
}
|
164
|
+
|
165
|
+
]
|
166
|
+
when 'does-not-exist-and-is-not-a-uuid', '50323f93-6835-1178-8b8f-9e2109890e1a'
|
167
|
+
[]
|
202
168
|
end
|
203
169
|
end
|
204
170
|
end
|