foreman_fog_proxmox 0.12.4 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of foreman_fog_proxmox might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +3 -2
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_compute_resource.js +24 -2
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm.js +124 -52
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_server.js +0 -48
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume.js +39 -0
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cdrom.js +63 -0
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_volume_cloudinit.js +25 -0
- data/app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb +1 -1
- data/app/helpers/proxmox_compute_controllers_helper.rb +39 -0
- data/app/helpers/proxmox_compute_resources_helper.rb +49 -0
- data/app/helpers/proxmox_compute_selectors_helper.rb +6 -44
- data/app/helpers/proxmox_form_helper.rb +12 -4
- data/app/{models/concerns/fog_extensions/proxmox/volume.rb → helpers/proxmox_storages_helper.rb} +5 -8
- data/app/{models/foreman_fog_proxmox/proxmox_token_expiration.rb → helpers/proxmox_vm_cdrom_helper.rb} +15 -10
- data/app/helpers/proxmox_vm_cloudinit_helper.rb +43 -0
- data/app/helpers/proxmox_vm_config_helper.rb +159 -0
- data/app/helpers/proxmox_vm_helper.rb +24 -62
- data/app/helpers/proxmox_vm_interfaces_helper.rb +85 -0
- data/app/helpers/proxmox_vm_os_template_helper.rb +47 -0
- data/app/helpers/proxmox_vm_volumes_helper.rb +105 -0
- data/app/models/concerns/fog_extensions/proxmox/disk.rb +17 -2
- data/app/models/concerns/fog_extensions/proxmox/interface.rb +19 -4
- data/app/models/concerns/fog_extensions/proxmox/server.rb +8 -3
- data/app/models/concerns/fog_extensions/proxmox/server_config.rb +8 -30
- data/app/models/concerns/host_ext/proxmox/interfaces.rb +7 -2
- data/app/models/concerns/orchestration/proxmox/compute.rb +1 -0
- data/app/models/foreman_fog_proxmox/proxmox.rb +58 -15
- data/app/models/foreman_fog_proxmox/proxmox_compute_attributes.rb +13 -18
- data/app/models/foreman_fog_proxmox/proxmox_connection.rb +14 -9
- data/app/models/foreman_fog_proxmox/proxmox_images.rb +2 -1
- data/app/models/foreman_fog_proxmox/proxmox_interfaces.rb +53 -28
- data/app/models/foreman_fog_proxmox/proxmox_operating_systems.rb +1 -1
- data/app/models/foreman_fog_proxmox/proxmox_version.rb +7 -2
- data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +18 -30
- data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +108 -94
- data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +2 -1
- data/app/models/foreman_fog_proxmox/proxmox_volumes.rb +79 -22
- data/app/views/compute_resources/form/_proxmox.html.erb +23 -10
- data/app/views/compute_resources/show/_proxmox.html.erb +6 -6
- data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_nic_provider_specific_form.html.erb +3 -1
- data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_volumes_edit.html.erb +46 -29
- data/app/views/compute_resources_vms/form/proxmox/_base.html.erb +3 -3
- data/app/views/compute_resources_vms/form/proxmox/_removable_layout.html.erb +2 -1
- data/app/views/compute_resources_vms/form/proxmox/container/_network.html.erb +8 -7
- data/app/views/compute_resources_vms/form/proxmox/server/_advanced.html.erb +0 -2
- data/app/views/compute_resources_vms/form/proxmox/server/_config.html.erb +15 -14
- data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +2 -2
- data/app/views/compute_resources_vms/form/proxmox/server/_volume_cdrom.html.erb +34 -0
- data/app/views/compute_resources_vms/form/proxmox/server/_volume_cloud_init.html.erb +29 -0
- data/app/views/compute_resources_vms/form/proxmox/server/{_volume.html.erb → _volume_hard_disk.html.erb} +7 -3
- data/app/views/compute_resources_vms/show/_proxmox.html.erb +2 -0
- data/lib/foreman_fog_proxmox/engine.rb +7 -8
- data/lib/foreman_fog_proxmox/hash_collection.rb +69 -0
- data/lib/foreman_fog_proxmox/version.rb +1 -1
- data/lib/tasks/foreman_fog_proxmox_tasks.rake +0 -3
- data/test/factories/foreman_fog_proxmox/proxmox_container_mock_factory.rb +20 -8
- data/test/factories/foreman_fog_proxmox/proxmox_node_mock_factory.rb +5 -5
- data/test/factories/foreman_fog_proxmox/proxmox_server_mock_factory.rb +17 -7
- data/test/factories/proxmox_factory.rb +4 -4
- data/test/functional/compute_resources_controller_test.rb +4 -4
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_container_helper_test.rb +49 -29
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +53 -30
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_helper_test.rb +22 -20
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_vm_volumes_helper_test.rb +50 -0
- data/test/unit/foreman_fog_proxmox/proxmox_compute_attributes_test.rb +10 -11
- data/test/unit/foreman_fog_proxmox/proxmox_interfaces_test.rb +38 -10
- data/test/unit/foreman_fog_proxmox/proxmox_version_test.rb +10 -10
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_container_test.rb +34 -24
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_create_test.rb +8 -8
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cdrom_test.rb +181 -0
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_cloudinit_test.rb +131 -0
- 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
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_test.rb +21 -21
- data/test/unit/foreman_fog_proxmox/proxmox_vm_new_test.rb +3 -3
- metadata +40 -23
- data/app/helpers/proxmox_container_helper.rb +0 -163
- data/app/helpers/proxmox_server_helper.rb +0 -155
@@ -21,17 +21,17 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
21
21
|
</tr>
|
22
22
|
<tr>
|
23
23
|
<td><%= _("Version") %></td>
|
24
|
-
<td><%= @compute_resource.version%></td>
|
24
|
+
<td><%= @compute_resource.version %></td>
|
25
25
|
</tr>
|
26
26
|
<tr>
|
27
|
-
<td><%= _("
|
28
|
-
<td><%= @compute_resource.
|
27
|
+
<td><%= _("Authentication method") %></td>
|
28
|
+
<td><%= @compute_resource.auth_method %></td>
|
29
29
|
</tr>
|
30
30
|
<tr>
|
31
|
-
<td><%= _("
|
32
|
-
<td><%= @compute_resource
|
31
|
+
<td><%= _("User token expires") %></td>
|
32
|
+
<td><%= user_token_expiration_date(@compute_resource) %></td>
|
33
33
|
</tr>
|
34
34
|
<tr>
|
35
35
|
<td><%= _("Cluster nodes") %></td>
|
36
|
-
<td><%= @compute_resource
|
36
|
+
<td><%= cluster_nodes(@compute_resource) %></td>
|
37
37
|
</tr>
|
@@ -16,10 +16,12 @@ 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
|
<% if @host.compute_resource.class == ForemanFogProxmox::Proxmox %>
|
18
18
|
<% compute_attributes = f.object.compute_attributes %>
|
19
|
-
<%
|
19
|
+
<% logger.debug("_add_vm_type_to_nic_provider_specific_form.html compute_attributes=#{compute_attributes}") %>
|
20
20
|
<% node_id = f.object.respond_to?('node_id') ? f.object.node_id : nil %>
|
21
21
|
|
22
22
|
<%= f.fields_for 'compute_attributes', OpenStruct.new(f.object.compute_attributes) do |f| %>
|
23
|
+
<% vm_type = compute_attributes.respond_to?('type') ? compute_attributes.type : 'qemu' %>
|
24
|
+
<% logger.debug("_add_vm_type_to_nic_provider_specific_form.html vm_type=#{vm_type}") %>
|
23
25
|
<%= render provider_partial(@host.compute_resource, 'network'), :f => f, :vm_type => vm_type, :node_id => node_id, :disabled => f.object.persisted?, :compute_resource => @host.compute_resource, :new_host => new_vm, :new_vm => new_vm %>
|
24
26
|
<% end %>
|
25
27
|
<% else %>
|
@@ -14,45 +14,63 @@ GNU General Public License for more details.
|
|
14
14
|
|
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
|
-
<% if compute_resource.class == ForemanFogProxmox::Proxmox %>
|
18
|
-
<% type = f.object.type %>
|
19
|
-
<% node_id = f.object.node_id %>
|
20
|
-
<% server = type == 'qemu' %>
|
21
|
-
<% container = type == 'lxc' %>
|
22
|
-
|
23
|
-
<%= new_child_fields_template_typed(f, :volumes, {
|
24
|
-
:type => 'server',
|
25
|
-
:object => compute_resource.new_volume_server,
|
26
|
-
:partial => provider_partial(compute_resource, 'server/volume'),
|
27
|
-
:form_builder_attrs => { :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage volume') },
|
28
|
-
:layout => "compute_resources_vms/form/#{item_layout}_layout" }) %>
|
29
|
-
<%= new_child_fields_template_typed(f, :volumes, {
|
30
|
-
:type => 'container',
|
31
|
-
:object => compute_resource.new_volume_container(id: 'mp0'),
|
32
|
-
:partial => provider_partial(compute_resource, 'container/volume_mp'),
|
33
|
-
:form_builder_attrs => { :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage volume') },
|
34
|
-
:layout => "compute_resources_vms/form/#{item_layout}_layout" }) %>
|
35
17
|
|
18
|
+
<% if compute_resource.class == ForemanFogProxmox::Proxmox %>
|
19
|
+
<%= javascript_include_tag 'foreman_fog_proxmox/proxmox_volume', "data-turbolinks-track" => true %>
|
20
|
+
<% type = f.object.type %>
|
21
|
+
<% node_id = f.object.node_id %>
|
22
|
+
<% server = type == 'qemu' %>
|
23
|
+
<% container = type == 'lxc' %>
|
24
|
+
<% cdrom = f.object.cdrom? %>
|
25
|
+
<% logger.debug("_add_vm_type_to_volumes_edit.html cdrom=#{cdrom}") %>
|
26
|
+
<% cloud_init = f.object.cloud_init? %>
|
27
|
+
<% logger.debug("_add_vm_type_to_volumes_edit.html cloud_init=#{cloud_init}") %>
|
28
|
+
<% container = type == 'lxc' %>
|
36
29
|
|
30
|
+
<%= add_child_link_typed '+ ' + _("Add Hard Disk"), :volumes, 'hard_disk', { :class => "info #{'hide' unless server }", :title => _('add new hard disk') } %>
|
31
|
+
<%= add_child_link_typed '+ ' + _("Add CD-ROM"), :volumes, 'cdrom', { :class => "info #{'hide' if cdrom }", :title => _('add new cd-rom') } %>
|
32
|
+
<%= add_child_link_typed '+ ' + _("Add Cloud-init"), :volumes, 'cloud_init', { :class => "info #{'hide' if cloud_init }", :title => _('add new cloud-init') } %>
|
33
|
+
<%= add_child_link_typed '+ ' + _("Add Mount Point"), :volumes, 'mp', { :class => "info #{'hide' unless container}", :title => _('add new mount point') } %>
|
34
|
+
|
35
|
+
<%= new_child_fields_template_typed(f, :volumes, {
|
36
|
+
:type => 'hard_disk',
|
37
|
+
:object => compute_resource.new_typed_volume({},'qemu','hard_disk'),
|
38
|
+
:partial => provider_partial(compute_resource, 'server/volume_hard_disk'),
|
39
|
+
:form_builder_attrs => { :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove Hard disk') },
|
40
|
+
:layout => "compute_resources_vms/form/#{item_layout}_layout" }) %>
|
41
|
+
<%= new_child_fields_template_typed(f, :volumes, {
|
42
|
+
:type => 'cdrom',
|
43
|
+
:object => compute_resource.new_typed_volume({},'qemu','cdrom'),
|
44
|
+
:partial => provider_partial(compute_resource, 'server/volume_cdrom'),
|
45
|
+
:form_builder_attrs => { :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove CDROM') },
|
46
|
+
:layout => "compute_resources_vms/form/#{item_layout}_layout" }) %>
|
47
|
+
<%= new_child_fields_template_typed(f, :volumes, {
|
48
|
+
:type => 'cloud_init',
|
49
|
+
:object => compute_resource.new_typed_volume({},'qemu','cloud_init'),
|
50
|
+
:partial => provider_partial(compute_resource, 'server/volume_cloud_init'),
|
51
|
+
:form_builder_attrs => { :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove Cloud-init') },
|
52
|
+
:layout => "compute_resources_vms/form/#{item_layout}_layout" }) %>
|
53
|
+
<%= new_child_fields_template_typed(f, :volumes, {
|
54
|
+
:type => 'mp',
|
55
|
+
:object => compute_resource.new_typed_volume({ id: 'mp0' }, 'lxc','mp'),
|
56
|
+
:partial => provider_partial(compute_resource, 'container/volume_mp'),
|
57
|
+
:form_builder_attrs => { :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove mount point') },
|
58
|
+
:layout => "compute_resources_vms/form/#{item_layout}_layout" }) %>
|
37
59
|
|
38
60
|
<%= f.fields_for :volumes do |i| %>
|
39
61
|
<% if i.object.rootfs? %>
|
40
|
-
<div id="container_volumes_rootfs" style="<%= 'display: ' + (container ? 'block' : 'none') + ';' %>">
|
41
62
|
<%= render :partial => provider_partial(compute_resource, 'container/volume_rootfs'), :locals => { :f => i, :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage volume'), :disabled => !container }, :layout => "compute_resources_vms/form/#{item_layout}_layout" %>
|
42
|
-
</div>
|
43
63
|
<% elsif i.object.mount_point? %>
|
44
|
-
<div id="container_volumes_mp" style="<%= 'display: ' + (container ? 'block' : 'none') + ';' %>">
|
45
64
|
<%= render :partial => provider_partial(compute_resource, 'container/volume_mp'), :locals => { :f => i, :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage volume'), :disabled => !container }, :layout => "compute_resources_vms/form/#{item_layout}_layout" %>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<%= render :partial => provider_partial(compute_resource, 'server/
|
50
|
-
|
65
|
+
<% elsif i.object.hard_disk? %>
|
66
|
+
<%= render :partial => provider_partial(compute_resource, 'server/volume_hard_disk'), :locals => { :f => i, :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage volume'), :disabled => !server }, :layout => "compute_resources_vms/form/#{item_layout}_layout" %>
|
67
|
+
<% elsif i.object.cdrom? %>
|
68
|
+
<%= render :partial => provider_partial(compute_resource, 'server/volume_cdrom'), :locals => { :f => i, :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage volume'), :disabled => !server }, :layout => "compute_resources_vms/form/#{item_layout}_layout" %>
|
69
|
+
<% elsif i.object.cloud_init? %>
|
70
|
+
<%= render :partial => provider_partial(compute_resource, 'server/volume_cloud_init'), :locals => { :f => i, :type => type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage volume'), :disabled => !server }, :layout => "compute_resources_vms/form/#{item_layout}_layout" %>
|
51
71
|
<% end %>
|
52
72
|
<% end %>
|
53
73
|
|
54
|
-
<%= add_child_link_typed '+ ' + _("Add Volume"), :volumes, 'server', { :class => "info #{'hide' unless server}", :title => _('add new storage volume') } %>
|
55
|
-
<%= add_child_link_typed '+ ' + _("Add Volume"), :volumes, 'container', { :class => "info #{'hide' unless container}", :title => _('add new storage volume') } %>
|
56
74
|
<% else %>
|
57
75
|
<%= new_child_fields_template(f, :volumes, {
|
58
76
|
:object => volume,
|
@@ -68,4 +86,3 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
68
86
|
<%= add_child_link '+ ' + _("Add Volume"), :volumes, { :class => "info", :title => _('add new storage volume') } %>
|
69
87
|
<% end %>
|
70
88
|
<% end %>
|
71
|
-
|
@@ -31,9 +31,9 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
31
31
|
<%= render :partial => "compute_resources_vms/form/proxmox/container/advanced", :locals => { :f => f, :compute_resource => compute_resource, :new_vm => new_vm } %>
|
32
32
|
|
33
33
|
<!-- Config Options Settings-->
|
34
|
-
<%= f.fields_for :config, compute_resource.
|
35
|
-
<%= render :partial => "compute_resources_vms/form/proxmox/server/config", :locals => { :f => server_config, :compute_resource => compute_resource, :host => @host, :new_vm => new_vm, :item_layout => 'removable', :type => f.object.type, :node_id => f.object.node_id } %>
|
34
|
+
<%= f.fields_for :config, compute_resource.new_typed_vm(object_to_config_hash(f.object, 'qemu'), 'qemu').config, include_id: false do |server_config|%>
|
35
|
+
<%= render :partial => "compute_resources_vms/form/proxmox/server/config", :locals => { :f => server_config, :cloudinit => f.object.cloud_init?, :compute_resource => compute_resource, :host => @host, :new_vm => new_vm, :item_layout => 'removable', :type => f.object.type, :node_id => f.object.node_id } %>
|
36
36
|
<% end %>
|
37
|
-
<%= f.fields_for :config, compute_resource.
|
37
|
+
<%= f.fields_for :config, compute_resource.new_typed_vm(object_to_config_hash(f.object, 'lxc'), 'lxc').config, include_id: false do |container_config|%>
|
38
38
|
<%= render :partial => "compute_resources_vms/form/proxmox/container/config", :locals => { :f => container_config, :compute_resource => compute_resource, :host => @host, :new_vm => new_vm, :item_layout => 'removable', :type => f.object.type, :node_id => f.object.node_id } %>
|
39
39
|
<% end %>
|
@@ -16,9 +16,10 @@ 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
|
<% if compute_resource.class == ForemanFogProxmox::Proxmox %>
|
18
18
|
<% volume_rootfs = f.object.respond_to?(:rootfs?) && f.object.rootfs? %>
|
19
|
+
<% type = f.object.respond_to?(:storage_type) && f.object.storage_type %>
|
19
20
|
|
20
21
|
<% unless volume_rootfs %>
|
21
|
-
<%=
|
22
|
+
<%= remove_child_link_typed('X', f, type, { :method => :'_delete', :title => local_assigns[:remove_title], :class => 'label label-danger' }) %>
|
22
23
|
<% end %>
|
23
24
|
<% else %>
|
24
25
|
<% if new_vm %>
|
@@ -20,14 +20,15 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
20
20
|
|
21
21
|
<%= field_set_tag _("Nic"), :id => "container_network_#{index}", :style => ('display: none;' unless container), :disabled => !container do %>
|
22
22
|
<%= f.hidden_field :id if !new_vm %>
|
23
|
-
<%= text_f f, :name, :label => _('Name'), :label_size => "col-md-2" %>
|
24
|
-
<%= checkbox_f f, :
|
25
|
-
<%= text_f f, :
|
26
|
-
<%= text_f f, :
|
27
|
-
<%= checkbox_f f, :
|
28
|
-
<%= text_f f, :
|
29
|
-
<%= text_f f, :
|
23
|
+
<%= text_f f, :name, :label => _('Name'), :label_size => "col-md-2", :required => true, :label_help => _("eth[n] with n integer >= 0, e.g. eth0") %>
|
24
|
+
<%= checkbox_f f, :dhcp, :label => _('DHCP IPv4') %>
|
25
|
+
<%= text_f f, :cidr, :label => _('CIDR IPv4'), :label_size => "col-md-2", :label_help => _("integer within [0..32]") %>
|
26
|
+
<%= text_f f, :gw, :label => _('Gateway IPv4'), :label_size => "col-md-2" %>
|
27
|
+
<%= checkbox_f f, :dhcp6, :label => _('DHCP IPv6') %>
|
28
|
+
<%= text_f f, :cidr6, :label => _('CIDR IPv6'), :label_size => "col-md-2", :label_help => _("integer within [0..128]")%>
|
29
|
+
<%= text_f f, :gw6, :label => _('Gateway IPv6'), :label_size => "col-md-2" %>
|
30
30
|
<%= counter_f f, :tag, :class => "input-mini", :label => _('VLAN tag'), :label_size => "col-md-2" %>
|
31
31
|
<%= counter_f f, :rate, :class => "input-mini", :label => _('Rate limit'), :label_size => "col-md-2" %>
|
32
|
+
<%= checkbox_f f, :firewall, :label => _('Firewall') %>
|
32
33
|
<%= select_f f, :bridge, compute_resource.bridges(node_id), :iface, :iface, { }, :label => _('Bridge'), :label_size => "col-md-2" %>
|
33
34
|
<% end %>
|
@@ -24,8 +24,6 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
24
24
|
<%= check_box_tag 'show_server_config_cpu', '1', false, :onclick => "$('#server_config_cpu').toggle()" %>
|
25
25
|
<%= label_tag 'show_server_config_memory', _("Memory") %>
|
26
26
|
<%= check_box_tag 'show_server_config_memory', '1', false, :onclick => "$('#server_config_memory').toggle()" %>
|
27
|
-
<%= label_tag 'show_server_config_cdrom', _("CDROM") %>
|
28
|
-
<%= check_box_tag 'show_server_config_cdrom', '1', false, :onclick => "$('#server_config_cdrom').toggle()" %>
|
29
27
|
<%= label_tag 'show_server_config_os', _("OS") %>
|
30
28
|
<%= check_box_tag 'show_server_config_os', '1', false, :onclick => "$('#server_config_os').toggle()" %>
|
31
29
|
<% end %>
|
@@ -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 => _('
|
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 _("
|
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
|
-
<%=
|
42
|
-
|
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
|
-
<%
|
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 _(
|
22
|
-
<%= f.hidden_field :volid if !
|
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)' %>
|
@@ -84,18 +84,17 @@ module ForemanFogProxmox
|
|
84
84
|
end
|
85
85
|
|
86
86
|
config.to_prepare do
|
87
|
-
require 'fog/compute/
|
88
|
-
require 'fog/compute/
|
89
|
-
require 'fog/compute/
|
90
|
-
require 'fog/compute/
|
91
|
-
require 'fog/compute/
|
92
|
-
require 'fog/compute/
|
87
|
+
require 'fog/proxmox/compute/models/server'
|
88
|
+
require 'fog/proxmox/compute/models/server_config'
|
89
|
+
require 'fog/proxmox/compute/models/disk'
|
90
|
+
require 'fog/proxmox/compute/models/interface'
|
91
|
+
require 'fog/proxmox/compute/models/volume'
|
92
|
+
require 'fog/proxmox/compute/models/node'
|
93
93
|
|
94
94
|
Fog::Proxmox::Compute::Server.include FogExtensions::Proxmox::Server
|
95
95
|
Fog::Proxmox::Compute::ServerConfig.include FogExtensions::Proxmox::ServerConfig
|
96
|
-
Fog::Proxmox::Compute::Disk.include FogExtensions::Proxmox::Disk
|
97
96
|
Fog::Proxmox::Compute::Interface.include FogExtensions::Proxmox::Interface
|
98
|
-
Fog::Proxmox::Compute::
|
97
|
+
Fog::Proxmox::Compute::Disk.include FogExtensions::Proxmox::Disk
|
99
98
|
::ComputeResourcesController.include ForemanFogProxmox::Controller::Parameters::ComputeResource
|
100
99
|
Fog::Proxmox::Compute::Node.include FogExtensions::Proxmox::Node
|
101
100
|
::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
|