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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 095c817dd697a8c2bde70d4b2a4d4dad16eba039
4
- data.tar.gz: 59761e7d008a15a913ee8951678c8467a5ed85ec
3
+ metadata.gz: 710168316d53c6c4bb3276fa02faa45a28c602bb
4
+ data.tar.gz: 484471496d5c678718430e539639d4d6bc4b38d3
5
5
  SHA512:
6
- metadata.gz: 61ef39ff83c31aa3e9fd8b8a6c8151163b4eba692b8c54025c3ab0544e9c6b22990c44cdb5d71d7f3b81fe2ec5073def03354d513c0c8a6483ea3689724202f0
7
- data.tar.gz: 35cc0657a3474aacb7033550580478fd4285599e290147fb95713f57c8a918b9f4fce48a7977d14574d39a7f21f74637be7dbc8e432497752e816cf0658a3bd7
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
+ [![Gem Version](https://badge.fury.io/rb/foreman_hyperv.svg)](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
- $(document).on('ContentLoad', hypervGenerationChange);
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
- function hypervGenerationChange() {
4
- gen = $('#host_compute_attributes_generation').val()
5
- // $('#host_compute_attributes_secure_boot_enabled').disable()
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 options
18
+ super
19
19
  client.valid?
20
- rescue Fog::Hyperv::Errors::ServiceError, ArgumentError, WinRM::WinRMAuthorizationError
21
- false
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: ActiveRecord::Type::Boolean.new.type_cast_from_user(args[: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 && !args[:secure_boot_enabled].nil?
81
+ if vm.generation == 2 && args[:secure_boot_enabled].present?
79
82
  f = vm.firmware
80
- f.secure_boot = ActiveRecord::Type::Boolean.new.type_cast_from_user(args[:secure_boot_enabled]) ? :On : :Off
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
- if vm.generation == 2 && !args[:secure_boot_enabled].nil?
103
+
104
+ if vm.generation == 2 && attr[:secure_boot_enabled].present?
101
105
  f = vm.firmware
102
- f.secure_boot = ActiveRecord::Type::Boolean.new.type_cast_from_user(args[:secure_boot_enabled]) ? :On : :Off
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.create name: iface[:name], switch_name: iface[:network]
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.get(path: volume[:path])
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
- <%= checkbox_f f, :secure_boot_enabled, { label: _('Use Secure Boot') }, 'true', 'false' %>
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
- <%= checkbox_f f, :dynamic_memory_enabled, { label: _('Use Dynamic Memory') }, 'true', 'false' %>
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 :memory_startup %>
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
- <%= prop :memory_minimum %>
14
- <%= prop :memory_maximum %>
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 %>
@@ -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.1'
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 += %w(compute_resources/hyperv/base.js)
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
@@ -1,3 +1,3 @@
1
1
  module ForemanHyperv
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.2'.freeze
3
3
  end
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.1
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-28 00:00:00.000000000 Z
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.1
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.1
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
@@ -1,7 +0,0 @@
1
- module HypervHelpers
2
- def hyperv_switches(compute)
3
- compute.switches.map do |sw|
4
- [sw.name, sw.name]
5
- end
6
- end
7
- end