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.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +11 -0
  4. data/Gemfile +4 -0
  5. data/README.md +53 -0
  6. data/Rakefile +10 -0
  7. data/fog-hyperv.gemspec +28 -0
  8. data/lib/fog/bin/hyperv.rb +28 -0
  9. data/lib/fog/collection.rb +114 -0
  10. data/lib/fog/hyperv.rb +123 -0
  11. data/lib/fog/hyperv/compute.rb +327 -0
  12. data/lib/fog/hyperv/fog_extensions/enum.rb +51 -0
  13. data/lib/fog/hyperv/models/compute/bios.rb +52 -0
  14. data/lib/fog/hyperv/models/compute/cluster.rb +37 -0
  15. data/lib/fog/hyperv/models/compute/clusters.rb +11 -0
  16. data/lib/fog/hyperv/models/compute/com_port.rb +22 -0
  17. data/lib/fog/hyperv/models/compute/dvd_drive.rb +62 -0
  18. data/lib/fog/hyperv/models/compute/dvd_drives.rb +11 -0
  19. data/lib/fog/hyperv/models/compute/firmware.rb +52 -0
  20. data/lib/fog/hyperv/models/compute/floppy_drive.rb +48 -0
  21. data/lib/fog/hyperv/models/compute/floppy_drives.rb +11 -0
  22. data/lib/fog/hyperv/models/compute/hard_drive.rb +110 -0
  23. data/lib/fog/hyperv/models/compute/hard_drives.rb +11 -0
  24. data/lib/fog/hyperv/models/compute/host.rb +20 -0
  25. data/lib/fog/hyperv/models/compute/hosts.rb +15 -0
  26. data/lib/fog/hyperv/models/compute/network_adapter.rb +142 -0
  27. data/lib/fog/hyperv/models/compute/network_adapters.rb +19 -0
  28. data/lib/fog/hyperv/models/compute/server.rb +192 -0
  29. data/lib/fog/hyperv/models/compute/servers.rb +30 -0
  30. data/lib/fog/hyperv/models/compute/switch.rb +58 -0
  31. data/lib/fog/hyperv/models/compute/switches.rb +15 -0
  32. data/lib/fog/hyperv/models/compute/vhd.rb +100 -0
  33. data/lib/fog/hyperv/models/compute/vhds.rb +16 -0
  34. data/lib/fog/hyperv/requests/compute/add_vm_hard_disk_drive.rb +12 -0
  35. data/lib/fog/hyperv/requests/compute/add_vm_network_adapter.rb +12 -0
  36. data/lib/fog/hyperv/requests/compute/connect_vm_network_adapter.rb +12 -0
  37. data/lib/fog/hyperv/requests/compute/disconnect_vm_network_adapter.rb +12 -0
  38. data/lib/fog/hyperv/requests/compute/get_cluster.rb +11 -0
  39. data/lib/fog/hyperv/requests/compute/get_cluster_node.rb +19 -0
  40. data/lib/fog/hyperv/requests/compute/get_vhd.rb +34 -0
  41. data/lib/fog/hyperv/requests/compute/get_vm.rb +20 -0
  42. data/lib/fog/hyperv/requests/compute/get_vm_bios.rb +21 -0
  43. data/lib/fog/hyperv/requests/compute/get_vm_dvd_drive.rb +20 -0
  44. data/lib/fog/hyperv/requests/compute/get_vm_firmware.rb +21 -0
  45. data/lib/fog/hyperv/requests/compute/get_vm_floppy_disk_drive.rb +20 -0
  46. data/lib/fog/hyperv/requests/compute/get_vm_group.rb +23 -0
  47. data/lib/fog/hyperv/requests/compute/get_vm_hard_disk_drive.rb +20 -0
  48. data/lib/fog/hyperv/requests/compute/get_vm_host.rb +12 -0
  49. data/lib/fog/hyperv/requests/compute/get_vm_host_cluster.rb +25 -0
  50. data/lib/fog/hyperv/requests/compute/get_vm_network_adapter.rb +27 -0
  51. data/lib/fog/hyperv/requests/compute/get_vm_switch.rb +27 -0
  52. data/lib/fog/hyperv/requests/compute/mock_files/get_cluster.json +1 -0
  53. data/lib/fog/hyperv/requests/compute/mock_files/get_cluster_node.json +1 -0
  54. data/lib/fog/hyperv/requests/compute/mock_files/get_vhd.json +1 -0
  55. data/lib/fog/hyperv/requests/compute/mock_files/get_vm.json +1 -0
  56. data/lib/fog/hyperv/requests/compute/mock_files/get_vm_bios.json +1 -0
  57. data/lib/fog/hyperv/requests/compute/mock_files/get_vm_dvd_drive.json +1 -0
  58. data/lib/fog/hyperv/requests/compute/mock_files/get_vm_firmware.json +1 -0
  59. data/lib/fog/hyperv/requests/compute/mock_files/get_vm_floppy_disk_drive.json +1 -0
  60. data/lib/fog/hyperv/requests/compute/mock_files/get_vm_hard_disk_drive.json +1 -0
  61. data/lib/fog/hyperv/requests/compute/mock_files/get_vm_host.json +1 -0
  62. data/lib/fog/hyperv/requests/compute/mock_files/get_vm_network_adapter.json +1 -0
  63. data/lib/fog/hyperv/requests/compute/mock_files/get_vm_switch.json +1 -0
  64. data/lib/fog/hyperv/requests/compute/new_vhd.rb +12 -0
  65. data/lib/fog/hyperv/requests/compute/new_vm.rb +15 -0
  66. data/lib/fog/hyperv/requests/compute/new_vm_switch.rb +13 -0
  67. data/lib/fog/hyperv/requests/compute/remove_item.rb +13 -0
  68. data/lib/fog/hyperv/requests/compute/remove_vm.rb +15 -0
  69. data/lib/fog/hyperv/requests/compute/remove_vm_hard_disk_drive.rb +12 -0
  70. data/lib/fog/hyperv/requests/compute/remove_vm_network_adapter.rb +12 -0
  71. data/lib/fog/hyperv/requests/compute/restart_vm.rb +15 -0
  72. data/lib/fog/hyperv/requests/compute/set_vm.rb +12 -0
  73. data/lib/fog/hyperv/requests/compute/set_vm_bios.rb +13 -0
  74. data/lib/fog/hyperv/requests/compute/set_vm_dvd_drive.rb +12 -0
  75. data/lib/fog/hyperv/requests/compute/set_vm_firmware.rb +13 -0
  76. data/lib/fog/hyperv/requests/compute/set_vm_hard_disk_drive.rb +12 -0
  77. data/lib/fog/hyperv/requests/compute/set_vm_network_adapter.rb +12 -0
  78. data/lib/fog/hyperv/requests/compute/set_vm_switch.rb +13 -0
  79. data/lib/fog/hyperv/requests/compute/start_vm.rb +15 -0
  80. data/lib/fog/hyperv/requests/compute/stop_vm.rb +15 -0
  81. data/lib/fog/hyperv/version.rb +5 -0
  82. data/lib/fog/model.rb +64 -0
  83. data/test/fog/hyperv_test.rb +7 -0
  84. data/test/test_helper.rb +4 -0
  85. 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 add_vm_hard_disk_drive(options = {})
6
+ requires options, :vm_name
7
+ run_shell('Add-VMHardDiskDrive', options)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Fog
2
+ module Compute
3
+ class Hyperv
4
+ class Real
5
+ def add_vm_network_adapter(options = {})
6
+ requires_one options, :vm_name, :management_os
7
+ run_shell('Add-VMNetworkAdapter', options)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ 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,12 @@
1
+ module Fog
2
+ module Compute
3
+ class Hyperv
4
+ class Real
5
+ def disconnect_vm_network_adapter(options = {})
6
+ requires :vm_name
7
+ run_shell('Disconnect-VMNetworkAdapter', options.merge(_skip_json: true)).exitcode.zero?
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ module Fog
2
+ module Compute
3
+ class Hyperv
4
+ class Real
5
+ def get_cluster(options = {})
6
+ run_shell('Get-Cluster', options)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ 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,12 @@
1
+ module Fog
2
+ module Compute
3
+ class Hyperv
4
+ class Real
5
+ def get_vm_host(options = {})
6
+ # TODO: Reject unavailable arguments?
7
+ run_shell('Get-VMHost', options)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ 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
+