fog-hyperv 0.0.8 → 0.1.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.
Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -2
  3. data/lib/fog/bin/hyperv.rb +6 -4
  4. data/lib/fog/hyperv/collection.rb +89 -0
  5. data/lib/fog/hyperv/compute/models/bios.rb +70 -0
  6. data/lib/fog/hyperv/compute/models/cluster.rb +60 -0
  7. data/lib/fog/hyperv/compute/models/clusters.rb +21 -0
  8. data/lib/fog/hyperv/compute/models/com_port.rb +78 -0
  9. data/lib/fog/hyperv/compute/models/com_ports.rb +29 -0
  10. data/lib/fog/hyperv/compute/models/dvd_drive.rb +126 -0
  11. data/lib/fog/hyperv/compute/models/dvd_drives.rb +29 -0
  12. data/lib/fog/hyperv/compute/models/firmware.rb +78 -0
  13. data/lib/fog/hyperv/compute/models/floppy_drive.rb +64 -0
  14. data/lib/fog/hyperv/compute/models/floppy_drives.rb +18 -0
  15. data/lib/fog/hyperv/compute/models/hard_drive.rb +187 -0
  16. data/lib/fog/hyperv/compute/models/hard_drives.rb +28 -0
  17. data/lib/fog/hyperv/compute/models/host.rb +66 -0
  18. data/lib/fog/hyperv/compute/models/hosts.rb +13 -0
  19. data/lib/fog/hyperv/compute/models/network_adapter.rb +362 -0
  20. data/lib/fog/hyperv/compute/models/network_adapter_vlan.rb +172 -0
  21. data/lib/fog/hyperv/compute/models/network_adapters.rb +32 -0
  22. data/lib/fog/hyperv/compute/models/security.rb +121 -0
  23. data/lib/fog/hyperv/compute/models/server.rb +466 -0
  24. data/lib/fog/hyperv/compute/models/servers.rb +18 -0
  25. data/lib/fog/hyperv/compute/models/switch.rb +117 -0
  26. data/lib/fog/hyperv/compute/models/switches.rb +20 -0
  27. data/lib/fog/hyperv/compute/models/vhd.rb +210 -0
  28. data/lib/fog/hyperv/compute/models/vhds.rb +28 -0
  29. data/lib/fog/hyperv/compute/requests/add_vm_dvd_drive.rb +15 -0
  30. data/lib/fog/hyperv/compute/requests/add_vm_hard_disk_drive.rb +15 -0
  31. data/lib/fog/hyperv/compute/requests/add_vm_network_adapter.rb +24 -0
  32. data/lib/fog/hyperv/compute/requests/connect_vm_network_adapter.rb +41 -0
  33. data/lib/fog/hyperv/compute/requests/disable_vm_tpm.rb +16 -0
  34. data/lib/fog/hyperv/compute/requests/disconnect_vm_network_adapter.rb +29 -0
  35. data/lib/fog/hyperv/compute/requests/enable_vm_tpm.rb +16 -0
  36. data/lib/fog/hyperv/compute/requests/get_cluster.rb +11 -0
  37. data/lib/fog/hyperv/compute/requests/get_cluster_node.rb +22 -0
  38. data/lib/fog/hyperv/compute/requests/get_vhd.rb +32 -0
  39. data/lib/fog/hyperv/compute/requests/get_vm.rb +18 -0
  40. data/lib/fog/hyperv/compute/requests/get_vm_bios.rb +21 -0
  41. data/lib/fog/hyperv/compute/requests/get_vm_com_port.rb +17 -0
  42. data/lib/fog/hyperv/compute/requests/get_vm_dvd_drive.rb +25 -0
  43. data/lib/fog/hyperv/compute/requests/get_vm_firmware.rb +21 -0
  44. data/lib/fog/hyperv/compute/requests/get_vm_floppy_disk_drive.rb +16 -0
  45. data/lib/fog/hyperv/compute/requests/get_vm_group.rb +20 -0
  46. data/lib/fog/hyperv/compute/requests/get_vm_hard_disk_drive.rb +24 -0
  47. data/lib/fog/hyperv/compute/requests/get_vm_host.rb +9 -0
  48. data/lib/fog/hyperv/compute/requests/get_vm_host_cluster.rb +21 -0
  49. data/lib/fog/hyperv/compute/requests/get_vm_host_sbt.rb +10 -0
  50. data/lib/fog/hyperv/compute/requests/get_vm_key_protector.rb +16 -0
  51. data/lib/fog/hyperv/compute/requests/get_vm_network_adapter.rb +41 -0
  52. data/lib/fog/hyperv/compute/requests/get_vm_network_adapter_vlan.rb +41 -0
  53. data/lib/fog/hyperv/compute/requests/get_vm_security.rb +15 -0
  54. data/lib/fog/hyperv/compute/requests/get_vm_switch.rb +10 -0
  55. data/lib/fog/hyperv/compute/requests/mock_files/get_vm.json +4 -0
  56. data/lib/fog/hyperv/compute/requests/new_vhd.rb +9 -0
  57. data/lib/fog/hyperv/compute/requests/new_vm.rb +12 -0
  58. data/lib/fog/hyperv/compute/requests/new_vm_switch.rb +11 -0
  59. data/lib/fog/hyperv/compute/requests/optimize_vhd.rb +9 -0
  60. data/lib/fog/hyperv/compute/requests/remove_item.rb +10 -0
  61. data/lib/fog/hyperv/compute/requests/remove_vm.rb +16 -0
  62. data/lib/fog/hyperv/compute/requests/remove_vm_dvd_drive.rb +17 -0
  63. data/lib/fog/hyperv/compute/requests/remove_vm_hard_disk_drive.rb +17 -0
  64. data/lib/fog/hyperv/compute/requests/remove_vm_network_adapter.rb +29 -0
  65. data/lib/fog/hyperv/compute/requests/remove_vm_switch.rb +9 -0
  66. data/lib/fog/hyperv/compute/requests/rename_vm.rb +16 -0
  67. data/lib/fog/hyperv/compute/requests/rename_vm_network_adapter.rb +25 -0
  68. data/lib/fog/hyperv/compute/requests/rename_vm_switch.rb +9 -0
  69. data/lib/fog/hyperv/compute/requests/resize_vhd.rb +9 -0
  70. data/lib/fog/hyperv/compute/requests/restart_vm.rb +22 -0
  71. data/lib/fog/hyperv/compute/requests/resume_vm.rb +22 -0
  72. data/lib/fog/hyperv/compute/requests/save_vm.rb +22 -0
  73. data/lib/fog/hyperv/compute/requests/set_vm.rb +15 -0
  74. data/lib/fog/hyperv/compute/requests/set_vm_bios.rb +15 -0
  75. data/lib/fog/hyperv/compute/requests/set_vm_com_port.rb +16 -0
  76. data/lib/fog/hyperv/compute/requests/set_vm_dvd_drive.rb +16 -0
  77. data/lib/fog/hyperv/compute/requests/set_vm_firmware.rb +15 -0
  78. data/lib/fog/hyperv/compute/requests/set_vm_floppy_disk_drive.rb +16 -0
  79. data/lib/fog/hyperv/compute/requests/set_vm_hard_disk_drive.rb +16 -0
  80. data/lib/fog/hyperv/compute/requests/set_vm_key_protector.rb +15 -0
  81. data/lib/fog/hyperv/compute/requests/set_vm_network_adapter.rb +25 -0
  82. data/lib/fog/hyperv/compute/requests/set_vm_network_adapter_vlan.rb +25 -0
  83. data/lib/fog/hyperv/compute/requests/set_vm_security.rb +17 -0
  84. data/lib/fog/hyperv/compute/requests/set_vm_switch.rb +9 -0
  85. data/lib/fog/hyperv/compute/requests/start_vm.rb +22 -0
  86. data/lib/fog/hyperv/compute/requests/stop_vm.rb +22 -0
  87. data/lib/fog/hyperv/compute/requests/suspend_vm.rb +22 -0
  88. data/lib/fog/hyperv/compute/requests/update_vm.rb +22 -0
  89. data/lib/fog/hyperv/compute.rb +206 -387
  90. data/lib/fog/hyperv/constants.rb +24 -0
  91. data/lib/fog/hyperv/fog_extensions/associations/collection.rb +11 -0
  92. data/lib/fog/hyperv/fog_extensions/attributes/datetime.rb +28 -0
  93. data/lib/fog/hyperv/fog_extensions/attributes/enum.rb +139 -0
  94. data/lib/fog/hyperv/fog_extensions/attributes/enumarray.rb +149 -0
  95. data/lib/fog/hyperv/fog_extensions/attributes/timespan.rb +27 -0
  96. data/lib/fog/hyperv/model.rb +142 -0
  97. data/lib/fog/hyperv/utils/powershell.rb +88 -0
  98. data/lib/fog/hyperv/utils/winrm.rb +233 -0
  99. data/lib/fog/hyperv/version.rb +4 -1
  100. data/lib/fog/hyperv.rb +51 -44
  101. metadata +198 -110
  102. data/.gitignore +0 -10
  103. data/.travis.yml +0 -11
  104. data/CHANGELOG.md +0 -48
  105. data/Gemfile +0 -4
  106. data/Rakefile +0 -10
  107. data/fog-hyperv.gemspec +0 -29
  108. data/lib/fog/collection.rb +0 -152
  109. data/lib/fog/hyperv/fog_extensions/enum.rb +0 -85
  110. data/lib/fog/hyperv/models/compute/bios.rb +0 -61
  111. data/lib/fog/hyperv/models/compute/cluster.rb +0 -64
  112. data/lib/fog/hyperv/models/compute/clusters.rb +0 -15
  113. data/lib/fog/hyperv/models/compute/com_port.rb +0 -22
  114. data/lib/fog/hyperv/models/compute/dvd_drive.rb +0 -92
  115. data/lib/fog/hyperv/models/compute/dvd_drives.rb +0 -12
  116. data/lib/fog/hyperv/models/compute/firmware.rb +0 -53
  117. data/lib/fog/hyperv/models/compute/floppy_drive.rb +0 -53
  118. data/lib/fog/hyperv/models/compute/floppy_drives.rb +0 -12
  119. data/lib/fog/hyperv/models/compute/hard_drive.rb +0 -110
  120. data/lib/fog/hyperv/models/compute/hard_drives.rb +0 -11
  121. data/lib/fog/hyperv/models/compute/host.rb +0 -45
  122. data/lib/fog/hyperv/models/compute/hosts.rb +0 -15
  123. data/lib/fog/hyperv/models/compute/network_adapter.rb +0 -145
  124. data/lib/fog/hyperv/models/compute/network_adapters.rb +0 -19
  125. data/lib/fog/hyperv/models/compute/server.rb +0 -220
  126. data/lib/fog/hyperv/models/compute/servers.rb +0 -21
  127. data/lib/fog/hyperv/models/compute/switch.rb +0 -65
  128. data/lib/fog/hyperv/models/compute/switches.rb +0 -15
  129. data/lib/fog/hyperv/models/compute/vhd.rb +0 -101
  130. data/lib/fog/hyperv/models/compute/vhds.rb +0 -16
  131. data/lib/fog/hyperv/requests/compute/add_vm_dvd_drive.rb +0 -12
  132. data/lib/fog/hyperv/requests/compute/add_vm_hard_disk_drive.rb +0 -12
  133. data/lib/fog/hyperv/requests/compute/add_vm_network_adapter.rb +0 -12
  134. data/lib/fog/hyperv/requests/compute/connect_vm_network_adapter.rb +0 -12
  135. data/lib/fog/hyperv/requests/compute/disconnect_vm_network_adapter.rb +0 -12
  136. data/lib/fog/hyperv/requests/compute/get_cluster.rb +0 -11
  137. data/lib/fog/hyperv/requests/compute/get_cluster_node.rb +0 -19
  138. data/lib/fog/hyperv/requests/compute/get_vhd.rb +0 -34
  139. data/lib/fog/hyperv/requests/compute/get_vm.rb +0 -20
  140. data/lib/fog/hyperv/requests/compute/get_vm_bios.rb +0 -21
  141. data/lib/fog/hyperv/requests/compute/get_vm_dvd_drive.rb +0 -20
  142. data/lib/fog/hyperv/requests/compute/get_vm_firmware.rb +0 -19
  143. data/lib/fog/hyperv/requests/compute/get_vm_floppy_disk_drive.rb +0 -20
  144. data/lib/fog/hyperv/requests/compute/get_vm_group.rb +0 -23
  145. data/lib/fog/hyperv/requests/compute/get_vm_hard_disk_drive.rb +0 -20
  146. data/lib/fog/hyperv/requests/compute/get_vm_host.rb +0 -12
  147. data/lib/fog/hyperv/requests/compute/get_vm_host_cluster.rb +0 -25
  148. data/lib/fog/hyperv/requests/compute/get_vm_network_adapter.rb +0 -27
  149. data/lib/fog/hyperv/requests/compute/get_vm_switch.rb +0 -27
  150. data/lib/fog/hyperv/requests/compute/mock_files/get_vm.json +0 -1
  151. data/lib/fog/hyperv/requests/compute/new_vhd.rb +0 -12
  152. data/lib/fog/hyperv/requests/compute/new_vm.rb +0 -15
  153. data/lib/fog/hyperv/requests/compute/new_vm_switch.rb +0 -13
  154. data/lib/fog/hyperv/requests/compute/remove_item.rb +0 -13
  155. data/lib/fog/hyperv/requests/compute/remove_vm.rb +0 -15
  156. data/lib/fog/hyperv/requests/compute/remove_vm_dvd_drive.rb +0 -12
  157. data/lib/fog/hyperv/requests/compute/remove_vm_hard_disk_drive.rb +0 -12
  158. data/lib/fog/hyperv/requests/compute/remove_vm_network_adapter.rb +0 -12
  159. data/lib/fog/hyperv/requests/compute/restart_vm.rb +0 -15
  160. data/lib/fog/hyperv/requests/compute/set_vm.rb +0 -12
  161. data/lib/fog/hyperv/requests/compute/set_vm_bios.rb +0 -13
  162. data/lib/fog/hyperv/requests/compute/set_vm_dvd_drive.rb +0 -12
  163. data/lib/fog/hyperv/requests/compute/set_vm_firmware.rb +0 -13
  164. data/lib/fog/hyperv/requests/compute/set_vm_hard_disk_drive.rb +0 -12
  165. data/lib/fog/hyperv/requests/compute/set_vm_network_adapter.rb +0 -12
  166. data/lib/fog/hyperv/requests/compute/set_vm_network_adapter_vlan.rb +0 -12
  167. data/lib/fog/hyperv/requests/compute/set_vm_switch.rb +0 -13
  168. data/lib/fog/hyperv/requests/compute/start_vm.rb +0 -15
  169. data/lib/fog/hyperv/requests/compute/stop_vm.rb +0 -15
  170. data/lib/fog/model.rb +0 -91
  171. data/test/fog/hyperv_test.rb +0 -7
  172. data/test/test_helper.rb +0 -4
  173. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_cluster.json +0 -0
  174. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_cluster_node.json +0 -0
  175. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vhd.json +0 -0
  176. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vm_bios.json +0 -0
  177. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vm_dvd_drive.json +0 -0
  178. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vm_firmware.json +0 -0
  179. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vm_floppy_disk_drive.json +0 -0
  180. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vm_hard_disk_drive.json +0 -0
  181. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vm_host.json +0 -0
  182. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vm_network_adapter.json +0 -0
  183. /data/lib/fog/hyperv/{requests/compute → compute/requests}/mock_files/get_vm_switch.json +0 -0
@@ -1,110 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class HardDrive < Fog::Hyperv::Model
5
- identity :id
6
-
7
- attribute :computer_name
8
- attribute :controller_location
9
- attribute :controller_number, type: :integer
10
- attribute :controller_type, type: :enum, values: %i[IDE SCSI]
11
- attribute :disk
12
- # attribute :is_deleted
13
- attribute :maximum_iops, type: :integer
14
- attribute :minimum_iops, type: :integer
15
- attribute :name
16
- attribute :path
17
- attribute :pool_name
18
- attribute :support_persistent_reservations
19
- attribute :vm_id
20
- attribute :vm_name
21
- # TODO? VM Snapshots?
22
-
23
- def vhd
24
- return nil unless path && computer_name
25
- @vhd ||= service.vhds.get(path, computer_name: computer_name)
26
- end
27
-
28
- def size_bytes
29
- vhd && vhd.size_bytes || 0
30
- end
31
-
32
- def size_bytes=(bytes)
33
- vhd.size_bytes = bytes if vhd
34
- end
35
-
36
- def save
37
- requires :computer_name, :vm_name
38
-
39
- if persisted?
40
- data = service.set_vm_hard_disk_drive(
41
- computer_name: old.computer_name,
42
- vm_name: old.vm_name,
43
- controller_location: old.controller_location,
44
- controller_number: old.controller_number,
45
- controller_type: old.controller_type,
46
- passthru: true,
47
-
48
- disk_number: changed?(:disk) && disk && disk.number,
49
- maximum_iops: changed!(:maximum_iops),
50
- minimum_iops: changed!(:minimum_iops),
51
- path: changed!(:path),
52
- resource_pool_name: changed!(:pool_name),
53
- support_persistent_reservations: changed!(:support_persistent_reservations),
54
- to_controller_location: changed!(:controller_location),
55
- to_controller_number: changed!(:controller_number),
56
- to_controller_type: changed!(:controller_type),
57
-
58
- _return_fields: self.class.attributes,
59
- _json_depth: 1
60
- )
61
- @vhd = nil if changed?(:path)
62
- else
63
- possible = %i[computer_name controller_location controller_number controller_type path vm_name].freeze
64
- data = service.add_vm_hard_disk_drive(
65
- attributes.select { |k, _v| possible.include? k }.merge(
66
- disk_number: disk && disk.number,
67
- resource_pool_name: pool_name,
68
-
69
- passthru: true,
70
- _return_fields: self.class.attributes,
71
- _json_depth: 1
72
- )
73
- )
74
- end
75
-
76
- merge_attributes(data)
77
- @old = dup
78
- self
79
- end
80
-
81
- def reload
82
- data = collection.get(
83
- computer_name: computer_name,
84
- vm_name: vm_name,
85
- controller_location: controller_location,
86
- controller_number: controller_number,
87
- controller_type: controller_type
88
- )
89
-
90
- merge_attributes(data.attributes)
91
- @old = data
92
- self
93
- end
94
-
95
- def destroy
96
- return unless persisted?
97
-
98
- service.remove_vm_hard_disk_drive(
99
- computer_name: computer_name,
100
- vm_name: vm_name,
101
-
102
- controller_location: controller_location,
103
- controller_number: controller_number,
104
- controller_type: controller_type
105
- )
106
- end
107
- end
108
- end
109
- end
110
- end
@@ -1,11 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class HardDrives < Fog::Hyperv::VMCollection
5
- model Fog::Compute::Hyperv::HardDrive
6
-
7
- get_method :get_vm_hard_disk_drive
8
- end
9
- end
10
- end
11
- end
@@ -1,45 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class Host < Fog::Hyperv::Model
5
- identity :name
6
-
7
- attribute :computer_name
8
- attribute :fully_qualified_domain_name
9
- attribute :logical_processor_count
10
- attribute :memory_capacity
11
- attribute :mac_address_minimum
12
- attribute :mac_address_maximum
13
- attribute :maximum_storage_migrations
14
- attribute :maximum_virtual_machine_migrations
15
- attribute :virtual_hard_disk_path
16
- attribute :virtual_machine_path
17
-
18
- def initialize(attrs = {})
19
- super
20
-
21
- @collections = {}
22
- self.class.ensure_collections!
23
- end
24
-
25
- def self.ensure_collections!
26
- return if @collections
27
- @collections = true
28
-
29
- Fog::Compute::Hyperv.collections.each do |coll|
30
- # Hosts don't have host collections
31
- next if coll == :hosts
32
-
33
- coll_name = coll.to_s.split('_').map(&:capitalize).join
34
- klass = Fog::Compute::Hyperv.const_get(coll_name)
35
- next if klass.requires?(:vm)
36
-
37
- define_method coll do
38
- @collections[coll] ||= service.send(coll, computer: self)
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,15 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class Hosts < Fog::Hyperv::Collection
5
- model Fog::Compute::Hyperv::Host
6
-
7
- get_method :get_vm_host
8
-
9
- def get(name, filters = {})
10
- super filters.merge(computer_name: name)
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,145 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class NetworkAdapter < Fog::Hyperv::Model
5
- identity :id
6
-
7
- # attribute :acl_list
8
- attribute :computer_name
9
- attribute :connected
10
- attribute :dynamic_mac_address_enabled, type: :boolean, default: true
11
- attribute :ip_addresses
12
- # attribute :is_deleted
13
- attribute :is_external_adapter
14
- attribute :is_legacy
15
- attribute :is_management_os
16
- # attribute :isolation_setting # Might need lazy loading
17
- attribute :mac_address
18
- attribute :name, type: :string, default: 'Network Adapter'
19
- # attribute :router_guard, type: :enum, values: [ :On, :Off ]
20
- # attribute :status, type: :enum, values: STATUS_ENUM_VALUES
21
- attribute :switch_id
22
- attribute :switch_name, type: :string
23
- attribute :vm_id
24
- attribute :vm_name
25
- # attribute :vlan_setting # Might need lazy loading
26
-
27
- def connect(switch, options = {})
28
- requires :name, :computer_name, :vm_name
29
-
30
- switch = switch.name if switch.is_a? Fog::Compute::Hyperv::Switch
31
-
32
- service.connect_vm_network_adapter options.merge(
33
- computer_name: computer_name,
34
- name: name,
35
- switch_name: switch,
36
- vm_name: vm_name
37
- )
38
- end
39
-
40
- def disconnect(options = {})
41
- requires :name, :computer_name, :vm_name
42
-
43
- service.disconnect_vm_network_adapter options.merge(
44
- computer_name: computer_name,
45
- name: name,
46
- vm_name: vm_name
47
- )
48
- end
49
-
50
- def switch
51
- service.switches.get switch_name, computer_name: computer_name if switch_name
52
- end
53
-
54
- def ip_addresses
55
- attributes[:ip_addresses] = [] \
56
- if attributes[:ip_addresses] == ''
57
- attributes[:ip_addresses]
58
- end
59
-
60
- def save
61
- requires :name, :computer_name, :vm_name
62
-
63
- data = \
64
- if !persisted?
65
- service.add_vm_network_adapter(
66
- computer_name: computer_name,
67
- name: name,
68
- vm_name: vm_name,
69
- passthru: true,
70
-
71
- dynamic_mac_address: dynamic_mac_address_enabled,
72
- is_legacy: !!is_legacy,
73
- static_mac_address: !dynamic_mac_address_enabled && mac_address,
74
- switch_name: switch_name,
75
-
76
- _return_fields: self.class.attributes,
77
- _json_depth: 1
78
- )
79
- else
80
- ret = service.set_vm_network_adapter(
81
- computer_name: old.computer_name,
82
- name: old.name,
83
- vm_name: old.vm_name,
84
- passthru: true,
85
-
86
- dynamic_mac_address: changed?(:dynamic_mac_address_enabled) && dynamic_mac_address_enabled,
87
- static_mac_address: changed!(:mac_address) || ((changed!(:dynamic_mac_address_enabled) == false) && mac_address),
88
-
89
- _return_fields: self.class.attributes,
90
- _json_depth: 1
91
- )
92
-
93
- if changed?(:switch_name)
94
- service.disconnect_vm_network_adapter(
95
- computer_name: ret.computer_name,
96
- name: ret.name,
97
- vm_name: ret.vm_name
98
- ) unless switch_name
99
-
100
- service.connect_vm_network_adapter(
101
- computer_name: ret.computer_name,
102
- name: ret.name,
103
- vm_name: ret.vm_name,
104
- switch_name: switch_name
105
- ) if switch_name
106
- end
107
- ret[:switch_name] = switch_name
108
- ret
109
- end
110
-
111
- if data.is_a? Array
112
- data = data.find { |e| e[:id] == id } if id
113
- data = data.last unless id
114
- end
115
-
116
- merge_attributes(data)
117
- @old = dup
118
- self
119
- end
120
-
121
- def destroy
122
- requires :vm_name, :name, :computer_name, :id
123
-
124
- service.remove_vm_network_adapter(
125
- name: name,
126
- computer_name: computer_name,
127
- vm_name: vm_name
128
- )
129
- end
130
-
131
- def reload
132
- data = collection.get(
133
- name,
134
- computer_name: computer_name,
135
- vm_name: vm_name,
136
- _suffix: "| Where Id -Eq '#{id}'"
137
- )
138
- merge_attributes(data.attributes)
139
- @old = data
140
- self
141
- end
142
- end
143
- end
144
- end
145
- end
@@ -1,19 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class NetworkAdapters < Fog::Hyperv::VMCollection
5
- model Fog::Compute::Hyperv::NetworkAdapter
6
-
7
- get_method :get_vm_network_adapter
8
-
9
- def all(filters = {})
10
- super filters.merge(all: !vm)
11
- end
12
-
13
- def get(name, filters = {})
14
- super filters.merge(name: name, all: !vm)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,220 +0,0 @@
1
- require 'fog/compute/models/server'
2
-
3
- module Fog
4
- module Compute
5
- class Hyperv
6
- class Server < Fog::Compute::Server
7
- extend Fog::Hyperv::ModelExtends
8
- include Fog::Hyperv::ModelIncludes
9
-
10
- VM_STATUS_ENUM_VALUES = {
11
- Unknown: 1,
12
- Running: 2,
13
- Off: 3,
14
- Stopping: 4,
15
- Saved: 6,
16
- Paused: 9,
17
- Starting: 10,
18
- Reset: 11,
19
- Saving: 32773,
20
- Pausing: 32776,
21
- Resuming: 32777,
22
- FastSaved: 32779,
23
- FastSaving: 32780,
24
- ForceShutdown: 32781,
25
- ForceReboot: 32782,
26
- RunningCritical: 32783,
27
- OffCritical: 32784,
28
- StoppingCritical: 32785,
29
- SavedCritical: 32786,
30
- PausedCritical: 32787,
31
- StartingCritical: 32788,
32
- ResetCritical: 32789,
33
- SavingCritical: 32790,
34
- PausingCritical: 32791,
35
- ResumingCritical: 32792,
36
- FastSavedCritical: 32793,
37
- FastSavingCritical: 32794,
38
- }.freeze
39
-
40
- identity :id, type: :string
41
-
42
- attribute :name, type: :string
43
- attribute :computer_name, type: :string
44
- attribute :com_port1
45
- attribute :com_port2
46
- attribute :dynamic_memory_enabled, type: :boolean, default: false
47
- attribute :generation, type: :integer, default: 1 # 1 => bios, 2 => uefi
48
- attribute :is_clustered, type: :boolean, default: false
49
- attribute :state, type: :enum, values: VM_STATUS_ENUM_VALUES
50
- attribute :status, type: :string
51
- attribute :memory_assigned, type: :integer
52
- attribute :memory_maximum, type: :integer, default: 17_179_869_184
53
- attribute :memory_minimum, type: :integer, default: 536_870_912
54
- attribute :memory_startup, type: :integer, default: 536_870_912
55
- attribute :notes, type: :string
56
- attribute :processor_count, type: :integer, default: 1
57
-
58
- lazy_attributes :network_adapters,
59
- :dvd_drives,
60
- :hard_drives,
61
- :floppy_drive
62
-
63
- attr_accessor :cluster_name
64
-
65
- %i(network_adapters dvd_drives floppy_drives hard_drives vhds).each do |attr|
66
- define_method attr do
67
- if persisted?
68
- attributes[attr] ||= service.send(attr, vm: self)
69
- else
70
- attributes[attr] ||= [] unless persisted?
71
- end
72
- end
73
- end
74
-
75
- %i(com_port1 com_port2).each do |attr|
76
- define_method "#{attr}=".to_sym do |data|
77
- attributes[attr] = Fog::Compute::Hyperv::ComPort.new(data) if data.is_a?(Hash)
78
- end
79
- end
80
-
81
- def initialize(attrs = {})
82
- super
83
-
84
- @cluster = attrs.delete :cluster
85
- @computer = attrs.delete :computer
86
- end
87
-
88
- def bios
89
- @bios ||= begin
90
- if generation == 1
91
- Fog::Compute::Hyperv::Bios.new(service.get_vm_bios(computer_name: computer_name, vm_name: name).merge service: service)
92
- elsif generation == 2
93
- Fog::Compute::Hyperv::Firmware.new(service.get_vm_firmware(computer_name: computer_name, vm_name: name).merge service: service)
94
- end
95
- end
96
- end
97
- alias firmware :bios
98
-
99
- alias vm_id :id
100
- alias vm_name :name
101
-
102
- # TODO: Do this properly
103
- def set_vlan(vlan_id, options = {})
104
- requires :name, :computer_name
105
- if vlan_id
106
- options[:access] = true
107
- options[:vlan_id] = vlan_id
108
- else
109
- options[:untagged] = true
110
- end
111
-
112
- service.set_vm_network_adapter_vlan options.merge(
113
- vm_name: name,
114
- computer_name: computer_name
115
- )
116
- end
117
-
118
- def start(options = {})
119
- requires :name, :computer_name
120
- service.start_vm options.merge(
121
- name: name,
122
- computer_name: computer_name
123
- )
124
- end
125
-
126
- def stop(options = {})
127
- requires :name, :computer_name
128
- service.stop_vm options.merge(
129
- name: name,
130
- computer_name: computer_name
131
- )
132
- end
133
-
134
- def restart(options = {})
135
- requires :name, :computer_name
136
- service.restart_vm options.merge(
137
- name: name,
138
- computer_name: computer_name
139
- )
140
- end
141
- alias reboot :restart
142
-
143
- def destroy(options = {})
144
- requires :name, :computer_name
145
- stop turn_off: true if ready?
146
- service.remove_vm options.merge(
147
- name: name,
148
- computer_name: computer_name
149
- )
150
- end
151
-
152
- def add_interface(options = {})
153
- network_adapters.create options
154
- end
155
-
156
- def save(options = {})
157
- requires :name
158
-
159
- data = \
160
- if !persisted?
161
- usable = %i(name memory_startup generation boot_device switch_name no_vhd new_vhd_path new_vhd_size_bytes).freeze
162
- service.new_vm \
163
- attributes.select { |k, _v| usable.include? k }
164
- .merge(options)
165
- .merge(_return_fields: self.class.attributes, _json_depth: 1)
166
- else
167
- service.set_vm options.merge(
168
- computer_name: old.computer_name,
169
- name: old.name,
170
- passthru: true,
171
-
172
- processor_count: changed!(:processor_count),
173
- dynamic_memory: changed?(:dynamic_memory_enabled) && dynamic_memory_enabled,
174
- static_memory: changed?(:dynamic_memory_enabled) && !dynamic_memory_enabled,
175
- memory_minimum_bytes: changed?(:memory_minimum) && dynamic_memory_enabled && memory_minimum,
176
- memory_maximum_bytes: changed?(:memory_maximum) && dynamic_memory_enabled && memory_maximum,
177
- memory_startup_bytes: changed!(:memory_startup),
178
- notes: changed!(:notes),
179
- new_name: changed!(:name),
180
-
181
- _return_fields: self.class.attributes,
182
- _json_depth: 1
183
- )
184
- end
185
-
186
- merge_attributes(data)
187
- @old = dup
188
- self
189
- end
190
-
191
- def reload
192
- data = collection.get id
193
-
194
- clear_lazy
195
- merge_attributes(data.attributes)
196
- @old = data
197
- self
198
- end
199
-
200
- def ready?
201
- state_num == 2
202
- end
203
-
204
- def mac_addresses
205
- network_adapters.map(&:mac_address)
206
- end
207
-
208
- def ip_addresses
209
- network_adapters.map(&:ip_addresses).flatten
210
- end
211
-
212
- def public_ip_address
213
- ip_addresses
214
- .reject { |a| a =~ /^(169\.254|fe80)/ }
215
- .first
216
- end
217
- end
218
- end
219
- end
220
- end
@@ -1,21 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class Servers < Fog::Hyperv::ComputerCollection
5
- model Fog::Compute::Hyperv::Server
6
-
7
- get_method :get_vm
8
-
9
- def get(identity, filters = {})
10
- guid = identity =~ /\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/
11
-
12
- search = {}
13
- search[:id] = identity if guid
14
- search[:name] = identity unless guid
15
-
16
- super search.merge(filters)
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,65 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class Switch < Fog::Hyperv::Model
5
- identity :id
6
-
7
- attribute :computer_name
8
- # attribute :default_flow_minimum_bandwidth_absolute
9
- # attribute :default_flow_minimum_bandwidth_weight
10
- # attribute :is_deleted
11
- attribute :name
12
- attribute :net_adapter_interface_description
13
- attribute :notes
14
- attribute :switch_type, type: :enum, values: %i[Private Internal External]
15
-
16
- def save
17
- requires :name
18
-
19
- data = \
20
- if persisted?
21
- service.set_vm_switch(
22
- computer_name: old.computer_name,
23
- name: old.name,
24
- net_adapter_interface_description: old.net_adapter_interface_description,
25
- switch_type: !old.net_adapter_interface_description && old.switch_type,
26
- passthru: true,
27
-
28
- default_flow_minimum_bandwidth_absolute: changed!(default_flow_minimum_bandwidth_absolute),
29
- default_flow_minimum_bandwidth_weight: changed!(default_flow_minimum_bandwidth_weight),
30
- notes: changed!(notes),
31
-
32
- _return_fields: self.class.attributes,
33
- _json_depth: 1
34
- )
35
- else
36
- service.new_vm_switch(
37
- computer_name: computer_name,
38
- name: name,
39
- net_adapter_interface_description: net_adapter_interface_description,
40
- notes: notes,
41
- switch_type: !net_adapter_interface_description && switch_type,
42
-
43
- _return_fields: self.class.attributes,
44
- _json_depth: 1
45
- )
46
- end
47
-
48
- merge_attributes(data)
49
- @old = dup
50
- self
51
- end
52
-
53
- def reload
54
- data = collection.get(
55
- name,
56
- computer_name: computer_name
57
- )
58
- merge_attributes(data.attributes)
59
- @old = data
60
- self
61
- end
62
- end
63
- end
64
- end
65
- end
@@ -1,15 +0,0 @@
1
- module Fog
2
- module Compute
3
- class Hyperv
4
- class Switches < Fog::Hyperv::ComputerCollection
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