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