foreman_fog_proxmox 0.12.2 → 0.13.3

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -5
  3. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_compute_resource.js +36 -2
  4. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm.js +134 -60
  5. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_server.js +2 -50
  6. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume.js +39 -0
  7. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cdrom.js +63 -0
  8. data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cloudinit.js +25 -0
  9. data/app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb +1 -1
  10. data/app/controllers/foreman_fog_proxmox/compute_resources_controller.rb +23 -25
  11. data/app/helpers/proxmox_compute_controllers_helper.rb +39 -0
  12. data/app/helpers/proxmox_compute_resources_helper.rb +49 -0
  13. data/app/helpers/proxmox_compute_selectors_helper.rb +6 -44
  14. data/app/helpers/proxmox_form_helper.rb +12 -4
  15. data/app/{models/concerns/fog_extensions/proxmox/volume.rb → helpers/proxmox_storages_helper.rb} +5 -8
  16. data/app/helpers/proxmox_vm_cdrom_helper.rb +35 -0
  17. data/app/helpers/proxmox_vm_cloudinit_helper.rb +43 -0
  18. data/app/helpers/proxmox_vm_config_helper.rb +160 -0
  19. data/app/helpers/proxmox_vm_helper.rb +24 -62
  20. data/app/helpers/proxmox_vm_interfaces_helper.rb +85 -0
  21. data/app/helpers/proxmox_vm_os_template_helper.rb +47 -0
  22. data/app/{models/foreman_fog_proxmox/proxmox_token_expiration.rb → helpers/proxmox_vm_uuid_helper.rb} +14 -10
  23. data/app/helpers/proxmox_vm_volumes_helper.rb +105 -0
  24. data/app/models/concerns/fog_extensions/proxmox/disk.rb +17 -2
  25. data/app/models/concerns/fog_extensions/proxmox/interface.rb +19 -4
  26. data/app/models/concerns/fog_extensions/proxmox/server.rb +12 -3
  27. data/app/models/concerns/fog_extensions/proxmox/server_config.rb +8 -30
  28. data/app/models/concerns/host_ext/proxmox/interfaces.rb +7 -2
  29. data/app/models/concerns/orchestration/proxmox/compute.rb +49 -0
  30. data/app/models/foreman_fog_proxmox/proxmox.rb +58 -15
  31. data/app/models/foreman_fog_proxmox/proxmox_compute_attributes.rb +14 -18
  32. data/app/models/foreman_fog_proxmox/proxmox_connection.rb +14 -9
  33. data/app/models/foreman_fog_proxmox/proxmox_images.rb +2 -1
  34. data/app/models/foreman_fog_proxmox/proxmox_interfaces.rb +53 -28
  35. data/app/models/foreman_fog_proxmox/proxmox_operating_systems.rb +1 -1
  36. data/app/models/foreman_fog_proxmox/proxmox_version.rb +7 -2
  37. data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +19 -31
  38. data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +108 -94
  39. data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +9 -6
  40. data/app/models/foreman_fog_proxmox/proxmox_volumes.rb +79 -22
  41. data/app/services/foreman_fog_proxmox/node_dashboard/data.rb +6 -2
  42. data/app/views/api/v2/compute_resources/proxmox.json.rabl +1 -1
  43. data/app/views/compute_resources/form/_proxmox.html.erb +23 -10
  44. data/app/views/compute_resources/show/_proxmox.html.erb +6 -6
  45. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_nic_provider_specific_form.html.erb +3 -1
  46. data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_volumes_edit.html.erb +46 -29
  47. data/app/views/compute_resources_vms/form/proxmox/_base.html.erb +3 -3
  48. data/app/views/compute_resources_vms/form/proxmox/_removable_layout.html.erb +2 -1
  49. data/app/views/compute_resources_vms/form/proxmox/container/_network.html.erb +8 -7
  50. data/app/views/compute_resources_vms/form/proxmox/server/_advanced.html.erb +0 -2
  51. data/app/views/compute_resources_vms/form/proxmox/server/_config.html.erb +15 -14
  52. data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +2 -2
  53. data/app/views/compute_resources_vms/form/proxmox/server/_volume_cdrom.html.erb +34 -0
  54. data/app/views/compute_resources_vms/form/proxmox/server/_volume_cloud_init.html.erb +29 -0
  55. data/app/views/compute_resources_vms/form/proxmox/server/{_volume.html.erb → _volume_hard_disk.html.erb} +7 -3
  56. data/app/views/compute_resources_vms/show/_proxmox.html.erb +2 -0
  57. data/config/routes.rb +7 -7
  58. data/db/migrate/20210312105013_update_proxmox_uuid_host.rb +29 -0
  59. data/lib/foreman_fog_proxmox/engine.rb +15 -10
  60. data/lib/foreman_fog_proxmox/hash_collection.rb +69 -0
  61. data/lib/foreman_fog_proxmox/version.rb +1 -1
  62. data/lib/tasks/foreman_fog_proxmox_tasks.rake +0 -3
  63. data/test/factories/foreman_fog_proxmox/proxmox_container_mock_factory.rb +20 -8
  64. data/test/factories/foreman_fog_proxmox/proxmox_node_mock_factory.rb +5 -5
  65. data/test/factories/foreman_fog_proxmox/proxmox_server_mock_factory.rb +17 -7
  66. data/test/factories/proxmox_factory.rb +4 -4
  67. data/test/functional/compute_resources_controller_test.rb +4 -4
  68. data/test/unit/foreman_fog_proxmox/helpers/proxmox_container_helper_test.rb +53 -32
  69. data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +56 -31
  70. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_helper_test.rb +22 -20
  71. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_uuid_helper_test.rb +38 -0
  72. data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_volumes_helper_test.rb +50 -0
  73. data/test/unit/foreman_fog_proxmox/proxmox_compute_attributes_test.rb +10 -11
  74. data/test/unit/foreman_fog_proxmox/proxmox_interfaces_test.rb +38 -10
  75. data/test/unit/foreman_fog_proxmox/proxmox_version_test.rb +10 -10
  76. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_container_test.rb +34 -24
  77. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_create_test.rb +8 -8
  78. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cdrom_test.rb +181 -0
  79. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cloudinit_test.rb +131 -0
  80. data/test/unit/foreman_fog_proxmox/{proxmox_vm_commands_server_update_volumes_test.rb → proxmox_vm_commands_server_update_hard_disk_test.rb} +45 -19
  81. data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_test.rb +21 -21
  82. data/test/unit/foreman_fog_proxmox/proxmox_vm_new_test.rb +3 -3
  83. data/test/unit/foreman_fog_proxmox/proxmox_vm_queries_test.rb +3 -3
  84. metadata +44 -23
  85. data/app/helpers/proxmox_container_helper.rb +0 -163
  86. data/app/helpers/proxmox_server_helper.rb +0 -155
@@ -18,19 +18,19 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
18
18
  <%= javascript_include_tag 'foreman_fog_proxmox/proxmox_vm_server', "data-turbolinks-track" => true %>
19
19
 
20
20
  <% server = type == 'qemu' %>
21
+ <% logger.debug("_config.html.erb server_config=#{f.object.inspect}") %>
21
22
 
22
23
  <%= field_set_tag n_("Main option", "Main options", 2), :id => "server_config_options", :class => 'hide', :disabled => !server do %>
23
24
  <%= textarea_f f, :description, :label => _('Description'), :label_size => "col-md-2" %>
24
- <%= text_f f, :boot, :label => _('Boot device order'), :label_size => "col-md-2", :label_help => _('Floppy disk (a), hard disk (c), cdrom (d), network (n). Default cdn') %>
25
+ <%= text_f f, :boot, :label => _('Boot device order'), :label_size => "col-md-2", :label_help => _('Order your devices, e.g. order=net0;ide2;scsi0. Default empty (any)') %>
25
26
  <%= checkbox_f f, :onboot, :label => _('Start at boot') %>
26
27
  <%= checkbox_f f, :agent, :label => _('Qemu Agent') %>
27
28
  <%= checkbox_f f, :kvm, :label => _('KVM'), :label_help => _('Enable/disable KVM hardware virtualization') %>
28
- <%= select_f f, :keyboard, proxmox_keyboards_map, :id, :name, { }, :label => _('Keyboard'), :label_size => "col-md-2" %>
29
29
  <%= select_f f, :vga, proxmox_vgas_map, :id, :name, { :include_blank => true }, :label => _('VGA'), :label_size => "col-md-2" %>
30
30
  <%= select_f f, :scsihw, proxmox_scsi_controllers_map, :id, :name, { }, :label => _('SCSI Controller'), :label_size => "col-md-2" %>
31
31
  <%= select_f f, :bios, proxmox_bios_map, :id, :name, { }, :label => _('BIOS'), :label_size => "col-md-2" %>
32
32
  <% end %>
33
- <%= field_set_tag _("CPU"), :id => "server_config_cpu", :class => 'hide', :disabled => !server do %>
33
+ <%= field_set_tag _("CPUs"), :id => "server_config_cpu", :class => 'hide', :disabled => !server do %>
34
34
  <%= select_f f, :cpu_type, proxmox_cpus_map, :id, :name, { }, :label => _('Type'), :label_size => "col-md-2" %>
35
35
  <%= counter_f f, :sockets, :class => "input-mini", :label => _('Sockets'), :label_size => "col-md-2" %>
36
36
  <%= counter_f f, :cores, :class => "input-mini", :label => _('Cores'), :label_size => "col-md-2" %>
@@ -38,23 +38,24 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
38
38
  <%= counter_f f, :cpulimit, :class => "input-mini", :label => _('CPU limit'), :label_size => "col-md-2" %>
39
39
  <%= counter_f f, :cpuunits, :class => "input-mini", :label => _('CPU units'), :label_size => "col-md-2" %>
40
40
  <%= checkbox_f f, :numa, :label => _('Enable NUMA') %>
41
- <%= checkbox_f f, :pcid, :label => _('PCID') %>
42
- <%= checkbox_f f, :spectre, :label => _('Spectre-CTRL') %>
41
+ <%= field_set_tag _("CPU Flags"), :id => "server_config_cpu_flags" do %>
42
+ <% Fog::Proxmox::CpuHelper.flags.each do |flag_key, flag_value| %>
43
+ <%= select_f f, flag_key, proxmox_cpu_flags_map, :id, :name, { }, :label => _(flag_value) %>
44
+ <% end %>
45
+ <% end %>
43
46
  <% end %>
44
47
  <%= field_set_tag _("Memory"), :id => "server_config_memory", :class => 'hide', :disabled => !server do %>
45
48
  <%= byte_size_f f, :memory, :class => "input-mini", :label => _('Memory'), :label_size => "col-md-2" %>
46
49
  <%= byte_size_f f, :balloon, :class => "input-mini", :label => _('Minimum memory'), :label_size => "col-md-2" %>
47
50
  <%= counter_f f, :shares, :class => "input-mini", :label => _('Shares'), :label_size => "col-md-2" %>
48
51
  <% end %>
49
- <%= field_set_tag _("CD-ROM"), :id => "server_config_cdrom", :class => 'hide', :disabled => !server do %>
50
- <%= radio_button_f f, :cdrom, :value => 'none', :text => _('None'), :onclick => 'cdromSelected(this)' %>
51
- <%= radio_button_f f, :cdrom, :value => 'cdrom' , :text => _('Physical'), :onclick => 'cdromSelected(this)' %>
52
- <%= radio_button_f f, :cdrom, :value => 'image' , :text => _('Image'), :onclick => 'cdromSelected(this)' %>
53
- <div id='cdrom_image_form' class='<%= 'hide' if %[none cdrom].include? f.object.cdrom %>'>
54
- <%= select_f f, :cdrom_storage, compute_resource.storages(node_id,'iso'), :storage, :storage, { :include_blank => true }, :label => _('Storage'), :label_size => "col-md-2", :onchange => 'storageIsoSelected(this)' %>
55
- <%= select_f f, :cdrom_iso, compute_resource.images_by_storage(f.object.cdrom_storage, 'iso'), :volid, :volid, { :include_blank => true }, :label => _('Image ISO'), :label_size => "col-md-2" %>
56
- </div>
57
- <% end %>
58
52
  <%= field_set_tag _("Operating System"), :id => "server_config_os", :class => 'hide', :disabled => !server do %>
59
53
  <%= select_f f, :ostype, proxmox_operating_systems_map, :id, :name, { :include_blank => true }, :label => _('OS type'), :label_size => "col-md-2" %>
54
+ <% end %>
55
+ <%= field_set_tag _("Cloud-init"), :id => "server_config_cloud_init", :class => ('hide' unless cloudinit), :disabled => (!cloudinit) do %>
56
+ <%= text_f f, :ciuser, :label => _('User'), :label_size => "col-md-2" %>
57
+ <%= text_f f, :cipassword, :label => _('Password'), :label_size => "col-md-2" %>
58
+ <%= text_f f, :searchdomain, :label => _('DNS domain'), :label_size => "col-md-2" %>
59
+ <%= text_f f, :nameserver, :label => _('DNS servers'), :label_size => "col-md-2" %>
60
+ <%= textarea_f f, :sshkeys, :label => _("SSH public key"), :size => "col-md-4" %>
60
61
  <% end %>
@@ -25,6 +25,6 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
25
25
  <%= counter_f f, :tag, :class => "input-mini", :label => _('VLAN tag'), :label_size => "col-md-2" %>
26
26
  <%= counter_f f, :rate, :class => "input-mini", :label => _('Rate limit'), :label_size => "col-md-2" %>
27
27
  <%= counter_f f, :queues, :class => "input-mini", :label => _('Multiqueue'), :label_size => "col-md-2" %>
28
- <%= checkbox_f f, :firewall, :label => _('Firewall') %>
29
- <%= checkbox_f f, :link_down, :label => _('Disconnect') %>
28
+ <%= checkbox_f f, :firewall, { :label => _('Firewall') }, '1', '0' %>
29
+ <%= checkbox_f f, :link_down, { :label => _('Disconnect') }, '1', '0' %>
30
30
  <% end %>
@@ -0,0 +1,34 @@
1
+ <%# Copyright 2018 Tristan Robert
2
+
3
+ This file is part of ForemanFogProxmox.
4
+
5
+ ForemanFogProxmox is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+
10
+ ForemanFogProxmox is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
17
+
18
+ <%= javascript_include_tag 'foreman_fog_proxmox/proxmox_volume_cdrom', "data-turbolinks-track" => true %>
19
+
20
+ <% cdrom = f.object.cdrom? %>
21
+ <% new_volume = f.object.volid.nil? %>
22
+
23
+ <%= field_set_tag _("CD-ROM"), :id => "server_volume_cdrom_#{f.index}", :class => ('hide' unless cdrom), :disabled => !cdrom do %>
24
+ <%= field_set_tag _("Media"), :id => "cdrom_media_form_#{f.index}" do %>
25
+ <%= f.hidden_field :storage_type %>
26
+ <%= radio_button_f f, :cdrom, :value => 'none', :text => _('None'), :onclick => 'cdromSelected(this)' %>
27
+ <%= radio_button_f f, :cdrom, :value => 'cdrom' , :text => _('Physical'), :onclick => 'cdromSelected(this)' %>
28
+ <%= radio_button_f f, :cdrom, :value => 'image' , :text => _('Image'), :onclick => 'cdromSelected(this)' %>
29
+ <% end %>
30
+ <%= field_set_tag(_("Image"), :id => "cdrom_image_form_#{f.index}", :class => ('hide' unless %[image].include? f.object.cdrom), :disabled => (%[cdrom none].include? f.object.cdrom)) do %>
31
+ <%= select_f f, :storage, compute_resource.storages(node_id,'iso'), :storage, :storage, { :include_blank => true }, :label => _('Storage'), :label_size => "col-md-2", :onchange => 'storageIsoSelected(this)' %>
32
+ <%= select_f f, :volid, compute_resource.images_by_storage(node_id, f.object.storage, 'iso'), :volid, :volid, { :include_blank => true }, :label => _('Image ISO'), :label_size => "col-md-2" %>
33
+ <% end %>
34
+ <% end %>
@@ -0,0 +1,29 @@
1
+ <%# Copyright 2018 Tristan Robert
2
+
3
+ This file is part of ForemanFogProxmox.
4
+
5
+ ForemanFogProxmox is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+
10
+ ForemanFogProxmox is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
17
+
18
+ <%= javascript_include_tag 'foreman_fog_proxmox/proxmox_volume_cloudinit', "data-turbolinks-track" => true %>
19
+
20
+ <% cloud_init = f.object.cloud_init? %>
21
+ <% new_volume = f.object.volid.nil? %>
22
+
23
+ <%= field_set_tag _("Cloud-init"), :id => "server_volume_cloud_init_#{f.index}", :class => ('hide' unless cloud_init), :disabled => !cloud_init do %>
24
+ <%= f.hidden_field :volid if !new_volume %>
25
+ <%= f.hidden_field :storage_type %>
26
+ <%= select_f f, :storage, compute_resource.storages(node_id), :storage, :storage, { :include_blank => true }, :label => _('Storage'), :label_size => "col-md-2", :disabled => !new_volume %>
27
+ <%= select_f f, :controller, proxmox_controllers_cloudinit_map, :id, :name, { :include_blank => true }, :label => _('Controller'), :label_size => "col-md-2", :onchange => 'cloudinitControllerSelected(this)', :disabled => !new_volume %>
28
+ <%= text_f f, :device, :label => _('Device'), :label_size => "col-md-2", :'data-min' => 0, :'data-soft-max' => proxmox_max_device(f.object.controller), :disabled => !new_volume %>
29
+ <% end %>
@@ -15,11 +15,15 @@ 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
- <% server = type == 'qemu' %>
18
+ <% hard_disk = f.object.hard_disk? %>
19
+ <% logger.debug("_volume_hard_disk.html f.object=#{f.object.inspect}") %>
20
+ <% logger.debug("_volume_hard_disk.html f.object.hard_disk?=#{f.object.hard_disk?}") %>
21
+ <% logger.debug("_volume_hard_disk.html f.object.storage_type=#{f.object.storage_type}") %>
19
22
  <% new_volume = f.object.volid.nil? %>
20
23
 
21
- <%= field_set_tag _("Disk"), :id => "server_volume_#{f.index}", :class => ('hide' unless server), :disabled => !server do %>
22
- <%= f.hidden_field :volid if !new_vm %>
24
+ <%= field_set_tag _('Hard disk'), :id => "server_volume_hard_disk_#{f.index}", :class => ('hide' unless hard_disk), :disabled => !hard_disk do %>
25
+ <%= f.hidden_field :volid if !new_volume %>
26
+ <%= f.hidden_field :storage_type %>
23
27
  <%= select_f f, :storage, compute_resource.storages(node_id), :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
24
28
  <%= select_f f, :controller, proxmox_controllers_map, :id, :name, { }, :label => _('Controller'), :label_size => "col-md-2", :disabled => !new_volume, :onchange => 'controllerSelected(this)' %>
25
29
  <%= text_f f, :device, :label => _('Device'), :label_size => "col-md-2", :disabled => !new_volume, :'data-min' => 0, :'data-soft-max' => proxmox_max_device(f.object.controller), :onchange => 'deviceSelected(this)' %>
@@ -30,6 +30,8 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
30
30
  <%= prop :memory %>
31
31
  <% unless @vm.container? %>
32
32
  <%= prop :vga %>
33
+ <%= prop :cloud_init? %>
34
+ <%= prop :cdrom? %>
33
35
  <% end %>
34
36
  <%= prop :cpus %>
35
37
  <%= prop :uptime %>
data/config/routes.rb CHANGED
@@ -19,12 +19,12 @@
19
19
 
20
20
  Rails.application.routes.draw do
21
21
  namespace :foreman_fog_proxmox do
22
- match 'isos/:node_id/:storage', :to => 'compute_resources#isos_by_node_and_storage', :via => 'get'
23
- match 'ostemplates/:node_id/:storage', :to => 'compute_resources#ostemplates_by_node_and_storage', :via => 'get'
24
- match 'isos/:node_id', :to => 'compute_resources#isos_by_node', :via => 'get'
25
- match 'ostemplates/:node_id', :to => 'compute_resources#ostemplates_by_node', :via => 'get'
26
- match 'storages/:node_id', :to => 'compute_resources#storages_by_node', :via => 'get'
27
- match 'isostorages/:node_id', :to => 'compute_resources#iso_storages_by_node', :via => 'get'
28
- match 'bridges/:node_id', :to => 'compute_resources#bridges_by_node', :via => 'get'
22
+ match 'isos/:compute_resource_id/:node_id/:storage', :to => 'compute_resources#isos_by_id_and_node_and_storage', :via => 'get'
23
+ match 'ostemplates/:compute_resource_id/:node_id/:storage', :to => 'compute_resources#ostemplates_by_id_and_node_and_storage', :via => 'get'
24
+ match 'isos/:compute_resource_id/:node_id', :to => 'compute_resources#isos_by_id_and_node', :via => 'get'
25
+ match 'ostemplates/:compute_resource_id/:node_id', :to => 'compute_resources#ostemplates_by_id_and_node', :via => 'get'
26
+ match 'storages/:compute_resource_id/:node_id', :to => 'compute_resources#storages_by_id_and_node', :via => 'get'
27
+ match 'isostorages/:compute_resource_id/:node_id', :to => 'compute_resources#iso_storages_by_id_and_node', :via => 'get'
28
+ match 'bridges/:compute_resource_id/:node_id', :to => 'compute_resources#bridges_by_id_and_node', :via => 'get'
29
29
  end
30
30
  end
@@ -0,0 +1,29 @@
1
+ include ProxmoxVmUuidHelper
2
+ class UpdateProxmoxUuidHost < ActiveRecord::Migration[6.0]
3
+
4
+ def up
5
+ execute(sql(:concat))
6
+ end
7
+
8
+ def down
9
+ execute(sql(:substring))
10
+ end
11
+
12
+ private
13
+
14
+ def concat
15
+ "concat(h.compute_resource_id, '_', h.uuid) "
16
+ end
17
+
18
+ def substring
19
+ "substring(h.uuid, position('_' in h.uuid) + 1, length(h.uuid)) "
20
+ end
21
+
22
+ def sql(func_type)
23
+ sql = 'update hosts h set uuid = '
24
+ sql += send(func_type)
25
+ sql += 'from compute_resources cr '
26
+ sql += "where cr.id = h.compute_resource_id and cr.type = 'ForemanFogProxmox::Proxmox';"
27
+ sql
28
+ end
29
+ end
@@ -45,8 +45,14 @@ module ForemanFogProxmox
45
45
  # add dashboard widget
46
46
  widget 'foreman_fog_proxmox_widget', name: N_('Foreman Fog Proxmox widget'), sizex: 8, sizey: 1
47
47
  security_block :foreman_fog_proxmox do
48
- permission :view_compute_resource, { :"foreman_fog_proxmox/compute_resources" =>
49
- [:ostemplates_by_node_and_storage, :isos_by_node_and_storage, :ostemplates_by_node, :isos_by_node, :storages_by_node, :iso_storages_by_node, :bridges_by_node] }
48
+ permission :view_compute_resource, { :compute_resources =>
49
+ [:ostemplates_by_id_and_node_and_storage,
50
+ :isos_by_id_and_node_and_storage,
51
+ :ostemplates_by_id_and_node,
52
+ :isos_by_id_and_node,
53
+ :storages_by_id_and_node,
54
+ :iso_storages_by_id_and_node,
55
+ :bridges_by_id_and_node] }
50
56
  end
51
57
  end
52
58
  end
@@ -84,18 +90,17 @@ module ForemanFogProxmox
84
90
  end
85
91
 
86
92
  config.to_prepare do
87
- require 'fog/compute/proxmox/models/server'
88
- require 'fog/compute/proxmox/models/server_config'
89
- require 'fog/compute/proxmox/models/disk'
90
- require 'fog/compute/proxmox/models/interface'
91
- require 'fog/compute/proxmox/models/volume'
92
- require 'fog/compute/proxmox/models/node'
93
+ require 'fog/proxmox/compute/models/server'
94
+ require 'fog/proxmox/compute/models/server_config'
95
+ require 'fog/proxmox/compute/models/disk'
96
+ require 'fog/proxmox/compute/models/interface'
97
+ require 'fog/proxmox/compute/models/volume'
98
+ require 'fog/proxmox/compute/models/node'
93
99
 
94
100
  Fog::Proxmox::Compute::Server.include FogExtensions::Proxmox::Server
95
101
  Fog::Proxmox::Compute::ServerConfig.include FogExtensions::Proxmox::ServerConfig
96
- Fog::Proxmox::Compute::Disk.include FogExtensions::Proxmox::Disk
97
102
  Fog::Proxmox::Compute::Interface.include FogExtensions::Proxmox::Interface
98
- Fog::Proxmox::Compute::Volume.include FogExtensions::Proxmox::Volume
103
+ Fog::Proxmox::Compute::Disk.include FogExtensions::Proxmox::Disk
99
104
  ::ComputeResourcesController.include ForemanFogProxmox::Controller::Parameters::ComputeResource
100
105
  Fog::Proxmox::Compute::Node.include FogExtensions::Proxmox::Node
101
106
  ::Host::Managed.include Orchestration::Proxmox::Compute
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Tristan Robert
4
+
5
+ # This file is part of ForemanFogProxmox.
6
+
7
+ # ForemanFogProxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # ForemanFogProxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ require 'foreman_fog_proxmox/value'
21
+
22
+ module ForemanFogProxmox
23
+ module HashCollection
24
+ def self.add_and_format_element(dest, dest_key, origin, origin_key, format = :to_s)
25
+ dest[dest_key] = origin[origin_key].send(format) if origin && origin[origin_key]
26
+ end
27
+
28
+ def self.remove_empty_values(h)
29
+ h.delete_if { |_key, value| ForemanFogProxmox::Value.empty?(value) }
30
+ end
31
+
32
+ def self.remove_keys(h, excluded_keys)
33
+ h.delete_if { |key, _value| excluded_keys.include?(key) }
34
+ end
35
+
36
+ def self.new_hash_reject_keys(h, excluded_keys)
37
+ h.reject { |key, _value| excluded_keys.include?(key) }
38
+ end
39
+
40
+ def self.new_hash_reject_empty_values(h)
41
+ h.reject { |_key, value| ForemanFogProxmox::Value.empty?(value) }
42
+ end
43
+
44
+ def self.new_hash_transform_values(h, transformation)
45
+ h.transform_values { |value| value.send(transformation) }
46
+ end
47
+
48
+ def self.equals?(h1, h2)
49
+ new_h1 = new_hash_transform_values(h1, :to_s)
50
+ new_sorted_h1 = new_h1.sort_by { |key, _value| key }.to_h
51
+ new_h2 = new_hash_transform_values(h2, :to_s)
52
+ new_sorted_h2 = new_h2.sort_by { |key, _value| key }.to_h
53
+ new_sorted_h1.keys == new_sorted_h2.keys && new_sorted_h1.values == new_sorted_h2.values
54
+ end
55
+
56
+ def self.stringify_keys(old_h)
57
+ h = old_h.map do |k, v|
58
+ v_str = if v.instance_of? Hash
59
+ v.stringify_keys
60
+ else
61
+ v
62
+ end
63
+
64
+ [k.to_s, v_str]
65
+ end
66
+ Hash[h]
67
+ end
68
+ end
69
+ 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.12.2'
21
+ VERSION = '0.13.3'
22
22
  end
@@ -32,6 +32,3 @@ namespace :foreman_fog_proxmox do
32
32
  end
33
33
 
34
34
  Rake::Task[:test].enhance ['test:foreman_fog_proxmox']
35
-
36
- load 'tasks/jenkins.rake'
37
- Rake::Task['jenkins:unit'].enhance ['test:foreman_fog_proxmox', 'foreman_fog_proxmox:rubocop'] if Rake::Task.task_defined?(:'jenkins:unit')
@@ -19,14 +19,15 @@
19
19
 
20
20
  module ForemanFogProxmox
21
21
  module ProxmoxContainerMockFactory
22
- def mock_container_vm
23
- interface_attributes = {
24
- id: 'net0',
25
- mac: '36:25:8C:53:0C:50',
22
+ def mock_container_interface_attributes
23
+ compute_attributes = {
26
24
  model: nil,
27
25
  name: 'eth0',
26
+ hwaddr: '36:25:8C:53:0C:50',
28
27
  ip: nil,
29
28
  ip6: nil,
29
+ gw: nil,
30
+ gw6: nil,
30
31
  bridge: 'vmbr0',
31
32
  firewall: nil,
32
33
  link_down: nil,
@@ -34,8 +35,19 @@ module ForemanFogProxmox
34
35
  queues: nil,
35
36
  tag: nil
36
37
  }
38
+ interface_attributes = {
39
+ id: 'net0',
40
+ mac: '36:25:8C:53:0C:50',
41
+ ip: nil,
42
+ ip6: nil,
43
+ compute_attributes: compute_attributes
44
+ }
45
+ interface_attributes
46
+ end
47
+
48
+ def mock_container_vm
37
49
  interface = mock('interface')
38
- interface.stubs(:attributes).returns(interface_attributes)
50
+ interface.stubs(:attributes).returns(mock_container_interface_attributes)
39
51
  interfaces = [interface]
40
52
  volume_attributes = {
41
53
  id: 'rootfs',
@@ -96,13 +108,13 @@ module ForemanFogProxmox
96
108
  vm.stubs(:config).returns(config)
97
109
  vm.stubs(:type).returns('lxc')
98
110
  vm.stubs(:identity).returns(100)
99
- vm.stubs(:node_id).returns('pve')
111
+ vm.stubs(:node_id).returns('proxmox')
100
112
  vm.stubs(:identity).returns(100)
101
113
  service = mock('service')
102
114
  vm_attributes = {
103
115
  vmid: 100,
104
116
  id: 'lxc/100',
105
- node_id: 'pve',
117
+ node_id: 'proxmox',
106
118
  service: service,
107
119
  config: config,
108
120
  name: 'test',
@@ -131,7 +143,7 @@ module ForemanFogProxmox
131
143
  }
132
144
  vm.stubs(:attributes).returns(vm_attributes)
133
145
  vm.stubs(:container?).returns(true)
134
- [vm, config_attributes, volume_attributes, interface_attributes]
146
+ [vm, config_attributes, volume_attributes, mock_container_interface_attributes]
135
147
  end
136
148
  end
137
149
  end
@@ -22,7 +22,7 @@ module ForemanFogProxmox
22
22
  def mock_node_servers(cr, servers)
23
23
  node = mock('node')
24
24
  nodes = mock('nodes')
25
- node.stubs(:node).returns('pve')
25
+ node.stubs(:node).returns('proxmox')
26
26
  node.stubs(:servers).returns(servers)
27
27
  nodes.stubs(:get).returns(node)
28
28
  nodes.stubs(:all).returns([node])
@@ -35,7 +35,7 @@ module ForemanFogProxmox
35
35
  def mock_node_containers(cr, containers)
36
36
  node = mock('node')
37
37
  nodes = mock('nodes')
38
- node.stubs(:node).returns('pve')
38
+ node.stubs(:node).returns('proxmox')
39
39
  node.stubs(:containers).returns(containers)
40
40
  nodes.stubs(:get).returns(node)
41
41
  nodes.stubs(:all).returns([node])
@@ -47,7 +47,7 @@ module ForemanFogProxmox
47
47
 
48
48
  def mock_node_servers_containers(cr, servers, containers)
49
49
  node = mock('node')
50
- node.stubs(:node).returns('pve')
50
+ node.stubs(:node).returns('proxmox')
51
51
  node.stubs(:containers).returns(containers)
52
52
  node.stubs(:servers).returns(servers)
53
53
  nodes = mock('nodes')
@@ -69,8 +69,8 @@ module ForemanFogProxmox
69
69
  node2.stubs(:servers).returns(n2s)
70
70
  node2.stubs(:containers).returns(n2c)
71
71
  nodes = mock('nodes')
72
- nodes.stubs(:get).with('pve').returns(node1)
73
- nodes.stubs(:get).with('pve2').returns(node2)
72
+ nodes.stubs(:get).with('proxmox').returns(node1)
73
+ nodes.stubs(:get).with('proxmox2').returns(node2)
74
74
  nodes.stubs(:all).returns([node1, node2])
75
75
  client = mock('client')
76
76
  client.stubs(:nodes).returns(nodes)