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