]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/lxc/Options.js
ui: lxc resources: support font awesome icons directly
[pve-manager.git] / www / manager6 / lxc / Options.js
CommitLineData
d6cae26a 1Ext.define('PVE.lxc.Options', {
9fd8d73e 2 extend: 'Proxmox.grid.PendingObjectGrid',
d6cae26a
DM
3 alias: ['widget.pveLxcOptions'],
4
ba93a9c6
DC
5 onlineHelp: 'pct_options',
6
8058410f 7 initComponent: function() {
d6cae26a 8 var me = this;
d6cae26a
DM
9
10 var nodename = me.pveSelNode.data.node;
11 if (!nodename) {
12 throw "no node name specified";
13 }
14
15 var vmid = me.pveSelNode.data.vmid;
16 if (!vmid) {
17 throw "no VM ID specified";
18 }
19
20 var caps = Ext.state.Manager.get('GuiCap');
21
22 var rows = {
23 onboot: {
24 header: gettext('Start at boot'),
25 defaultValue: '',
e7ade592 26 renderer: Proxmox.Utils.format_boolean,
d6cae26a 27 editor: caps.vms['VM.Config.Options'] ? {
9fccc702 28 xtype: 'proxmoxWindowEdit',
d6cae26a
DM
29 subject: gettext('Start at boot'),
30 items: {
896c0d50 31 xtype: 'proxmoxcheckbox',
d6cae26a
DM
32 name: 'onboot',
33 uncheckedValue: 0,
34 defaultValue: 0,
f6710aac
TL
35 fieldLabel: gettext('Start at boot'),
36 },
37 } : undefined,
d6cae26a
DM
38 },
39 startup: {
40 header: gettext('Start/Shutdown order'),
41 defaultValue: '',
42 renderer: PVE.Utils.render_kvm_startup,
8058410f
TL
43 editor: caps.vms['VM.Config.Options'] && caps.nodes['Sys.Modify']
44 ? {
6eb2141a 45 xtype: 'pveWindowStartupEdit',
f6710aac
TL
46 onlineHelp: 'pct_startup_and_shutdown',
47 } : undefined,
d6cae26a
DM
48 },
49 ostype: {
50 header: gettext('OS Type'),
f6710aac 51 defaultValue: Proxmox.Utils.unknownText,
d6cae26a
DM
52 },
53 arch: {
54 header: gettext('Architecture'),
f6710aac 55 defaultValue: Proxmox.Utils.unknownText,
d6cae26a
DM
56 },
57 console: {
b9628aa5 58 header: '/dev/console',
d6cae26a 59 defaultValue: 1,
e7ade592 60 renderer: Proxmox.Utils.format_enabled_toggle,
d6cae26a 61 editor: caps.vms['VM.Config.Options'] ? {
9fccc702 62 xtype: 'proxmoxWindowEdit',
0a3cf3d4 63 subject: '/dev/console',
d6cae26a 64 items: {
896c0d50 65 xtype: 'proxmoxcheckbox',
d6cae26a
DM
66 name: 'console',
67 uncheckedValue: 0,
68 defaultValue: 1,
69 deleteDefaultValue: true,
70 checked: true,
f6710aac
TL
71 fieldLabel: '/dev/console',
72 },
73 } : undefined,
d6cae26a
DM
74 },
75 tty: {
76 header: gettext('TTY count'),
77 defaultValue: 2,
78 editor: caps.vms['VM.Config.Options'] ? {
9fccc702 79 xtype: 'proxmoxWindowEdit',
d6cae26a
DM
80 subject: gettext('TTY count'),
81 items: {
bf96f60d 82 xtype: 'proxmoxintegerfield',
d6cae26a 83 name: 'tty',
d6cae26a
DM
84 minValue: 0,
85 maxValue: 6,
86 value: 2,
87 fieldLabel: gettext('TTY count'),
bf96f60d 88 emptyText: gettext('Default'),
f6710aac
TL
89 deleteEmpty: true,
90 },
91 } : undefined,
d6cae26a
DM
92 },
93 cmode: {
94 header: gettext('Console mode'),
95 defaultValue: 'tty',
96 editor: caps.vms['VM.Config.Options'] ? {
9fccc702 97 xtype: 'proxmoxWindowEdit',
d6cae26a
DM
98 subject: gettext('Console mode'),
99 items: {
09cacce7 100 xtype: 'proxmoxKVComboBox',
d6cae26a
DM
101 name: 'cmode',
102 deleteEmpty: true,
c9d05dc8
EK
103 value: '__default__',
104 comboItems: [
e7ade592 105 ['__default__', Proxmox.Utils.defaultText + " (tty)"],
d6cae26a
DM
106 ['tty', "/dev/tty[X]"],
107 ['console', "/dev/console"],
f6710aac 108 ['shell', "shell"],
d6cae26a 109 ],
f6710aac
TL
110 fieldLabel: gettext('Console mode'),
111 },
112 } : undefined,
d6cae26a 113 },
a979c78d
EK
114 protection: {
115 header: gettext('Protection'),
116 defaultValue: false,
e7ade592 117 renderer: Proxmox.Utils.format_boolean,
a979c78d 118 editor: caps.vms['VM.Config.Options'] ? {
9fccc702 119 xtype: 'proxmoxWindowEdit',
a979c78d
EK
120 subject: gettext('Protection'),
121 items: {
896c0d50 122 xtype: 'proxmoxcheckbox',
a979c78d
EK
123 name: 'protection',
124 uncheckedValue: 0,
125 defaultValue: 0,
126 deleteDefaultValue: true,
f6710aac
TL
127 fieldLabel: gettext('Enabled'),
128 },
129 } : undefined,
a97bc800
EK
130 },
131 unprivileged: {
132 header: gettext('Unprivileged container'),
e7ade592 133 renderer: Proxmox.Utils.format_boolean,
f6710aac 134 defaultValue: 0,
a88fcb7d
DC
135 },
136 features: {
137 header: gettext('Features'),
138 defaultValue: Proxmox.Utils.noneText,
2bc71fd9 139 editor: 'PVE.lxc.FeaturesEdit',
95f2a8a2
DC
140 },
141 hookscript: {
f6710aac
TL
142 header: gettext('Hookscript'),
143 },
d6cae26a
DM
144 };
145
146 var baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
147
d6cae26a
DM
148 var sm = Ext.create('Ext.selection.RowModel', {});
149
5720fafa 150 var edit_btn = new Proxmox.button.Button({
d6cae26a
DM
151 text: gettext('Edit'),
152 disabled: true,
153 selModel: sm,
154 enableFn: function(rec) {
155 var rowdef = rows[rec.data.key];
156 return !!rowdef.editor;
157 },
f6710aac 158 handler: function() { me.run_editor(); },
d6cae26a
DM
159 });
160
417f904f 161 var revert_btn = new PVE.button.PendingRevert();
273b5ce3
OB
162
163 var set_button_status = function() {
55ee6ba1
DJ
164 let button_sm = me.getSelectionModel();
165 let rec = button_sm.getSelection()[0];
273b5ce3
OB
166
167 if (!rec) {
168 edit_btn.disable();
169 return;
170 }
171
172 var key = rec.data.key;
399ffa76 173 var pending = rec.data.delete || me.hasPendingChanges(key);
273b5ce3
OB
174 var rowdef = rows[key];
175
2bc71fd9
FE
176 if (key === 'features') {
177 let unprivileged = me.getStore().getById('unprivileged').data.value;
178 let root = Proxmox.UserName === 'root@pam';
179 let vmalloc = caps.vms['VM.Allocate'];
180 edit_btn.setDisabled(!(root || (vmalloc && unprivileged)));
181 } else {
182 edit_btn.setDisabled(!rowdef.editor);
183 }
184
273b5ce3
OB
185 revert_btn.setDisabled(!pending);
186 };
187
188
f7993618 189 Ext.apply(me, {
9fd8d73e 190 url: "/api2/json/nodes/" + nodename + "/lxc/" + vmid + "/pending",
d6cae26a 191 selModel: sm,
04444337 192 interval: 5000,
8058410f 193 tbar: [edit_btn, revert_btn],
d6cae26a 194 rows: rows,
04444337 195 editorConfig: {
f6710aac 196 url: '/api2/extjs/' + baseurl,
04444337 197 },
d6cae26a 198 listeners: {
273b5ce3 199 itemdblclick: me.run_editor,
f6710aac
TL
200 selectionchange: set_button_status,
201 },
d6cae26a
DM
202 });
203
204 me.callParent();
04444337
TL
205
206 me.on('activate', me.rstore.startUpdate);
207 me.on('destroy', me.rstore.stopUpdate);
208 me.on('deactivate', me.rstore.stopUpdate);
209
273b5ce3
OB
210 me.mon(me.getStore(), 'datachanged', function() {
211 set_button_status();
212 });
f6710aac 213 },
d6cae26a
DM
214});
215