foreman_fog_proxmox 0.9.4 → 0.10.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/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>
|