foreman_hyperv 0.0.1 → 0.0.2
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 +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +2 -0
- data/app/assets/javascripts/compute_resources/hyperv/base.js +30 -4
- data/app/models/foreman_hyperv/hyperv.rb +24 -18
- data/app/views/compute_resources_vms/form/hyperv/_base.html.erb +11 -5
- data/app/views/compute_resources_vms/show/_hyperv.html.erb +28 -3
- data/foreman_hyperv.gemspec +1 -1
- data/lib/foreman_hyperv/engine.rb +12 -1
- data/lib/foreman_hyperv/version.rb +1 -1
- metadata +5 -5
- data/app/helpers/hyperv_helpers.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 710168316d53c6c4bb3276fa02faa45a28c602bb
|
4
|
+
data.tar.gz: 484471496d5c678718430e539639d4d6bc4b38d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19eb7700b2fc5030f2d4c7711d31dd3c77d5445b5442ac66e199cf7da0cdcd01c91609240a911e59036696411436f2a59e5e7314a10afef8ffdffed436f03245
|
7
|
+
data.tar.gz: 3a03d174196f13b3e8967f25c1eb23fb524f12919ede792dc8000ab8c34d5e88bb632182a4529a7e73740fcf288ec7a71261b7bfcbff33ee5a70a1646bdcb190
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
## v0.0.2 2017-09-30
|
2
|
+
|
3
|
+
- Add Dynamic memory settings
|
4
|
+
- Add JS for disabling unavailable settings to improve UX
|
5
|
+
- Fix secure boot setting to actually apply
|
6
|
+
- Skip several unnecessary Hyper-V calls to improve performance
|
7
|
+
- Improve VM properties view to look a little better and house another few nuggets of information
|
8
|
+
|
9
|
+
## v0.0.1 2017-09-28
|
10
|
+
|
11
|
+
- Initial release
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Foreman Hyper-V
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/foreman_hyperv)
|
4
|
+
|
3
5
|
Microsoft Hyper-V compute resource for Foreman
|
4
6
|
|
5
7
|
Uses the in-development `fog-hyperv` gem found [here](https://github.com/ace13/fog-hyperv).
|
@@ -1,6 +1,32 @@
|
|
1
|
-
|
1
|
+
function hypervGenerationChange(item) {
|
2
|
+
var toIter = ['#host_compute_attributes_secure_boot_enabled', '#compute_attribute_vm_attrs_secure_boot_enabled'];
|
3
|
+
gen = $(item).val();
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
|
5
|
+
if (gen == 1) {
|
6
|
+
for (var i = 0; i < toIter.length; ++i) {
|
7
|
+
$(toIter[i]).attr('disabled', true);
|
8
|
+
}
|
9
|
+
} else {
|
10
|
+
for (var i = 0; i < toIter.length; ++i) {
|
11
|
+
$(toIter[i]).removeAttr('disabled');
|
12
|
+
}
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
function hypervDynamicMemoryChange(item) {
|
17
|
+
var toIter = [
|
18
|
+
'#host_compute_attributes_memory_maximum',
|
19
|
+
'#host_compute_attributes_memory_minimum',
|
20
|
+
'#compute_attribute_vm_attrs_memory_maximum',
|
21
|
+
'#compute_attribute_vm_attrs_memory_minimum',
|
22
|
+
];
|
23
|
+
if (item.checked) {
|
24
|
+
for (var i = 0; i < toIter.length; ++i) {
|
25
|
+
$(toIter[i]).removeAttr('disabled');
|
26
|
+
}
|
27
|
+
} else {
|
28
|
+
for (var i = 0; i < toIter.length; ++i) {
|
29
|
+
$(toIter[i]).attr('disabled', true);
|
30
|
+
}
|
31
|
+
}
|
6
32
|
}
|
@@ -15,10 +15,10 @@ module ForemanHyperv
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_connection(options = {})
|
18
|
-
super
|
18
|
+
super
|
19
19
|
client.valid?
|
20
|
-
rescue Fog::Hyperv::Errors::ServiceError, ArgumentError, WinRM::WinRMAuthorizationError
|
21
|
-
|
20
|
+
rescue Fog::Hyperv::Errors::ServiceError, ArgumentError, WinRM::WinRMAuthorizationError => e
|
21
|
+
errors[:base] << e.message
|
22
22
|
end
|
23
23
|
|
24
24
|
def provided_attributes
|
@@ -53,11 +53,12 @@ module ForemanHyperv
|
|
53
53
|
|
54
54
|
def create_vm(args = {})
|
55
55
|
args = vm_instance_defaults.merge(args.to_hash.deep_symbolize_keys)
|
56
|
-
logger.debug "Creating a VM with arguments; #{args}"
|
56
|
+
client.logger.debug "Creating a VM with arguments; #{args}"
|
57
|
+
|
57
58
|
pre_create = {
|
58
59
|
boot_device: 'NetworkAdapter',
|
59
60
|
generation: args[:generation].to_i,
|
60
|
-
memory_startup: args[:memory_startup].presence,
|
61
|
+
memory_startup: args[:memory_startup].presence.to_i,
|
61
62
|
name: args[:name],
|
62
63
|
no_vhd: true
|
63
64
|
}
|
@@ -65,7 +66,9 @@ module ForemanHyperv
|
|
65
66
|
vm = client.servers.create pre_create
|
66
67
|
|
67
68
|
post_save = {
|
68
|
-
dynamic_memory_enabled:
|
69
|
+
dynamic_memory_enabled: Foreman::Cast.to_bool(args[:dynamic_memory_enabled]),
|
70
|
+
memory_minimum: args[:memory_minimum].presence.to_i,
|
71
|
+
memory_maximum: args[:memory_maximum].presence.to_i,
|
69
72
|
notes: args[:notes].presence,
|
70
73
|
processor_count: args[:processor_count].to_i
|
71
74
|
}
|
@@ -75,9 +78,9 @@ module ForemanHyperv
|
|
75
78
|
|
76
79
|
vm.save if vm.dirty?
|
77
80
|
|
78
|
-
if vm.generation == 2 &&
|
81
|
+
if vm.generation == 2 && args[:secure_boot_enabled].present?
|
79
82
|
f = vm.firmware
|
80
|
-
f.secure_boot =
|
83
|
+
f.secure_boot = Foreman::Cast.to_bool(args[:secure_boot_enabled]) ? :On : :Off
|
81
84
|
f.save if f.dirty?
|
82
85
|
end
|
83
86
|
|
@@ -93,17 +96,20 @@ module ForemanHyperv
|
|
93
96
|
|
94
97
|
def save_vm(uuid, attr)
|
95
98
|
vm = find_vm_by_uuid(uuid)
|
96
|
-
logger.debug "Saving a VM with arguments; #{attr}"
|
99
|
+
client.logger.debug "Saving a VM with arguments; #{attr}"
|
97
100
|
attr.each do |k, v|
|
98
101
|
vm.send("#{k}=".to_sym, v) if vm.respond_to?("#{k}=".to_sym)
|
99
102
|
end
|
100
|
-
|
103
|
+
|
104
|
+
if vm.generation == 2 && attr[:secure_boot_enabled].present?
|
101
105
|
f = vm.firmware
|
102
|
-
f.secure_boot =
|
106
|
+
f.secure_boot = Foreman::Cast.to_bool(attr[:secure_boot_enabled]) ? :On : :Off
|
103
107
|
f.save if f.dirty?
|
104
108
|
end
|
109
|
+
|
105
110
|
update_interfaces(vm, attr[:interfaces_attributes])
|
106
111
|
update_volumes(vm, attr[:volumes_attributes])
|
112
|
+
|
107
113
|
vm.save if vm.dirty?
|
108
114
|
vm
|
109
115
|
end
|
@@ -177,9 +183,9 @@ module ForemanHyperv
|
|
177
183
|
vm.network_adapters.each(&:destroy)
|
178
184
|
|
179
185
|
interfaces = nested_attributes_for :interfaces, attrs
|
180
|
-
logger.debug "Building interfaces with: #{interfaces}"
|
186
|
+
client.logger.debug "Building interfaces with: #{interfaces}"
|
181
187
|
interfaces.each do |iface|
|
182
|
-
nic = vm.network_adapters.
|
188
|
+
nic = vm.network_adapters.new name: iface[:name], switch_name: iface[:network]
|
183
189
|
if iface[:mac]
|
184
190
|
nic.mac = iface[:mac]
|
185
191
|
nic.dynamic_mac_address_enabled = false
|
@@ -200,7 +206,7 @@ module ForemanHyperv
|
|
200
206
|
|
201
207
|
def create_volumes(vm, attrs)
|
202
208
|
volumes = nested_attributes_for :volumes, attrs
|
203
|
-
logger.debug "Building volumes with: #{volumes}"
|
209
|
+
client.logger.debug "Building volumes with: #{volumes}"
|
204
210
|
volumes.each do |vol|
|
205
211
|
vhd = vm.vhds.create path: vm.folder_name + '\\' + vol[:path], size: vol[:size]
|
206
212
|
vm.hard_drives.create path: vhd.path
|
@@ -210,7 +216,7 @@ module ForemanHyperv
|
|
210
216
|
|
211
217
|
def update_interfaces(vm, attrs)
|
212
218
|
interfaces = nested_attributes_for :interfaces, attrs
|
213
|
-
logger.debug "Updating interfaces with: #{interfaces}"
|
219
|
+
client.logger.debug "Updating interfaces with: #{interfaces}"
|
214
220
|
interfaces.each do |interface|
|
215
221
|
if interface[:id].blank? && interface[:_delete] != '1'
|
216
222
|
nic = vm.network_adapters.create interface
|
@@ -232,14 +238,14 @@ module ForemanHyperv
|
|
232
238
|
|
233
239
|
def update_volumes(vm, attrs)
|
234
240
|
volumes = nested_attributes_for :volumes, attrs
|
235
|
-
logger.debug "Updating volumes with: #{volumes}"
|
241
|
+
client.logger.debug "Updating volumes with: #{volumes}"
|
236
242
|
volumes.each do |volume|
|
237
243
|
if volume[:_delete] == '1' && volume[:id].present?
|
238
|
-
hd = vm.hard_drives.
|
244
|
+
hd = vm.hard_drives.find { |h| h.id == volume[:id] }
|
239
245
|
hd.vhd.destroy
|
240
246
|
hd.destroy
|
241
247
|
end
|
242
|
-
vm.hard_drives.create(path: volume[:path], size: volume[:size]) if volume[:id].blank?
|
248
|
+
vm.hard_drives.create(path: volume[:path], size: volume[:size]) if volume[:id].blank? && volume[:_delete] != '1'
|
243
249
|
end
|
244
250
|
end
|
245
251
|
end
|
@@ -1,15 +1,19 @@
|
|
1
|
-
<%#= compute_specific_js(compute_resource, 'base') %>
|
2
1
|
<%= javascript_tag("$(document).on('ContentLoad', tfm.numFields.initAll)") %>
|
3
2
|
|
4
3
|
<%
|
5
4
|
generations = [ [1, 'Generation 1 (BIOS)'], [2, 'Generation 2 (UEFI)'] ]
|
6
5
|
%>
|
7
|
-
<%= select_f f, :generation, generations, :first, :last, {}, label: 'Generation', disabled: !new_host, onchange: 'hypervGenerationChange()'
|
8
|
-
|
6
|
+
<%= select_f f, :generation, generations, :first, :last, {}, label: 'Generation', disabled: !new_host, onchange: 'hypervGenerationChange(this);' %>
|
7
|
+
<% if new_host || f.object.generation == 2 %>
|
8
|
+
<%= checkbox_f f, :secure_boot_enabled, { label: _('Use Secure Boot'), disabled: f.object.generation == 1 }, 'true', 'false' %>
|
9
|
+
<% end %>
|
9
10
|
|
10
11
|
<%= counter_f f, :processor_count, label: _('CPUs'), label_size: 'col-md-2' %>
|
11
|
-
<%= byte_size_f f, :memory_startup, class: 'col-md-2', label: _('Memory') %>
|
12
|
-
|
12
|
+
<%= byte_size_f f, :memory_startup, class: 'col-md-2', label: _('Memory (Startup)') %>
|
13
|
+
|
14
|
+
<%= byte_size_f f, :memory_maximum, class: 'col-md-2', label: _('Memory Maximum'), disabled: !f.object.dynamic_memory_enabled %>
|
15
|
+
<%= byte_size_f f, :memory_minimum, class: 'col-md-2', label: _('Memory Minimum'), disabled: !f.object.dynamic_memory_enabled %>
|
16
|
+
<%= checkbox_f f, :dynamic_memory_enabled, { label: _('Use Dynamic Memory'), onchange: 'hypervDynamicMemoryChange(this);' }, 'true', 'false' %>
|
13
17
|
|
14
18
|
<% if new_host %>
|
15
19
|
<% checked = params[:host] && params[:host][:compute_attributes] && params[:host][:compute_attributes][:start] || '1' %>
|
@@ -18,3 +22,5 @@
|
|
18
22
|
|
19
23
|
<%= textarea_f f, :notes, rows: '3', label: _('Notes') %>
|
20
24
|
<%= f.hidden_field :id %>
|
25
|
+
|
26
|
+
<%= compute_specific_js(compute_resource, 'base') %>
|
@@ -1,4 +1,18 @@
|
|
1
1
|
<% title @vm.name %>
|
2
|
+
<%
|
3
|
+
def memory_prop(method)
|
4
|
+
content_tag :tr do
|
5
|
+
result = content_tag(:td) do
|
6
|
+
method.to_s.humanize
|
7
|
+
end
|
8
|
+
result += content_tag(:td) do
|
9
|
+
value = @vm.send(method) rescue nil
|
10
|
+
value && number_to_human_size(value)
|
11
|
+
end
|
12
|
+
result
|
13
|
+
end
|
14
|
+
end
|
15
|
+
%>
|
2
16
|
|
3
17
|
<div class='col-md-12'>
|
4
18
|
<table class="<%= table_css_classes %>">
|
@@ -8,11 +22,22 @@
|
|
8
22
|
<tbody>
|
9
23
|
<%= prop :id %>
|
10
24
|
<%#= prop :cluster %>
|
11
|
-
<%= prop :
|
25
|
+
<%= prop :name %>
|
26
|
+
<tr>
|
27
|
+
<td>Generation</td>
|
28
|
+
<td><%= @vm.generation == 1 ? 'Generation 1 (BIOS)' : 'Generation 2 (UEFI)' %></td>
|
29
|
+
</tr>
|
30
|
+
<% if @vm.generation != 1 %>
|
31
|
+
<tr>
|
32
|
+
<td>SecureBoot</td>
|
33
|
+
<td><%= @vm.firmware.secure_boot %></td>
|
34
|
+
</tr>
|
35
|
+
<% end %>
|
12
36
|
<% if @vm.dynamic_memory_enabled %>
|
13
|
-
<%=
|
14
|
-
<%=
|
37
|
+
<%= memory_prop :memory_maximum %>
|
38
|
+
<%= memory_prop :memory_minimum %>
|
15
39
|
<% end %>
|
40
|
+
<%= memory_prop :memory_startup %>
|
16
41
|
<%= prop :public_ip_address %>
|
17
42
|
<%= prop :mac %>
|
18
43
|
<%= prop :processor_count %>
|
data/foreman_hyperv.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^test\/})
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_runtime_dependency 'fog-hyperv', '~> 0.0.
|
22
|
+
spec.add_runtime_dependency 'fog-hyperv', '~> 0.0.2'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.13'
|
25
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
@@ -9,8 +9,19 @@ module ForemanHyperv
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
assets_to_precompile =
|
13
|
+
Dir.chdir(root) do
|
14
|
+
Dir['app/assets/javascripts/**/*'].map do |f|
|
15
|
+
f.split(File::SEPARATOR, 4).last
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
12
19
|
initializer 'foreman_hyperv.assets.precompile' do |app|
|
13
|
-
app.config.assets.precompile +=
|
20
|
+
app.config.assets.precompile += assets_to_precompile
|
21
|
+
end
|
22
|
+
|
23
|
+
initializer 'foreman_hyperv.configure_assets', group: :assets do
|
24
|
+
SETTINGS[:foreman_hyperv] = { assets: { precompile: assets_to_precompile } }
|
14
25
|
end
|
15
26
|
|
16
27
|
config.to_prepare do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_hyperv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Olofsson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog-hyperv
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.
|
19
|
+
version: 0.0.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0.
|
26
|
+
version: 0.0.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,12 +77,12 @@ files:
|
|
77
77
|
- ".rubocop.yml"
|
78
78
|
- ".rubocop_todo.yml"
|
79
79
|
- ".travis.yml"
|
80
|
+
- CHANGELOG.md
|
80
81
|
- Gemfile
|
81
82
|
- LICENSE.txt
|
82
83
|
- README.md
|
83
84
|
- Rakefile
|
84
85
|
- app/assets/javascripts/compute_resources/hyperv/base.js
|
85
|
-
- app/helpers/hyperv_helpers.rb
|
86
86
|
- app/models/concerns/fog_extensions/hyperv/compute.rb
|
87
87
|
- app/models/concerns/fog_extensions/hyperv/network_adapter.rb
|
88
88
|
- app/models/concerns/fog_extensions/hyperv/server.rb
|