foreman_fog_proxmox 0.9.4 → 0.10.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm.js +89 -0
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_container.js +5 -41
- data/app/assets/javascripts/foreman_fog_proxmox/proxmox_vm_server.js +2 -21
- data/app/controllers/concerns/foreman_fog_proxmox/controller/parameters/compute_resource.rb +1 -1
- data/app/controllers/foreman_fog_proxmox/compute_resources_controller.rb +46 -6
- data/app/helpers/proxmox_container_helper.rb +3 -1
- data/app/helpers/proxmox_server_helper.rb +2 -1
- data/app/helpers/proxmox_vm_helper.rb +19 -0
- data/app/models/concerns/fog_extensions/proxmox/node.rb +0 -5
- data/app/models/concerns/fog_extensions/proxmox/server.rb +1 -1
- data/app/models/foreman_fog_proxmox/proxmox.rb +9 -13
- data/app/models/foreman_fog_proxmox/proxmox_images.rb +10 -5
- data/app/models/foreman_fog_proxmox/proxmox_vm_commands.rb +6 -2
- data/app/models/foreman_fog_proxmox/proxmox_vm_new.rb +22 -6
- data/app/models/foreman_fog_proxmox/proxmox_vm_queries.rb +9 -7
- data/app/models/foreman_fog_proxmox/vms.rb +37 -0
- data/app/overrides/compute_resources_vms/form/add_vm_type_node_to_new_form.rb +25 -0
- data/app/views/compute_resources/form/_proxmox.html.erb +0 -2
- data/app/views/compute_resources/show/_proxmox.html.erb +4 -0
- data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_node_to_new_form.html.erb +24 -0
- data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_networks_form.html.erb +2 -1
- data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_networks_new_childs_form.html.erb +2 -1
- data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_nic_provider_specific_form.html.erb +3 -2
- data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_volumes_edit.html.erb +6 -5
- data/app/views/compute_resources_vms/form/proxmox/_base.html.erb +3 -3
- data/app/views/compute_resources_vms/form/proxmox/_general.html.erb +2 -1
- data/app/views/compute_resources_vms/form/proxmox/_network.html.erb +2 -2
- data/app/views/compute_resources_vms/form/proxmox/container/_extended.html.erb +3 -2
- data/app/views/compute_resources_vms/form/proxmox/container/_network.html.erb +4 -3
- data/app/views/compute_resources_vms/form/proxmox/container/_volume_mp.html.erb +1 -1
- data/app/views/compute_resources_vms/form/proxmox/container/_volume_rootfs.html.erb +1 -1
- data/app/views/compute_resources_vms/form/proxmox/server/_config.html.erb +1 -1
- data/app/views/compute_resources_vms/form/proxmox/server/_network.html.erb +4 -3
- data/app/views/compute_resources_vms/form/proxmox/server/_volume.html.erb +1 -1
- data/app/views/compute_resources_vms/index/_proxmox.html.erb +4 -2
- data/config/routes.rb +7 -2
- data/lib/foreman_fog_proxmox/engine.rb +4 -0
- data/lib/foreman_fog_proxmox/version.rb +1 -1
- data/locale/en/foreman_fog_proxmox.edit.po +508 -0
- data/locale/en/foreman_fog_proxmox.po +34 -7
- data/locale/en/foreman_fog_proxmox.po.time_stamp +0 -0
- data/locale/foreman_fog_proxmox.pot +112 -70
- data/locale/fr/foreman_fog_proxmox.edit.po +508 -0
- data/locale/fr/foreman_fog_proxmox.po +39 -12
- data/locale/fr/foreman_fog_proxmox.po.time_stamp +0 -0
- data/test/factories/foreman_fog_proxmox/proxmox_node_mock_factory.rb +28 -8
- data/test/factories/proxmox_factory.rb +0 -1
- data/test/functional/compute_resources_controller_test.rb +16 -4
- data/test/unit/foreman_fog_proxmox/helpers/proxmox_server_helper_test.rb +1 -0
- data/test/unit/foreman_fog_proxmox/proxmox_test.rb +0 -1
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_container_test.rb +33 -8
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_create_test.rb +2 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_test.rb +22 -2
- data/test/unit/foreman_fog_proxmox/proxmox_vm_commands_server_update_volumes_test.rb +18 -6
- metadata +9 -2
@@ -66,7 +66,7 @@ module ForemanFogProxmox
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def interface_container_defaults(id = 'net0')
|
69
|
-
{ id: id, name: 'eth0', bridge: bridges.first.identity.to_s }
|
69
|
+
{ id: id, name: 'eth0', bridge: bridges.first.identity.to_s, dhcpv4: 1, dhcpv6: 1 }
|
70
70
|
end
|
71
71
|
|
72
72
|
def new_interface(attr = {})
|
@@ -92,12 +92,24 @@ module ForemanFogProxmox
|
|
92
92
|
Fog::Proxmox::Compute::Interface.new(opts)
|
93
93
|
end
|
94
94
|
|
95
|
+
def default_node
|
96
|
+
nodes.first
|
97
|
+
end
|
98
|
+
|
99
|
+
def default_node_id
|
100
|
+
default_node.node
|
101
|
+
end
|
102
|
+
|
103
|
+
def next_vmid
|
104
|
+
default_node.servers.next_id
|
105
|
+
end
|
106
|
+
|
95
107
|
def vm_server_instance_defaults
|
96
108
|
ActiveSupport::HashWithIndifferentAccess.new(
|
97
109
|
name: "foreman_#{Time.now.to_i}",
|
98
110
|
vmid: next_vmid,
|
99
111
|
type: 'qemu',
|
100
|
-
node_id:
|
112
|
+
node_id: default_node_id,
|
101
113
|
cores: 1,
|
102
114
|
sockets: 1,
|
103
115
|
kvm: 1,
|
@@ -117,14 +129,14 @@ module ForemanFogProxmox
|
|
117
129
|
name: "foreman_#{Time.now.to_i}",
|
118
130
|
vmid: next_vmid,
|
119
131
|
type: 'lxc',
|
120
|
-
node_id:
|
132
|
+
node_id: default_node_id,
|
121
133
|
memory: 512 * MEGA,
|
122
134
|
templated: 0
|
123
135
|
).merge(Fog::Proxmox::DiskHelper.flatten(volume_container_defaults)).merge(Fog::Proxmox::DiskHelper.flatten(volume_server_defaults)).merge(Fog::Proxmox::NicHelper.flatten(interface_defaults))
|
124
136
|
end
|
125
137
|
|
126
138
|
def vm_instance_defaults
|
127
|
-
super.merge(vmid: next_vmid, node_id:
|
139
|
+
super.merge(vmid: next_vmid, node_id: default_node_id)
|
128
140
|
end
|
129
141
|
|
130
142
|
def new_vm(new_attr = {})
|
@@ -143,7 +155,9 @@ module ForemanFogProxmox
|
|
143
155
|
|
144
156
|
def new_container_vm(new_attr = {})
|
145
157
|
options = new_attr
|
146
|
-
|
158
|
+
node_id = new_attr['node_id']
|
159
|
+
node = node_id ? client.nodes.get(node_id) : default_node
|
160
|
+
options = options.merge(type: 'lxc').merge(vmid: next_vmid)
|
147
161
|
options = vm_container_instance_defaults.merge(options) if new_attr.empty?
|
148
162
|
vm = node.containers.new(parse_container_vm(options).deep_symbolize_keys)
|
149
163
|
logger.debug(format(_('new_container_vm() vm.config=%<config>s'), config: vm.config.inspect))
|
@@ -152,7 +166,9 @@ module ForemanFogProxmox
|
|
152
166
|
|
153
167
|
def new_server_vm(new_attr = {})
|
154
168
|
options = new_attr
|
155
|
-
|
169
|
+
node_id = new_attr['node_id']
|
170
|
+
node = node_id ? client.nodes.get(node_id) : default_node
|
171
|
+
options = options.merge(type: 'qemu').merge(vmid: next_vmid)
|
156
172
|
options = vm_server_instance_defaults.merge(options) if new_attr.empty?
|
157
173
|
vm = node.servers.new(parse_server_vm(options).deep_symbolize_keys)
|
158
174
|
logger.debug(format(_('new_server_vm() vm.config=%<config>s'), config: vm.config.inspect))
|
@@ -19,10 +19,6 @@
|
|
19
19
|
|
20
20
|
module ForemanFogProxmox
|
21
21
|
module ProxmoxVmQueries
|
22
|
-
def next_vmid
|
23
|
-
node.servers.next_id
|
24
|
-
end
|
25
|
-
|
26
22
|
def nodes
|
27
23
|
nodes = client.nodes.all if client
|
28
24
|
nodes&.sort_by(&:node)
|
@@ -33,19 +29,25 @@ module ForemanFogProxmox
|
|
33
29
|
pools.sort_by(&:poolid)
|
34
30
|
end
|
35
31
|
|
36
|
-
def storages(type = 'images')
|
32
|
+
def storages(node_id = default_node_id, type = 'images')
|
33
|
+
node = client.nodes.get node_id
|
34
|
+
node ||= default_node
|
37
35
|
storages = node.storages.list_by_content_type type
|
38
36
|
storages.sort_by(&:storage)
|
39
37
|
end
|
40
38
|
|
41
|
-
def bridges
|
39
|
+
def bridges(node_id = default_node_id)
|
42
40
|
node = network_client.nodes.get node_id
|
41
|
+
node ||= network_client.nodes.first
|
43
42
|
bridges = node.networks.all(type: 'any_bridge')
|
44
43
|
bridges.sort_by(&:iface)
|
45
44
|
end
|
46
45
|
|
46
|
+
# TODO: Pagination with filters
|
47
47
|
def vms(_opts = {})
|
48
|
-
|
48
|
+
vms = []
|
49
|
+
nodes.each { |node| vms += node.servers.all + node.containers.all }
|
50
|
+
ForemanFogProxmox::Vms.new(vms)
|
49
51
|
end
|
50
52
|
|
51
53
|
def find_vm_by_uuid(uuid)
|
@@ -0,0 +1,37 @@
|
|
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
|
+
module ForemanFogProxmox
|
21
|
+
class Vms
|
22
|
+
attr_reader :items
|
23
|
+
|
24
|
+
def each
|
25
|
+
@items.each
|
26
|
+
end
|
27
|
+
|
28
|
+
# TODO: Pagination with filters
|
29
|
+
def all(_filters = {})
|
30
|
+
items
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(items = [])
|
34
|
+
@items = items
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,25 @@
|
|
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
|
+
Deface::Override.new(
|
19
|
+
:virtual_path => 'compute_resources_vms/new',
|
20
|
+
:name => 'add_vm_type_to_networks_form',
|
21
|
+
:replace => "erb[loud]:contains('compute_resources_vms/form/networks')",
|
22
|
+
:partial => 'compute_resources_vms/form/proxmox/add_vm_type_node_to_new_form',
|
23
|
+
:original => '10d73563b7c13f01702aadfffd95956da8bff1ad',
|
24
|
+
:namespaced => true
|
25
|
+
)
|
@@ -18,7 +18,6 @@ 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_id = !!f.object.node_id ? f.object.node_id : '' %>
|
22
21
|
<% token_expired = f.object.token_expired? %>
|
23
22
|
<% token_deadline = f.object.token_deadline %>
|
24
23
|
<%= checkbox_f f, :renew, :label => _("Renew expired token ?"), :checked_value => '1', :label_help => _("Token expires on #{token_deadline}") %>
|
@@ -28,4 +27,3 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
28
27
|
<%= checkbox_f f, :ssl_verify_peer, :label => _("SSL verify peer"), :checked_value => '1', :onchange => "sslVerifyPeerSelected()" %>
|
29
28
|
<%= textarea_f f, :ssl_certs, :label => _("X509 Certification Authorities"), :size => "col-md-4",
|
30
29
|
:placeholder => _("Optionally provide a CA, or a correctly ordered CA chain. If left blank, disable ssl_verify_peer.") %>
|
31
|
-
<%= select_f f, :node_id, nodes, :node, :node, { :include_blank => true }, :label => _('Node'), :label_size => "col-md-2", :required => true, :disabled => (node_id != '') %>
|
@@ -31,3 +31,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
31
31
|
<td><%= _("Token expires on") %></td>
|
32
32
|
<td><%= @compute_resource.token_deadline%></td>
|
33
33
|
</tr>
|
34
|
+
<tr>
|
35
|
+
<td><%= _("Cluster nodes") %></td>
|
36
|
+
<td><%= @compute_resource.nodes.collect { |node| node.node }%></td>
|
37
|
+
</tr>
|
@@ -0,0 +1,24 @@
|
|
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
|
+
<% if compute_resource.class == ForemanFogProxmox::Proxmox %>
|
18
|
+
<% vm_type = f.object.respond_to?('type') ? f.object.type : nil %>
|
19
|
+
<% node_id = f.object.respond_to?('node_id') ? f.object.node_id : nil %>
|
20
|
+
|
21
|
+
<%= render :partial => 'compute_resources_vms/form/networks', :locals => { :f => f, :compute_resource => @compute_resource, :new_host => true, :new_vm => true, :item_layout => 'removable', :vm_type => vm_type, :node_id => node_id } %>
|
22
|
+
<% else %>
|
23
|
+
<%= render :partial => 'compute_resources_vms/form/networks', :locals => { :f => f, :compute_resource => @compute_resource, :new_host => true, :new_vm => true, :item_layout => 'removable' } %>
|
24
|
+
<% 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
|
<% vm_type = f.object.respond_to?('type') ? f.object.type : nil %>
|
19
|
+
<% node_id = f.object.respond_to?('node_id') ? f.object.node_id : nil %>
|
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'), :selected_cluster => selected_cluster },
|
22
|
+
:locals => { :f => i, :vm_type => vm_type, :node_id => node_id, :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
|
<% else %>
|
24
25
|
<%= render :partial => provider_partial(compute_resource, 'network'),
|
data/app/views/compute_resources_vms/form/proxmox/_add_vm_type_to_networks_new_childs_form.html.erb
CHANGED
@@ -16,11 +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 compute_resource.class == ForemanFogProxmox::Proxmox %>
|
18
18
|
<% vm_type = f.object.respond_to?('type') ? f.object.type : nil %>
|
19
|
+
<% node_id = f.object.respond_to?('node_id') ? f.object.node_id : nil %>
|
19
20
|
|
20
21
|
<%= new_child_fields_template(f, compute_resource.interfaces_attrs_name, {
|
21
22
|
:object => compute_resource.new_interface,
|
22
23
|
:partial => provider_partial(compute_resource, 'network'),
|
23
|
-
:form_builder_attrs => { :vm_type => vm_type, :compute_resource => compute_resource, :new_host => new_host, :new_vm => new_vm, :remove_title => _('remove network interface') },
|
24
|
+
:form_builder_attrs => { :vm_type => vm_type, :node_id => node_id, :compute_resource => compute_resource, :new_host => new_host, :new_vm => new_vm, :remove_title => _('remove network interface') },
|
24
25
|
:layout => 'compute_resources_vms/form/deletable_layout' }) %>
|
25
26
|
<% else %>
|
26
27
|
<%= new_child_fields_template(f, compute_resource.interfaces_attrs_name, {
|
@@ -16,10 +16,11 @@ 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
|
-
<% vm_type =
|
19
|
+
<% vm_type = vm_type(@host) %>
|
20
|
+
<% node_id = node_id(@host) %>
|
20
21
|
|
21
22
|
<%= f.fields_for 'compute_attributes', OpenStruct.new(f.object.compute_attributes) do |f| %>
|
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 %>
|
23
|
+
<%= 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 %>
|
23
24
|
<% end %>
|
24
25
|
<% else %>
|
25
26
|
<%= f.fields_for 'compute_attributes', OpenStruct.new(f.object.compute_attributes) do |f| %>
|
@@ -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
|
<% if compute_resource.class == ForemanFogProxmox::Proxmox %>
|
18
18
|
<% type = f.object.type %>
|
19
|
+
<% node_id = f.object.node_id %>
|
19
20
|
<% server = type == 'qemu' %>
|
20
21
|
<% container = type == 'lxc' %>
|
21
22
|
|
@@ -23,13 +24,13 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
23
24
|
:type => 'server',
|
24
25
|
:object => compute_resource.new_volume_server,
|
25
26
|
:partial => provider_partial(compute_resource, 'server/volume'),
|
26
|
-
:form_builder_attrs => { :type => type, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage 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') },
|
27
28
|
:layout => "compute_resources_vms/form/#{item_layout}_layout" }) %>
|
28
29
|
<%= new_child_fields_template_typed(f, :volumes, {
|
29
30
|
:type => 'container',
|
30
31
|
:object => compute_resource.new_volume_container(id: 'mp0'),
|
31
32
|
:partial => provider_partial(compute_resource, 'container/volume_mp'),
|
32
|
-
:form_builder_attrs => { :type => type, :compute_resource => compute_resource, :new_host => new_vm, :new_vm => new_vm, :remove_title => _('remove storage volume') },
|
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') },
|
33
34
|
:layout => "compute_resources_vms/form/#{item_layout}_layout" }) %>
|
34
35
|
|
35
36
|
|
@@ -37,15 +38,15 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
37
38
|
<%= f.fields_for :volumes do |i| %>
|
38
39
|
<% if i.object.rootfs? %>
|
39
40
|
<div id="container_volumes_rootfs" style="<%= 'display: ' + (container ? 'block' : 'none') + ';' %>">
|
40
|
-
<%= render :partial => provider_partial(compute_resource, 'container/volume_rootfs'), :locals => { :f => i, :type => type, :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" %>
|
41
|
+
<%= 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" %>
|
41
42
|
</div>
|
42
43
|
<% elsif i.object.mount_point? %>
|
43
44
|
<div id="container_volumes_mp" style="<%= 'display: ' + (container ? 'block' : 'none') + ';' %>">
|
44
|
-
<%= render :partial => provider_partial(compute_resource, 'container/volume_mp'), :locals => { :f => i, :type => type, :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" %>
|
45
|
+
<%= 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" %>
|
45
46
|
</div>
|
46
47
|
<% elsif i.object.controller? %>
|
47
48
|
<div id="server_volumes" style="<%= 'display: ' + (server ? 'block' : 'none') + ';' %>">
|
48
|
-
<%= render :partial => provider_partial(compute_resource, 'server/volume'), :locals => { :f => i, :type => type, :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" %>
|
49
|
+
<%= render :partial => provider_partial(compute_resource, 'server/volume'), :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" %>
|
49
50
|
</div>
|
50
51
|
<% end %>
|
51
52
|
<% end %>
|
@@ -18,7 +18,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
18
18
|
<%= javascript_include_tag 'foreman_fog_proxmox/proxmox_vm', "data-turbolinks-track" => true %>
|
19
19
|
<%= javascript_tag("$(document).on('ContentLoad', tfm.numFields.initAll)"); %>
|
20
20
|
|
21
|
-
<%= select_f f, :type, proxmox_types_map, :id, :name, { }, :label => _('Type'), :label_size => "col-md-2", :onchange => "vmTypeSelected()", :disabled => !new_vm %>
|
21
|
+
<%= select_f f, :type, proxmox_types_map, :id, :name, { }, :label => _('Type'), :label_size => "col-md-2", :required => true, :onchange => "vmTypeSelected()", :disabled => !new_vm %>
|
22
22
|
|
23
23
|
<!-- VM General Settings -->
|
24
24
|
<%= render :partial => "compute_resources_vms/form/proxmox/general", :locals => { :f => f, :compute_resource => compute_resource, :new_vm => new_vm, :from_profile => from_profile } %>
|
@@ -32,8 +32,8 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
32
32
|
|
33
33
|
<!-- Config Options Settings-->
|
34
34
|
<%= f.fields_for :config, compute_resource.new_server_vm(object_to_config_hash(f.object)).config, include_id: false do |server_config|%>
|
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 } %>
|
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 } %>
|
36
36
|
<% end %>
|
37
37
|
<%= f.fields_for :config, compute_resource.new_container_vm(object_to_config_hash(f.object)).config, include_id: false do |container_config|%>
|
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 } %>
|
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 %>
|
@@ -20,7 +20,8 @@ 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_id, compute_resource.nodes, :node, :node, { }, :label => _('Node'), :label_size => "col-md-2", :required => true, :
|
23
|
+
<%= select_f f, :node_id, compute_resource.nodes, :node, :node, { }, :label => _('Node'), :label_size => "col-md-2", :required => true, :onchange => 'nodeSelected(this)' %>
|
24
|
+
<%= checkbox_f f, :start_after_create, :label => _('Start after creation?'), :disabled => !new_vm, :class => ('hide' if !new_vm), :no_label => !new_vm %>
|
24
25
|
<% unless local_assigns[:hide_image] && !new_vm %>
|
25
26
|
<%
|
26
27
|
arch ||= nil ; os ||= nil
|
@@ -15,5 +15,5 @@ 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
|
-
<%= render :partial => "compute_resources_vms/form/proxmox/server/network", :locals => { :f => f, :
|
19
|
-
<%= render :partial => "compute_resources_vms/form/proxmox/container/network", :locals => { :f => f, :
|
18
|
+
<%= render :partial => "compute_resources_vms/form/proxmox/server/network", :locals => { :f => f, :vm_type => vm_type, :node_id => node_id, :compute_resource => compute_resource, :new_vm => new_vm } %>
|
19
|
+
<%= render :partial => "compute_resources_vms/form/proxmox/container/network", :locals => { :f => f, :vm_type => vm_type, :node_id => node_id, :compute_resource => compute_resource, :new_vm => new_vm } %>
|
@@ -16,11 +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
|
|
18
18
|
<% container = f.object.type == 'lxc' %>
|
19
|
+
<% node_id = f.object.node_id %>
|
19
20
|
|
20
21
|
<%= field_set_tag _("Extended"), :id => "container_config_ext", :class => ('hide' unless (new_vm && container)), :disabled => (!container || !new_vm) do %>
|
21
22
|
<div id="ostemplate_form">
|
22
|
-
<%= select_f f, :ostemplate_storage, compute_resource.storages('vztmpl'), :storage, :storage, { :include_blank => true }, :disabled => !new_vm, :class => ('hide' unless new_vm), :label => _('Template storage'), :label_size => "col-md-2", :onchange => 'storageOstemplateSelected(this)' %>
|
23
|
-
<%= select_f f, :ostemplate_file, compute_resource.images_by_storage(f.object.ostemplate_storage, 'vztmpl'), :volid, :volid, { :include_blank => true }, :disabled => !new_vm, :class => ('hide' unless new_vm), :label => _('OS Template'), :label_size => "col-md-2", :required => true %>
|
23
|
+
<%= select_f f, :ostemplate_storage, compute_resource.storages(node_id,'vztmpl'), :storage, :storage, { :include_blank => true }, :disabled => !new_vm, :class => ('hide' unless new_vm), :label => _('Template storage'), :label_size => "col-md-2", :onchange => 'storageOstemplateSelected(this)' %>
|
24
|
+
<%= select_f f, :ostemplate_file, compute_resource.images_by_storage(node_id,f.object.ostemplate_storage, 'vztmpl'), :volid, :volid, { :include_blank => true }, :disabled => !new_vm, :class => ('hide' unless new_vm), :label => _('OS Template'), :label_size => "col-md-2", :required => true %>
|
24
25
|
</div>
|
25
26
|
<%= password_proxmox_f f, :password, :label => _("Root password"), :required => true %>
|
26
27
|
<% end %>
|
@@ -15,9 +15,10 @@ 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
|
-
<% container =
|
18
|
+
<% container = vm_type == 'lxc' %>
|
19
|
+
<% index = f.index ? f.index.present? : 0 %>
|
19
20
|
|
20
|
-
<%= field_set_tag _("Nic"), :id => "container_network_#{
|
21
|
+
<%= field_set_tag _("Nic"), :id => "container_network_#{index}", :style => ('display: none;' unless container), :disabled => !container do %>
|
21
22
|
<%= f.hidden_field :id if !new_vm %>
|
22
23
|
<%= text_f f, :name, :label => _('Name'), :label_size => "col-md-2" %>
|
23
24
|
<%= checkbox_f f, :dhcpv4, :label => _('DHCP IPv4') %>
|
@@ -28,5 +29,5 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
28
29
|
<%= text_f f, :gwv6, :label => _('Gateway IPv6'), :label_size => "col-md-2" %>
|
29
30
|
<%= counter_f f, :tag, :class => "input-mini", :label => _('VLAN tag'), :label_size => "col-md-2" %>
|
30
31
|
<%= counter_f f, :rate, :class => "input-mini", :label => _('Rate limit'), :label_size => "col-md-2" %>
|
31
|
-
<%= select_f f, :bridge, compute_resource.bridges, :iface, :iface, { }, :label => _('Bridge'), :label_size => "col-md-2" %>
|
32
|
+
<%= select_f f, :bridge, compute_resource.bridges(node_id), :iface, :iface, { }, :label => _('Bridge'), :label_size => "col-md-2" %>
|
32
33
|
<% end %>
|
@@ -20,7 +20,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
20
20
|
|
21
21
|
<%= field_set_tag _("Mount point"), :id => "container_volume_mp_#{f.index}", :class => ('hide' unless container), :disabled => !container do %>
|
22
22
|
<%= f.hidden_field :volid if !new_vm %>
|
23
|
-
<%= select_f f, :storage, compute_resource.storages, :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
|
23
|
+
<%= select_f f, :storage, compute_resource.storages(node_id), :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
|
24
24
|
<%= text_f f, :mp, :label => _('Path'), :label_size => "col-md-2", :required => true, :help_inline => _("e.g. /path/to/") %>
|
25
25
|
<%= text_f f, :device, :label => _('Device'), :label_size => "col-md-2", :class => ('hide' if f.object.rootfs?), :disabled => (!new_volume || f.object.rootfs?), :'data-soft-max' => 10 %>
|
26
26
|
<%= byte_size_f f, :size, :class => "input-mini", :label => _("Size"), :label_size => "col-md-2" %>
|
@@ -19,6 +19,6 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
19
19
|
|
20
20
|
<%= field_set_tag _("Rootfs"), :id => "container_volume_rootfs", :class => ('hide' unless container), :disabled => !container do %>
|
21
21
|
<%= f.hidden_field :volid if !new_vm %>
|
22
|
-
<%= select_f f, :storage, compute_resource.storages, :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
|
22
|
+
<%= select_f f, :storage, compute_resource.storages(node_id), :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
|
23
23
|
<%= byte_size_f f, :size, :class => "input-mini", :label => _("Size"), :label_size => "col-md-2" %>
|
24
24
|
<% end %>
|
@@ -51,7 +51,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
51
51
|
<%= radio_button_f f, :cdrom, :value => 'cdrom' , :text => _('Physical'), :onclick => 'cdromSelected(this)' %>
|
52
52
|
<%= radio_button_f f, :cdrom, :value => 'image' , :text => _('Image'), :onclick => 'cdromSelected(this)' %>
|
53
53
|
<div id='cdrom_image_form' class='<%= 'hide' if %[none cdrom].include? f.object.cdrom %>'>
|
54
|
-
<%= select_f f, :cdrom_storage, compute_resource.storages('iso'), :storage, :storage, { :include_blank => true }, :label => _('Storage'), :label_size => "col-md-2", :onchange => 'storageIsoSelected(this)' %>
|
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
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
56
|
</div>
|
57
57
|
<% end %>
|
@@ -15,12 +15,13 @@ 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 =
|
18
|
+
<% server = vm_type == 'qemu' %>
|
19
|
+
<% index = f.index ? f.index.present? : 0 %>
|
19
20
|
|
20
|
-
<%= field_set_tag _("Nic"), :id => "server_network_#{
|
21
|
+
<%= field_set_tag _("Nic"), :id => "server_network_#{index}", :style => ('display: none;' unless server), :disabled => !server do %>
|
21
22
|
<%= f.hidden_field :id if !new_vm %>
|
22
23
|
<%= select_f f, :model, proxmox_networkcards_map, :id, :name, { }, :label => _('Card'), :label_size => "col-md-2" %>
|
23
|
-
<%= select_f f, :bridge, compute_resource.bridges, :iface, :iface, { }, :label => _('Bridge'), :label_size => "col-md-2" %>
|
24
|
+
<%= select_f f, :bridge, compute_resource.bridges(node_id), :iface, :iface, { }, :label => _('Bridge'), :label_size => "col-md-2" %>
|
24
25
|
<%= counter_f f, :tag, :class => "input-mini", :label => _('VLAN tag'), :label_size => "col-md-2" %>
|
25
26
|
<%= counter_f f, :rate, :class => "input-mini", :label => _('Rate limit'), :label_size => "col-md-2" %>
|
26
27
|
<%= counter_f f, :queues, :class => "input-mini", :label => _('Multiqueue'), :label_size => "col-md-2" %>
|
@@ -20,7 +20,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
20
20
|
|
21
21
|
<%= field_set_tag _("Disk"), :id => "server_volume_#{f.index}", :class => ('hide' unless server), :disabled => !server do %>
|
22
22
|
<%= f.hidden_field :volid if !new_vm %>
|
23
|
-
<%= select_f f, :storage, compute_resource.storages, :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
|
23
|
+
<%= select_f f, :storage, compute_resource.storages(node_id), :storage, :storage, { }, :label => _('Storage'), :label_size => "col-md-2" %>
|
24
24
|
<%= select_f f, :controller, proxmox_controllers_map, :id, :name, { }, :label => _('Controller'), :label_size => "col-md-2", :disabled => !new_volume, :onchange => 'controllerSelected(this)' %>
|
25
25
|
<%= 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)' %>
|
26
26
|
<%= select_f f, :cache, proxmox_caches_map, :id, :name, { include_blank: true }, :label => _('Cache'), :label_size => "col-md-2" %>
|
@@ -19,6 +19,7 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
19
19
|
<thead>
|
20
20
|
<tr>
|
21
21
|
<th><%= _('Name') -%></th>
|
22
|
+
<th><%= _('Node') -%></th>
|
22
23
|
<th><%= _('Type') -%></th>
|
23
24
|
<th><%= _('CPUs') -%></th>
|
24
25
|
<th><%= _('Memory') -%></th>
|
@@ -31,9 +32,10 @@ along with ForemanFogProxmox. If not, see <http://www.gnu.org/licenses/>. %>
|
|
31
32
|
<% @vms.each do |vm| -%>
|
32
33
|
<tr>
|
33
34
|
<td><%= link_to_if_authorized vm.name, hash_for_compute_resource_vm_path(:compute_resource_id => @compute_resource, :id => vm.identity) %></td>
|
35
|
+
<td><%= vm.node_id %></td>
|
34
36
|
<td><%= vm.type %></td>
|
35
|
-
<td><%= vm.
|
36
|
-
<td><%= (vm.maxmem
|
37
|
+
<td><%= vm.cpus %></td>
|
38
|
+
<td><%= Fog::Proxmox::DiskHelper.to_human_bytes(vm.maxmem) %></td>
|
37
39
|
<td> <span <%= vm_power_class(vm.ready?) %>> <%= vm_state(vm) %></span> </td>
|
38
40
|
<td><%= vm.uptime %></td>
|
39
41
|
<td>
|