fog-hyperv 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.travis.yml +11 -0
- data/Gemfile +4 -0
- data/README.md +53 -0
- data/Rakefile +10 -0
- data/fog-hyperv.gemspec +28 -0
- data/lib/fog/bin/hyperv.rb +28 -0
- data/lib/fog/collection.rb +114 -0
- data/lib/fog/hyperv.rb +123 -0
- data/lib/fog/hyperv/compute.rb +327 -0
- data/lib/fog/hyperv/fog_extensions/enum.rb +51 -0
- data/lib/fog/hyperv/models/compute/bios.rb +52 -0
- data/lib/fog/hyperv/models/compute/cluster.rb +37 -0
- data/lib/fog/hyperv/models/compute/clusters.rb +11 -0
- data/lib/fog/hyperv/models/compute/com_port.rb +22 -0
- data/lib/fog/hyperv/models/compute/dvd_drive.rb +62 -0
- data/lib/fog/hyperv/models/compute/dvd_drives.rb +11 -0
- data/lib/fog/hyperv/models/compute/firmware.rb +52 -0
- data/lib/fog/hyperv/models/compute/floppy_drive.rb +48 -0
- data/lib/fog/hyperv/models/compute/floppy_drives.rb +11 -0
- data/lib/fog/hyperv/models/compute/hard_drive.rb +110 -0
- data/lib/fog/hyperv/models/compute/hard_drives.rb +11 -0
- data/lib/fog/hyperv/models/compute/host.rb +20 -0
- data/lib/fog/hyperv/models/compute/hosts.rb +15 -0
- data/lib/fog/hyperv/models/compute/network_adapter.rb +142 -0
- data/lib/fog/hyperv/models/compute/network_adapters.rb +19 -0
- data/lib/fog/hyperv/models/compute/server.rb +192 -0
- data/lib/fog/hyperv/models/compute/servers.rb +30 -0
- data/lib/fog/hyperv/models/compute/switch.rb +58 -0
- data/lib/fog/hyperv/models/compute/switches.rb +15 -0
- data/lib/fog/hyperv/models/compute/vhd.rb +100 -0
- data/lib/fog/hyperv/models/compute/vhds.rb +16 -0
- data/lib/fog/hyperv/requests/compute/add_vm_hard_disk_drive.rb +12 -0
- data/lib/fog/hyperv/requests/compute/add_vm_network_adapter.rb +12 -0
- data/lib/fog/hyperv/requests/compute/connect_vm_network_adapter.rb +12 -0
- data/lib/fog/hyperv/requests/compute/disconnect_vm_network_adapter.rb +12 -0
- data/lib/fog/hyperv/requests/compute/get_cluster.rb +11 -0
- data/lib/fog/hyperv/requests/compute/get_cluster_node.rb +19 -0
- data/lib/fog/hyperv/requests/compute/get_vhd.rb +34 -0
- data/lib/fog/hyperv/requests/compute/get_vm.rb +20 -0
- data/lib/fog/hyperv/requests/compute/get_vm_bios.rb +21 -0
- data/lib/fog/hyperv/requests/compute/get_vm_dvd_drive.rb +20 -0
- data/lib/fog/hyperv/requests/compute/get_vm_firmware.rb +21 -0
- data/lib/fog/hyperv/requests/compute/get_vm_floppy_disk_drive.rb +20 -0
- data/lib/fog/hyperv/requests/compute/get_vm_group.rb +23 -0
- data/lib/fog/hyperv/requests/compute/get_vm_hard_disk_drive.rb +20 -0
- data/lib/fog/hyperv/requests/compute/get_vm_host.rb +12 -0
- data/lib/fog/hyperv/requests/compute/get_vm_host_cluster.rb +25 -0
- data/lib/fog/hyperv/requests/compute/get_vm_network_adapter.rb +27 -0
- data/lib/fog/hyperv/requests/compute/get_vm_switch.rb +27 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_cluster.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_cluster_node.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vhd.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm_bios.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm_dvd_drive.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm_firmware.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm_floppy_disk_drive.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm_hard_disk_drive.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm_host.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm_network_adapter.json +1 -0
- data/lib/fog/hyperv/requests/compute/mock_files/get_vm_switch.json +1 -0
- data/lib/fog/hyperv/requests/compute/new_vhd.rb +12 -0
- data/lib/fog/hyperv/requests/compute/new_vm.rb +15 -0
- data/lib/fog/hyperv/requests/compute/new_vm_switch.rb +13 -0
- data/lib/fog/hyperv/requests/compute/remove_item.rb +13 -0
- data/lib/fog/hyperv/requests/compute/remove_vm.rb +15 -0
- data/lib/fog/hyperv/requests/compute/remove_vm_hard_disk_drive.rb +12 -0
- data/lib/fog/hyperv/requests/compute/remove_vm_network_adapter.rb +12 -0
- data/lib/fog/hyperv/requests/compute/restart_vm.rb +15 -0
- data/lib/fog/hyperv/requests/compute/set_vm.rb +12 -0
- data/lib/fog/hyperv/requests/compute/set_vm_bios.rb +13 -0
- data/lib/fog/hyperv/requests/compute/set_vm_dvd_drive.rb +12 -0
- data/lib/fog/hyperv/requests/compute/set_vm_firmware.rb +13 -0
- data/lib/fog/hyperv/requests/compute/set_vm_hard_disk_drive.rb +12 -0
- data/lib/fog/hyperv/requests/compute/set_vm_network_adapter.rb +12 -0
- data/lib/fog/hyperv/requests/compute/set_vm_switch.rb +13 -0
- data/lib/fog/hyperv/requests/compute/start_vm.rb +15 -0
- data/lib/fog/hyperv/requests/compute/stop_vm.rb +15 -0
- data/lib/fog/hyperv/version.rb +5 -0
- data/lib/fog/model.rb +64 -0
- data/test/fog/hyperv_test.rb +7 -0
- data/test/test_helper.rb +4 -0
- metadata +199 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Switches < Fog::Hyperv::Collection
|
|
5
|
+
model Fog::Compute::Hyperv::Switch
|
|
6
|
+
|
|
7
|
+
get_method :get_vm_switch
|
|
8
|
+
|
|
9
|
+
def get(name, filters = {})
|
|
10
|
+
super filters.merge(name: name)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Vhd < Fog::Hyperv::Model
|
|
5
|
+
identity :disk_identifier
|
|
6
|
+
|
|
7
|
+
attribute :attached
|
|
8
|
+
attribute :block_size
|
|
9
|
+
attribute :computer_name
|
|
10
|
+
attribute :disk
|
|
11
|
+
attribute :file_size
|
|
12
|
+
attribute :is_deleted
|
|
13
|
+
attribute :minimum_size
|
|
14
|
+
attribute :path, type: :string, default: 'New Disk'
|
|
15
|
+
attribute :pool_name
|
|
16
|
+
attribute :size, type: :integer, default: 343_597_383_68
|
|
17
|
+
attribute :vhd_format, type: :enum, values: [ :Unknown, nil, :VHD, :VHDX, :VHDSet ]
|
|
18
|
+
attribute :vhd_type, type: :enum, values: [ :Unknown, nil, :Fixed, :Dynamic, :Differencing ]
|
|
19
|
+
# TODO? VM Snapshots?
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
# def identity_name
|
|
23
|
+
# :disk_identifier unless disk_identifier
|
|
24
|
+
# :disk_number if disk
|
|
25
|
+
# :path
|
|
26
|
+
# end
|
|
27
|
+
|
|
28
|
+
def real_path
|
|
29
|
+
requires :path, :computer_name
|
|
30
|
+
|
|
31
|
+
ret = path
|
|
32
|
+
ret += '.vhdx' unless ret.downcase.end_with? '.vhdx'
|
|
33
|
+
ret = host.virtual_hard_disk_path + '\\' + ret unless ret.downcase.start_with? host.virtual_hard_disk_path.downcase
|
|
34
|
+
ret
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def unc_path
|
|
38
|
+
"\\\\#{computer_name || '.'}\\#{real_path.gsub ':', '$'}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def host
|
|
42
|
+
requires :computer_name
|
|
43
|
+
|
|
44
|
+
@host ||= begin
|
|
45
|
+
ret = parent
|
|
46
|
+
ret = service.hosts.get computer_name unless ret
|
|
47
|
+
ret = ret.parent unless ret.is_a?(Host)
|
|
48
|
+
ret
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def save
|
|
53
|
+
requires :path, :computer_name, :size
|
|
54
|
+
|
|
55
|
+
data = \
|
|
56
|
+
if persisted?
|
|
57
|
+
# Can't change much of a VHD
|
|
58
|
+
attributes
|
|
59
|
+
else
|
|
60
|
+
service.new_vhd(
|
|
61
|
+
computer_name: computer_name,
|
|
62
|
+
path: real_path,
|
|
63
|
+
|
|
64
|
+
block_size_bytes: block_size,
|
|
65
|
+
size_bytes: size,
|
|
66
|
+
|
|
67
|
+
_return_fields: self.class.attributes,
|
|
68
|
+
_json_depth: 1
|
|
69
|
+
)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
merge_attributes(data)
|
|
73
|
+
@old = dup
|
|
74
|
+
self
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def reload
|
|
78
|
+
requires :computer_name
|
|
79
|
+
requires_one :path, :disk
|
|
80
|
+
|
|
81
|
+
data = service.get_vhd(
|
|
82
|
+
computer_name: computer_name,
|
|
83
|
+
path: path,
|
|
84
|
+
disk_number: disk
|
|
85
|
+
)
|
|
86
|
+
merge_attributes(data.attributes)
|
|
87
|
+
self
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def destroy
|
|
91
|
+
requires :path, :disk_identifier
|
|
92
|
+
|
|
93
|
+
service.remove_item(
|
|
94
|
+
path: unc_path
|
|
95
|
+
) if path
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Vhds < Fog::Hyperv::VMCollection
|
|
5
|
+
model Fog::Compute::Hyperv::Vhd
|
|
6
|
+
match_on :vm_id
|
|
7
|
+
|
|
8
|
+
get_method :get_vhd
|
|
9
|
+
|
|
10
|
+
def get(path, filters = {})
|
|
11
|
+
super search_attributes.merge(filters.merge(path: path))
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def connect_vm_network_adapter(options = {})
|
|
6
|
+
requires options, :vm_name, :switch_name
|
|
7
|
+
run_shell('Connect-VMNetworkAdapter', options.merge(_skip_json: true)).exitcode.zero?
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_cluster_node(options = {})
|
|
6
|
+
run_shell('Get-ClusterNode', options)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class Mock
|
|
11
|
+
def get_cluster_node(args = {})
|
|
12
|
+
data = handle_mock_response args
|
|
13
|
+
data = data.find { |n| n[:name] == args[:name] } if args[:name]
|
|
14
|
+
data
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vhd(options = {})
|
|
6
|
+
requires_one options, :vm_id, :path, :disk_number
|
|
7
|
+
run_shell('Get-VHD', options)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def get_vhd(args = {})
|
|
13
|
+
requires_one args, :vm_id, :path, :disk_number
|
|
14
|
+
data = handle_mock_response args
|
|
15
|
+
|
|
16
|
+
if args[:vm_id]
|
|
17
|
+
data = case args[:vm_id].downcase
|
|
18
|
+
when '20ff7fe3-fd54-425c-aa97-fbf3c2e7a868'
|
|
19
|
+
data[1..-1]
|
|
20
|
+
when '416e49fd-28dd-413c-9743-aa3e69e4807d'
|
|
21
|
+
data[0]
|
|
22
|
+
end
|
|
23
|
+
elsif args[:path]
|
|
24
|
+
data = data.find { |d| d[:path].casecmp(args[:path]).zero? }
|
|
25
|
+
elsif args[:disk_number]
|
|
26
|
+
Fog::Mock.not_implemented
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
data
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vm(options = {})
|
|
6
|
+
run_shell('Get-VM', options)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class Mock
|
|
11
|
+
def get_vm(args = {})
|
|
12
|
+
data = handle_mock_response args
|
|
13
|
+
data = data.find { |v| v[:name].casecmp(args[:name]).zero? } if args[:name]
|
|
14
|
+
data = data.find { |v| v[:id].casecmp(args[:id]).zero? } if args[:id]
|
|
15
|
+
data
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vm_bios(options = {})
|
|
6
|
+
requires options, :vm_name
|
|
7
|
+
run_shell('Get-VMBios', options)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def get_vm_bios(args = {})
|
|
13
|
+
requires args, :vm_name
|
|
14
|
+
|
|
15
|
+
handle_mock_response(args).find { |b| b[:vm_name].casecmp(args[:vm_name]).zero? }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vm_dvd_drive(options = {})
|
|
6
|
+
requires options, :vm_name
|
|
7
|
+
run_shell('Get-VMDvdDrive', options)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def get_vm_dvd_drive(options = {})
|
|
13
|
+
requires options, :vm_name
|
|
14
|
+
|
|
15
|
+
handle_mock_response(args).find { |b| b[:vm_name].casecmp(args[:vm_name]).zero? }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vm_firmware(options = {})
|
|
6
|
+
requires options, :vm_name
|
|
7
|
+
run_shell('Get-VMFirmware', options)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def get_vm_firmware(options = {})
|
|
13
|
+
requires options, :vm_name
|
|
14
|
+
|
|
15
|
+
handle_mock_response(args).find { |b| b[:vm_name].casecmp(args[:vm_name]).zero? }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vm_floppy_disk_drive(options = {})
|
|
6
|
+
requires options, :vm_name
|
|
7
|
+
run_shell('Get-VMFloppyDiskDrive', options)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def get_vm_floppy_disk_drive(options = {})
|
|
13
|
+
requires options, :vm_name
|
|
14
|
+
|
|
15
|
+
handle_mock_response(args).find { |b| b[:vm_name].casecmp(args[:vm_name]).zero? }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vm_group(options = {})
|
|
6
|
+
requires_version '10.0'
|
|
7
|
+
|
|
8
|
+
run_shell('Get-VMGroup', options)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Mock
|
|
13
|
+
def get_vm_group(options = {})
|
|
14
|
+
requires_version '10.0'
|
|
15
|
+
|
|
16
|
+
# TODO
|
|
17
|
+
Fog::Mock.not_implemented
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vm_hard_disk_drive(options = {})
|
|
6
|
+
requires options, :vm_name
|
|
7
|
+
run_shell('Get-VMHardDiskDrive', options)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def get_vm_hard_disk_drive(args = {})
|
|
13
|
+
requires args, :vm_name
|
|
14
|
+
|
|
15
|
+
handle_mock_response(args).find { |b| b[:vm_name].casecmp(args[:vm_name]).zero? }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Hyperv
|
|
4
|
+
class Real
|
|
5
|
+
def get_vm_host_cluster(options = {})
|
|
6
|
+
requires_version '10.0'
|
|
7
|
+
requires options, :cluster_name
|
|
8
|
+
|
|
9
|
+
run_shell('Get-VMHostCluster', options)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Mock
|
|
14
|
+
def get_vm_host_cluster(options = {})
|
|
15
|
+
requires_version '10.0'
|
|
16
|
+
requires options, :cluster_name
|
|
17
|
+
|
|
18
|
+
# TODO
|
|
19
|
+
Fog::Mock.not_implemented
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|