foreman_fog_proxmox 0.5.6 → 0.6.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.

Potentially problematic release.


This version of foreman_fog_proxmox might be problematic. Click here for more details.

Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +28 -18
  3. data/app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb +1 -1
  4. data/app/helpers/proxmox_container_helper.rb +4 -3
  5. data/app/helpers/proxmox_server_helper.rb +3 -2
  6. data/app/helpers/proxmox_vm_helper.rb +6 -4
  7. data/app/models/concerns/fog_extensions/proxmox/{container_config.rb → node.rb} +6 -11
  8. data/app/models/concerns/fog_extensions/proxmox/server.rb +2 -13
  9. data/app/models/concerns/fog_extensions/proxmox/server_config.rb +18 -4
  10. data/app/models/foreman_fog_proxmox/proxmox.rb +104 -66
  11. data/app/overrides/compute_resources_vms/form/add_clone_to_new_vm_compute_detail.rb +0 -9
  12. data/app/overrides/compute_resources_vms/form/add_vm_type_to_networks_form.rb +1 -1
  13. data/app/overrides/compute_resources_vms/form/add_vm_type_to_nic_provider_specific_form.rb +1 -1
  14. data/app/services/foreman_fog_proxmox/node_dashboard/data.rb +3 -3
  15. data/app/views/compute_resources/form/_proxmox.html.erb +2 -2
  16. data/app/views/compute_resources/show/_proxmox.html.erb +4 -0
  17. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_networks_form.html.erb +2 -1
  18. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_networks_new_childs_form.html.erb +1 -0
  19. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_nic_provider_specific_form.html.erb +2 -1
  20. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_volumes_edit.html.erb +0 -1
  21. data/app/views/compute_resources_vms/form/proxmox/_general.html.erb +1 -1
  22. data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +0 -1
  23. data/app/views/compute_resources_vms/show/_proxmox.html.erb +1 -1
  24. data/app/views/dashboard/_foreman_fog_proxmox_widget.erb +2 -2
  25. data/lib/foreman_fog_proxmox/engine.rb +3 -5
  26. data/lib/foreman_fog_proxmox/version.rb +1 -1
  27. data/test/factories/proxmox_factory.rb +9 -2
  28. data/test/unit/foreman_fog_proxmox/helpers/proxmox_container_helper_test.rb +5 -5
  29. data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +2 -1
  30. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_helper_test.rb +22 -14
  31. data/test/unit/foreman_fog_proxmox/proxmox_test.rb +22 -31
  32. data/test/unit/foreman_fog_proxmox/proxmox_test_helpers.rb +18 -4
  33. metadata +8 -9
  34. data/app/models/concerns/fog_extensions/proxmox/container.rb +0 -57
@@ -15,15 +15,6 @@
15
15
  # You should have received a copy of the GNU General Public License
16
16
  # along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
- Deface::Override.new(
19
- :virtual_path => "hosts/_compute_detail",
20
- :name => "add_clone_to_new_vm_compute_detail",
21
- :replace => "erb[silent]:contains('new_vm = @host.nil? || new_vm?(@host)')",
22
- :text => "<% new_vm = @host.nil? || new_vm?(@host) || @host.name.nil? %>",
23
- :original => "<% new_vm = @host.nil? || new_vm?(@host) %>"
24
- )
25
-
26
-
27
18
  Deface::Override.new(
28
19
  :virtual_path => "hosts/_compute_detail",
29
20
  :name => "add_from_profile_to_compute_detail",
@@ -20,7 +20,7 @@ Deface::Override.new(
20
20
  :name => "add_vm_type_to_networks_form",
21
21
  :replace => "erb[loud]:contains('render')",
22
22
  :partial => "compute_resources_vms/form/proxmox/add_vm_type_to_networks_form",
23
- :original => 'bae57f59cbbf6fcf1aecdf3a02baee5ff3494c85'
23
+ :original => 'ce82feb03418d25628001c9fc5f5f78025c5e5f8'
24
24
  )
25
25
 
26
26
  Deface::Override.new(
@@ -21,5 +21,5 @@ Deface::Override.new(
21
21
  :replace => "erb[loud]:contains('f.fields_for')",
22
22
  :closing_selector => "erb[silent]:contains('end')",
23
23
  :partial => "compute_resources_vms/form/proxmox/add_vm_type_to_nic_provider_specific_form",
24
- :original => '3c575e0e570cc620277fbffd61bfdc7c42bbdc77'
24
+ :original => 'f1a2373efd9c7c993fd1662a2ee4752183542704'
25
25
  )
@@ -25,13 +25,13 @@ module ForemanFogProxmox::NodeDashboard
25
25
  @filter = filter
26
26
  end
27
27
 
28
- def node
28
+ def node_id
29
29
  @compute_resource = ComputeResource.find_by(type: 'ForemanFogProxmox::Proxmox')
30
- @compute_resource.node if @compute_resource
30
+ @compute_resource.node_id if @compute_resource
31
31
  end
32
32
 
33
33
  def statistics
34
- node.statistics('rrddata', { timeframe: 'hour', cf: 'AVERAGE' }) if node
34
+ node.statistics('rrddata', { timeframe: 'hour', cf: 'AVERAGE' }) if node_id
35
35
  end
36
36
  end
37
37
  end
@@ -18,11 +18,11 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
18
18
  <%= javascript_include_tag 'foreman_fog_proxmox/proxmox_compute_resource', "data-turbolinks-track" => true %>
19
19
 
20
20
  <% nodes = f.object.nodes rescue nil %>
21
- <% node_name = !!f.object.node_name ? f.object.node_name : '' %>
21
+ <% node_id = !!f.object.node_id ? f.object.node_id : '' %>
22
22
  <%= text_f f, :url, :help_block => _("e.g. https://127.0.0.1:8006/api2/json"), :help_inline_permanent => load_button_f(f, !!nodes, _("Test failed")) %>
23
23
  <%= text_f f, :user , :help_block => _("e.g. root@pam") %>
24
24
  <%= password_f f, :password, :keep_value => true, :unset => unset_password? %>
25
25
  <%= checkbox_f f, :ssl_verify_peer, :label => _("SSL verify peer"), :checked => true, :onchange => "sslVerifyPeerSelected(this)" %>
26
26
  <%= textarea_f f, :ssl_certs, :label => _("X509 Certification Authorities"), :size => "col-md-4",
27
27
  :placeholder => _("Optionally provide a CA, or a correctly ordered CA chain. If left blank, disable ssl_verify_peer.") %>
28
- <%= select_f f, :node_name, nodes, :node, :node, { :include_blank => true }, :label => _('Node'), :label_size => "col-md-2", :required => true, :disabled => (node_name != '') %>
28
+ <%= select_f f, :node_id, nodes, :node, :node, { :include_blank => true }, :label => _('Node'), :label_size => "col-md-2", :required => true, :disabled => (node_id != '') %>
@@ -19,3 +19,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
19
19
  <td><%= _("URL") %></td>
20
20
  <td><%= @compute_resource.url %></td>
21
21
  </tr>
22
+ <tr>
23
+ <td><%= _("Version") %></td>
24
+ <td><%= @compute_resource.version['version'] %></td>
25
+ </tr>
@@ -16,8 +16,9 @@ You should have received a copy of the GNU General Public License
16
16
  along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
17
17
 
18
18
  <% vm_type = f.object.respond_to?('type') ? f.object.type : nil %>
19
+ <% logger.debug("vm_type=#{vm_type}") %>
19
20
 
20
21
  <%= render :partial => provider_partial(compute_resource, 'network'),
21
- :locals => { :f => i, :vm_type => vm_type, :compute_resource => compute_resource, :new_host => new_host, :new_vm => new_vm, :remove_title => _('remove network interface') },
22
+ :locals => { :f => i, :vm_type => vm_type, :compute_resource => compute_resource, :new_host => new_host, :new_vm => new_vm, :remove_title => _('remove network interface'), :selected_cluster => selected_cluster },
22
23
  :layout => 'compute_resources_vms/form/deletable_layout' %>
23
24
 
@@ -16,6 +16,7 @@ You should have received a copy of the GNU General Public License
16
16
  along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
17
17
 
18
18
  <% vm_type = f.object.respond_to?('type') ? f.object.type : nil %>
19
+ <% logger.debug("vm_type=#{vm_type}") %>
19
20
 
20
21
  <%= new_child_fields_template(f, compute_resource.interfaces_attrs_name, {
21
22
  :object => compute_resource.new_interface,
@@ -16,8 +16,9 @@ You should have received a copy of the GNU General Public License
16
16
  along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
17
17
  <% compute_attributes = f.options[:parent_builder].object.compute_attributes %>
18
18
  <% vm_type = compute_attributes ? compute_attributes['type'] : f.object.type %>
19
+ <% logger.debug("vm_type=#{vm_type}") %>
19
20
 
20
21
  <%= f.fields_for 'compute_attributes', OpenStruct.new(f.object.compute_attributes) do |f| %>
21
- <%= render provider_partial(@host.compute_resource, 'network'), :f => f, :vm_type => vm_type, :disabled => f.object.persisted?, :compute_resource => @host.compute_resource, :new_host => new_vm?(@host), :new_vm => new_vm?(@host) %>
22
+ <%= render provider_partial(@host.compute_resource, 'network'), :f => f, :vm_type => vm_type, :disabled => f.object.persisted?, :compute_resource => @host.compute_resource, :new_host => new_vm, :new_vm => new_vm %>
22
23
  <% end %>
23
24
 
@@ -16,7 +16,6 @@ You should have received a copy of the GNU General Public License
16
16
  along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
17
17
 
18
18
  <% type = f.object.type %>
19
- <% logger.debug("type=#{type}") %>
20
19
  <% server = type == 'qemu' %>
21
20
  <% container = type == 'lxc' %>
22
21
 
@@ -20,7 +20,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
20
20
  <%= field_set_tag _("General"), :id => "general" do %>
21
21
  <%= checkbox_f f, :templated, :label => _('Create image?'), :disabled => untemplatable, :class => ('hide' if untemplatable), :no_label => untemplatable %>
22
22
  <%= counter_f f, :vmid, :label => _('VM ID'), :label_size => "col-md-2", :required => true, :disabled => (!new_vm || from_profile) %>
23
- <%= select_f f, :node, compute_resource.nodes, :node, :node, { }, :label => _('Node'), :label_size => "col-md-2", :required => true, :disabled => true %>
23
+ <%= select_f f, :node_id, compute_resource.nodes, :node, :node, { }, :label => _('Node'), :label_size => "col-md-2", :required => true, :disabled => true %>
24
24
  <% unless local_assigns[:hide_image] && !new_vm %>
25
25
  <%
26
26
  arch ||= nil ; os ||= nil
@@ -15,7 +15,6 @@ GNU General Public License for more details.
15
15
  You should have received a copy of the GNU General Public License
16
16
  along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
17
17
 
18
-
19
18
  <% server = type == 'qemu' %>
20
19
 
21
20
  <%= field_set_tag _("Nic"), :id => "server_network", :style => ('display: none;' unless server), :disabled => !server do %>
@@ -24,7 +24,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
24
24
 
25
25
  <%= prop :name %>
26
26
  <%= prop :type %>
27
- <%= prop :node %>
27
+ <%= prop :node_id %>
28
28
  <%= prop :templated? %>
29
29
  <%= prop :mac %>
30
30
  <%= prop :memory %>
@@ -16,6 +16,6 @@ You should have received a copy of the GNU General Public License
16
16
  along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
17
17
 
18
18
  <% data = ForemanFogProxmox::NodeDashboard::Data.new() %>
19
- <% node = data.node.to_s rescue nil %>
20
- <h4 class="header ca"><%= N_("Proxmox Node Statistics: %s") % node %></h4>
19
+ <% node_id = data.node_id rescue nil %>
20
+ <h4 class="header ca"><%= N_("Proxmox Node Statistics: %s") % node_id %></h4>
21
21
  <%= render_node_statistics(data.statistics, :class => 'statistics-bar') rescue nil %>
@@ -38,7 +38,7 @@ module ForemanFogProxmox
38
38
 
39
39
  initializer 'foreman_fog_proxmox.register_plugin', :before => :finisher_hook do |_app|
40
40
  Foreman::Plugin.register :foreman_fog_proxmox do
41
- requires_foreman '>= 1.17.3'
41
+ requires_foreman '>= 1.21.0'
42
42
  # Register Proxmox VE compute resource in foreman
43
43
  compute_resource ForemanFogProxmox::Proxmox
44
44
  parameter_filter(ComputeResource, :uuid)
@@ -81,18 +81,16 @@ module ForemanFogProxmox
81
81
  config.to_prepare do
82
82
  require 'fog/compute/proxmox/models/server'
83
83
  require 'fog/compute/proxmox/models/server_config'
84
- require 'fog/compute/proxmox/models/container'
85
- require 'fog/compute/proxmox/models/container_config'
86
84
  require 'fog/compute/proxmox/models/disk'
87
85
  require 'fog/compute/proxmox/models/volume'
86
+ require 'fog/compute/proxmox/models/node'
88
87
 
89
88
  Fog::Compute::Proxmox::Server.send :include, FogExtensions::Proxmox::Server
90
89
  Fog::Compute::Proxmox::ServerConfig.send :include, FogExtensions::Proxmox::ServerConfig
91
- Fog::Compute::Proxmox::Container.send :include, FogExtensions::Proxmox::Container
92
- Fog::Compute::Proxmox::ContainerConfig.send :include, FogExtensions::Proxmox::ContainerConfig
93
90
  Fog::Compute::Proxmox::Disk.send :include, FogExtensions::Proxmox::Disk
94
91
  Fog::Compute::Proxmox::Volume.send :include, FogExtensions::Proxmox::Volume
95
92
  ::ComputeResourcesController.send :include, ForemanFogProxmox::Controller::Parameters::ComputeResource
93
+ Fog::Compute::Proxmox::Node.send :include, FogExtensions::Proxmox::Node
96
94
  end
97
95
 
98
96
  end
@@ -18,5 +18,5 @@
18
18
  # along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
20
  module ForemanFogProxmox
21
- VERSION = '0.5.6'.freeze
21
+ VERSION = '0.6.0'.freeze
22
22
  end
@@ -29,7 +29,7 @@ FactoryBot.define do
29
29
  user 'root@pam'
30
30
  password 'proxmox01'
31
31
  url 'https://192.168.56.101:8006/api2/json'
32
- node_name 'pve'
32
+ node_id 'pve'
33
33
  end
34
34
 
35
35
  factory :proxmox_cr, :class => ForemanFogProxmox::Proxmox, :traits => [:proxmox]
@@ -41,7 +41,10 @@ FactoryBot.define do
41
41
  trait :pve do
42
42
  identity 'pve'
43
43
  end
44
- factory :pve_node, :class => Fog::Compute::Proxmox::Node, :traits => [:pve]
44
+ trait :service do
45
+ service :proxmox_cr
46
+ end
47
+ factory :pve_node, :class => Fog::Compute::Proxmox::Node, :traits => [:pve, :service]
45
48
  end
46
49
 
47
50
  def deferred_nic_attrs
@@ -68,6 +71,10 @@ FactoryBot.define do
68
71
  factory :host_empty, :class => Host do
69
72
  sequence(:name) { |n| "host#{n}" }
70
73
  sequence(:hostname) { |n| "host#{n}" }
74
+ trait :compute_attributes do
75
+ { 'type' => 'qemu' }
76
+ end
77
+ compute_attributes { { 'type' => 'qemu' } }
71
78
  end
72
79
 
73
80
  end
@@ -22,6 +22,7 @@ require 'test_plugin_helper'
22
22
  module ForemanFogProxmox
23
23
  class ProxmoxContainerHelperTest < ActiveSupport::TestCase
24
24
  include ProxmoxContainerHelper
25
+ include ProxmoxVmHelper
25
26
 
26
27
  describe 'parse' do
27
28
 
@@ -32,7 +33,7 @@ class ProxmoxContainerHelperTest < ActiveSupport::TestCase
32
33
  { 'vmid' => '100',
33
34
  'name' => 'test',
34
35
  'type' => 'lxc',
35
- 'node' => 'pve',
36
+ 'node_id' => 'pve',
36
37
  'ostemplate_storage' => 'local',
37
38
  'ostemplate_file' => 'local:vztmpl/alpine-3.7-default_20171211_amd64.tar.xz',
38
39
  'password' => 'proxmox01',
@@ -68,8 +69,8 @@ class ProxmoxContainerHelperTest < ActiveSupport::TestCase
68
69
  'name' => 'test',
69
70
  'type' => 'lxc',
70
71
  :type => 'lxc',
71
- 'node' => 'pve',
72
- :node => {name: 'pve'},
72
+ 'node_id' => 'pve',
73
+ :node_id => 'pve',
73
74
  :memory => 536870912,
74
75
  'templated' => 0,
75
76
  :onboot => 0,
@@ -92,6 +93,7 @@ class ProxmoxContainerHelperTest < ActiveSupport::TestCase
92
93
  { 'vmid' => '100',
93
94
  'name' => 'test',
94
95
  'type' => 'lxc',
96
+ 'node_id' => 'pve',
95
97
  'volumes_attributes' => { '0' => { '_delete' => '1', 'device' => '0', 'storage' => 'local-lvm', 'size' => '1073741824' }},
96
98
  'interfaces_attributes' => { '0' => { '_delete' => '1', 'id' => 'net0', 'name' => 'eth0' } }
97
99
  }
@@ -151,8 +153,6 @@ class ProxmoxContainerHelperTest < ActiveSupport::TestCase
151
153
  :net1 => 'name=eth1,bridge=vmbr0,ip=dhcp,ip6=dhcp',
152
154
  :rootfs => 'local-lvm:1073741824',
153
155
  :mp0 => 'local-lvm:1073741824' )
154
- assert_equal expected_vm.length, vm.length
155
- assert_equal expected_vm.keys, vm.keys
156
156
  assert_equal expected_vm, vm
157
157
  end
158
158
 
@@ -22,6 +22,7 @@ require 'test_plugin_helper'
22
22
  module ForemanFogProxmox
23
23
  class ProxmoxServerHelperTest < ActiveSupport::TestCase
24
24
  include ProxmoxServerHelper
25
+ include ProxmoxVmHelper
25
26
 
26
27
  describe 'parse' do
27
28
 
@@ -31,7 +32,7 @@ class ProxmoxServerHelperTest < ActiveSupport::TestCase
31
32
  let(:host) do
32
33
  { 'vmid' => '100',
33
34
  'name' => 'test',
34
- 'node' => 'pve',
35
+ 'node_id' => 'pve',
35
36
  'type' => 'qemu',
36
37
  'config_attributes' => {
37
38
  'memory' => '536870912',
@@ -20,23 +20,27 @@
20
20
  require 'test_plugin_helper'
21
21
  require 'fog/compute/proxmox/models/server'
22
22
  require 'fog/compute/proxmox/models/server_config'
23
- require 'fog/compute/proxmox/models/container'
24
- require 'fog/compute/proxmox/models/container_config'
25
23
  require 'fog/compute/proxmox/models/interface'
26
24
  require 'fog/compute/proxmox/models/interfaces'
27
25
  require 'fog/compute/proxmox/models/disk'
28
26
  require 'fog/compute/proxmox/models/disks'
27
+ require 'fog/compute/proxmox/models/snapshots'
28
+ require 'fog/compute/proxmox/models/tasks'
29
29
 
30
30
  module ForemanFogProxmox
31
31
  class ProxmoxVmHelperTest < ActiveSupport::TestCase
32
32
  include ProxmoxVmHelper
33
33
 
34
34
  let(:container) do
35
- Fog::Compute::Proxmox::Container.new(
35
+ service = mock('service')
36
+ service.stubs(:get_server_config).returns(nil)
37
+ service.stubs(:list_tasks).returns([])
38
+ Fog::Compute::Proxmox::Server.new(
36
39
  { 'vmid' => '100',
37
40
  'hostname' => 'test',
38
- 'type' => 'lxc',
39
- 'node' => 'pve',
41
+ :type => 'lxc',
42
+ :node_id => 'pve',
43
+ :service => service,
40
44
  'templated' => '0',
41
45
  'memory' => '536870912',
42
46
  'swap' => '',
@@ -51,11 +55,15 @@ class ProxmoxVmHelperTest < ActiveSupport::TestCase
51
55
  end
52
56
 
53
57
  let(:server) do
58
+ service = mock('service')
59
+ service.stubs(:get_server_config).returns(nil)
60
+ service.stubs(:list_tasks).returns([])
54
61
  Fog::Compute::Proxmox::Server.new(
55
62
  { 'vmid' => '100',
56
63
  'name' => 'test',
57
- 'node' => 'pve',
58
- 'type' => 'qemu',
64
+ :node_id => 'pve',
65
+ :service => service,
66
+ :type => 'qemu',
59
67
  'templated' => '0',
60
68
  'ide2' => 'local-lvm:iso/debian-netinst.iso,media=cdrom',
61
69
  'memory' => '536870912',
@@ -76,7 +84,7 @@ class ProxmoxVmHelperTest < ActiveSupport::TestCase
76
84
  let(:host_server) do
77
85
  { 'vmid' => '100',
78
86
  'name' => 'test',
79
- 'node' => 'pve',
87
+ 'node_id' => 'pve',
80
88
  'type' => 'qemu',
81
89
  'config_attributes' => {
82
90
  'memory' => '536870912',
@@ -103,7 +111,7 @@ class ProxmoxVmHelperTest < ActiveSupport::TestCase
103
111
  { 'vmid' => '100',
104
112
  'name' => 'test',
105
113
  'type' => 'lxc',
106
- 'node' => 'pve',
114
+ 'node_id' => 'pve',
107
115
  'ostemplate_storage' => 'local',
108
116
  'ostemplate_file' => 'local:vztmpl/alpine-3.7-default_20171211_amd64.tar.xz',
109
117
  'password' => 'proxmox01',
@@ -138,30 +146,30 @@ class ProxmoxVmHelperTest < ActiveSupport::TestCase
138
146
  setup { Fog.mock! }
139
147
  teardown { Fog.unmock! }
140
148
 
141
- it '#server qemu' do
149
+ it '#server qemu' do
142
150
  config_hash = object_to_config_hash(server,'qemu')
143
- expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(server.config.attributes).reject { |key,_value| %w[templated node type ide2 scsi0 net0 net1].include? key }
151
+ expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(server.config.attributes).reject { |key,_value| %w[templated ide2 scsi0 net0 net1].include? key }
144
152
  assert_equal expected_config_hash, config_hash['config_attributes']
145
153
  end
146
154
 
147
155
  it '#server lxc' do
148
156
  config_hash = object_to_config_hash(server,'lxc')
149
157
  assert config_hash.has_key?('config_attributes')
150
- expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(server.config.attributes).reject { |key,_value| %w[templated node type ide2 scsi0 net0 net1].include? key }
158
+ expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(server.config.attributes).reject { |key,_value| %w[templated ide2 scsi0 net0 net1].include? key }
151
159
  assert_equal expected_config_hash, config_hash['config_attributes']
152
160
  end
153
161
 
154
162
  it '#container qemu' do
155
163
  config_hash = object_to_config_hash(container,'qemu')
156
164
  assert config_hash.has_key?('config_attributes')
157
- expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(container.config.attributes).reject { |key,_value| %w[templated node type rootfs mp0 net0 net1].include? key }
165
+ expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(container.config.attributes).reject { |key,_value| %w[templated rootfs mp0 net0 net1].include? key }
158
166
  assert_equal expected_config_hash, config_hash['config_attributes']
159
167
  end
160
168
 
161
169
  it '#container lxc' do
162
170
  config_hash = object_to_config_hash(container,'lxc')
163
171
  assert config_hash.has_key?('config_attributes')
164
- expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(container.config.attributes).reject { |key,_value| %w[templated node type rootfs mp0 net0 net1].include? key }
172
+ expected_config_hash = ActiveSupport::HashWithIndifferentAccess.new(container.config.attributes).reject { |key,_value| %w[templated rootfs mp0 net0 net1].include? key }
165
173
  assert_equal expected_config_hash, config_hash['config_attributes']
166
174
  end
167
175
  end
@@ -30,7 +30,7 @@ module ForemanFogProxmox
30
30
  should validate_presence_of(:url)
31
31
  should validate_presence_of(:user)
32
32
  should validate_presence_of(:password)
33
- should validate_presence_of(:node_name)
33
+ should validate_presence_of(:node_id)
34
34
  should allow_value('root@pam').for(:user)
35
35
  should_not allow_value('root').for(:user)
36
36
  should_not allow_value('a').for(:url)
@@ -60,18 +60,16 @@ module ForemanFogProxmox
60
60
  end
61
61
 
62
62
  describe "find_vm_by_uuid" do
63
- it "raises Foreman::Exception when the uuid does not match" do
64
- cr = mock_node_servers(ForemanFogProxmox::Proxmox.new, empty_servers)
65
- assert_raises Foreman::Exception do
66
- cr.find_vm_by_uuid('100')
67
- end
63
+ it "returns nil when the uuid does not match" do
64
+ cr = mock_node_servers_containers(ForemanFogProxmox::Proxmox.new, empty_servers, empty_servers)
65
+ assert cr.find_vm_by_uuid('100').nil?
68
66
  end
69
67
 
70
- it "raises RecordNotFound when the compute raises retrieve error" do
71
- exception = Fog::Proxmox::Errors::ServiceError.new(StandardError.new('VM not found'))
68
+ it "raises RecordNotFound when the compute raises error" do
69
+ exception = Fog::Errors::Error.new
72
70
  cr = mock_node_servers(ForemanFogProxmox::Proxmox.new, servers_raising_exception(exception))
73
71
  assert_raises ActiveRecord::RecordNotFound do
74
- cr.find_vm_by_uuid('qemu_100')
72
+ cr.find_vm_by_uuid('100')
75
73
  end
76
74
  end
77
75
  end
@@ -80,16 +78,7 @@ module ForemanFogProxmox
80
78
  before do
81
79
  @cr = FactoryBot.build_stubbed(:proxmox_cr)
82
80
  end
83
-
84
- it "raises Foreman::Exception when physical identifier is empty" do
85
- physical_nic = FactoryBot.build(:nic_base_empty)
86
- host = FactoryBot.build(:host_empty, :interfaces => [physical_nic])
87
- err = assert_raises Foreman::Exception do
88
- @cr.host_interfaces_attrs(host)
89
- end
90
- assert err.message.end_with?('Identifier interface[0] required.')
91
- end
92
-
81
+
93
82
  it "raises Foreman::Exception when physical identifier does not match net[k] with k integer" do
94
83
  physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'eth0')
95
84
  host = FactoryBot.build(:host_empty, :interfaces => [physical_nic])
@@ -103,7 +92,7 @@ module ForemanFogProxmox
103
92
  ip = IPAddr.new(1, Socket::AF_INET).to_s
104
93
  ip6 = Array.new(4) { '%x' % rand(16**4) }.join(':') + '::1'
105
94
  physical_nic = FactoryBot.build(:nic_base_empty, :identifier => 'net0', :ip => ip, :ip6 => ip6)
106
- host = FactoryBot.build(:host_empty, :interfaces => [physical_nic])
95
+ host = FactoryBot.build(:host_empty, :interfaces => [physical_nic], :compute_attributes => {'type' => 'qemu'})
107
96
  nic_attributes = @cr.host_interfaces_attrs(host).values.select(&:present?)
108
97
  nic_attr = nic_attributes.first
109
98
  assert_equal 'net0', nic_attr[:id]
@@ -141,12 +130,12 @@ module ForemanFogProxmox
141
130
  @cr = FactoryBot.build_stubbed(:proxmox_cr)
142
131
  end
143
132
 
144
- it "converts to hash a server" do
133
+ it "converts a server to hash" do
145
134
  vm, config_attributes, volume_attributes, interface_attributes = mock_server_vm
146
135
  vm_attrs = @cr.vm_compute_attributes(vm)
147
136
  assert !vm_attrs.has_key?(:config)
148
137
  assert vm_attrs.has_key?(:config_attributes)
149
- assert_equal config_attributes.reject { |key,value| [:disks,:interfaces].include?(key) || value.to_s.empty?}, vm_attrs[:config_attributes]
138
+ assert_equal config_attributes.reject { |key,value| [:vmid,:disks,:interfaces].include?(key) || value.to_s.empty?}, vm_attrs[:config_attributes]
150
139
  assert !vm_attrs[:config_attributes].has_key?(:disks)
151
140
  assert vm_attrs.has_key?(:volumes_attributes)
152
141
  assert_equal volume_attributes, vm_attrs[:volumes_attributes]['0']
@@ -155,13 +144,13 @@ module ForemanFogProxmox
155
144
  assert_equal interface_attributes, vm_attrs[:interfaces_attributes]['0']
156
145
  end
157
146
 
158
- it "converts to hash a container" do
147
+ it "converts a container to hash" do
159
148
  vm, config_attributes, volume_attributes, interface_attributes = mock_container_vm
160
149
  vm_attrs = @cr.vm_compute_attributes(vm)
161
150
  assert !vm_attrs.has_key?(:config)
162
151
  assert vm_attrs.has_key?(:config_attributes)
163
- assert_equal config_attributes.reject { |key,value| [:mount_points,:interfaces].include?(key) || value.to_s.empty?}, vm_attrs[:config_attributes]
164
- assert !vm_attrs[:config_attributes].has_key?(:mount_points)
152
+ assert_equal config_attributes.reject { |key,value| [:vmid,:disks,:interfaces].include?(key) || value.to_s.empty?}, vm_attrs[:config_attributes]
153
+ assert !vm_attrs[:config_attributes].has_key?(:disks)
165
154
  assert vm_attrs.has_key?(:volumes_attributes)
166
155
  assert_equal volume_attributes, vm_attrs[:volumes_attributes]['0']
167
156
  assert vm_attrs.has_key?(:interfaces_attributes)
@@ -176,12 +165,13 @@ module ForemanFogProxmox
176
165
  end
177
166
 
178
167
  it 'saves modified server config' do
179
- uuid = 'qemu_100'
168
+ uuid = '100'
180
169
  config = mock('config')
181
170
  config.stubs(:attributes).returns({ :cores => '' })
182
171
  vm = mock('vm')
183
172
  vm.stubs(:config).returns(config)
184
173
  vm.stubs(:container?).returns(false)
174
+ vm.stubs(:type).returns('qemu')
185
175
  @cr.stubs(:find_vm_by_uuid).returns(vm)
186
176
  attr = { 'templated' => '0', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1' } }
187
177
  @cr.stubs(:parse_server_vm).returns({ 'vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1' })
@@ -191,12 +181,13 @@ module ForemanFogProxmox
191
181
  end
192
182
 
193
183
  it 'saves modified container config' do
194
- uuid = 'lxc_100'
184
+ uuid = '100'
195
185
  config = mock('config')
196
186
  config.stubs(:attributes).returns({ :cores => '' })
197
187
  vm = mock('vm')
198
188
  vm.stubs(:config).returns(config)
199
189
  vm.stubs(:container?).returns(true)
190
+ vm.stubs(:type).returns('lxc')
200
191
  @cr.stubs(:find_vm_by_uuid).returns(vm)
201
192
  attr = { 'templated' => '0', 'config_attributes' => { 'cores' => '1', 'cpulimit' => '1' } }
202
193
  @cr.stubs(:parse_container_vm).returns({ 'vmid' => '100', 'type' => 'qemu', 'cores' => '1', 'cpulimit' => '1' })
@@ -228,7 +219,7 @@ module ForemanFogProxmox
228
219
  cr.stubs(:parse_server_vm).with(args).returns(args)
229
220
  servers.stubs(:create).with(args)
230
221
  vm = mock('vm')
231
- cr.stubs(:find_vm_by_uuid).with("#{args[:type]}_#{args[:vmid]}").returns(vm)
222
+ cr.stubs(:find_vm_by_uuid).with("#{args[:vmid]}").returns(vm)
232
223
  cr.create_vm(args)
233
224
  end
234
225
 
@@ -242,7 +233,7 @@ module ForemanFogProxmox
242
233
  cr.stubs(:convert_sizes).with(args)
243
234
  cr.stubs(:parse_container_vm).with(args).returns(args)
244
235
  vm = mock('vm')
245
- cr.stubs(:find_vm_by_uuid).with("#{args[:type]}_#{args[:vmid]}").returns(vm)
236
+ cr.stubs(:find_vm_by_uuid).with("#{args[:vmid]}").returns(vm)
246
237
  cr.create_vm(args)
247
238
  end
248
239
 
@@ -261,7 +252,7 @@ module ForemanFogProxmox
261
252
  servers.stubs(:get).with('999').returns(image)
262
253
  clone.stubs(:update).with(name: 'name')
263
254
  vm = mock('vm')
264
- cr.stubs(:find_vm_by_uuid).with("#{args[:type]}_#{args[:vmid]}").returns(vm)
255
+ cr.stubs(:find_vm_by_uuid).with("#{args[:vmid]}").returns(vm)
265
256
  cr.create_vm(args)
266
257
  end
267
258
 
@@ -281,7 +272,7 @@ module ForemanFogProxmox
281
272
  cr.stubs(:convert_sizes).with(args)
282
273
  cr.stubs(:parse_container_vm).with(args).returns(args)
283
274
  vm = mock('vm')
284
- cr.stubs(:find_vm_by_uuid).with("#{args[:type]}_#{args[:vmid]}").returns(vm)
275
+ cr.stubs(:find_vm_by_uuid).with("#{args[:vmid]}").returns(vm)
285
276
  cr.create_vm(args)
286
277
  end
287
278
  end