]>
Commit | Line | Data |
---|---|---|
93cc7b95 | 1 | Ext.define('PVE.lxc.DNSInputPanel', { |
ef4ef788 | 2 | extend: 'Proxmox.panel.InputPanel', |
93cc7b95 DM |
3 | alias: 'widget.pveLxcDNSInputPanel', |
4 | ||
5 | insideWizard: false, | |
6 | ||
7 | onGetValues: function(values) { | |
8 | var me = this; | |
9 | ||
e31690fa DC |
10 | var deletes = []; |
11 | if (!values.searchdomain && !me.insideWizard) { | |
12 | deletes.push('searchdomain'); | |
93cc7b95 | 13 | } |
93cc7b95 | 14 | |
e31690fa | 15 | if (values.nameserver) { |
f1374bff | 16 | let list = values.nameserver.split(/[ ,;]+/); |
93cc7b95 | 17 | values.nameserver = list.join(' '); |
8058410f | 18 | } else if (!me.insideWizard) { |
e31690fa | 19 | deletes.push('nameserver'); |
93cc7b95 | 20 | } |
e31690fa DC |
21 | |
22 | if (deletes.length) { | |
399ffa76 | 23 | values.delete = deletes.join(','); |
e31690fa DC |
24 | } |
25 | ||
93cc7b95 DM |
26 | return values; |
27 | }, | |
28 | ||
8058410f | 29 | initComponent: function() { |
93cc7b95 DM |
30 | var me = this; |
31 | ||
32 | var items = [ | |
33 | { | |
dbed4c1c | 34 | xtype: 'proxmoxtextfield', |
93cc7b95 DM |
35 | name: 'searchdomain', |
36 | skipEmptyText: true, | |
37 | fieldLabel: gettext('DNS domain'), | |
38 | emptyText: gettext('use host settings'), | |
f6710aac | 39 | allowBlank: true, |
93cc7b95 DM |
40 | }, |
41 | { | |
dbed4c1c | 42 | xtype: 'proxmoxtextfield', |
e31690fa | 43 | fieldLabel: gettext('DNS servers'), |
5865b597 | 44 | vtype: 'IP64AddressWithSuffixList', |
93cc7b95 | 45 | allowBlank: true, |
e31690fa DC |
46 | emptyText: gettext('use host settings'), |
47 | name: 'nameserver', | |
f6710aac TL |
48 | itemId: 'nameserver', |
49 | }, | |
93cc7b95 DM |
50 | ]; |
51 | ||
52 | if (me.insideWizard) { | |
53 | me.column1 = items; | |
54 | } else { | |
55 | me.items = items; | |
56 | } | |
57 | ||
58 | me.callParent(); | |
f6710aac | 59 | }, |
93cc7b95 DM |
60 | }); |
61 | ||
62 | Ext.define('PVE.lxc.DNSEdit', { | |
9fccc702 | 63 | extend: 'Proxmox.window.Edit', |
93cc7b95 | 64 | |
8058410f | 65 | initComponent: function() { |
93cc7b95 DM |
66 | var me = this; |
67 | ||
68 | var ipanel = Ext.create('PVE.lxc.DNSInputPanel'); | |
69 | ||
70 | Ext.apply(me, { | |
71 | subject: gettext('Resources'), | |
8058410f | 72 | items: [ipanel], |
93cc7b95 DM |
73 | }); |
74 | ||
75 | me.callParent(); | |
76 | ||
d5e771ce | 77 | if (!me.isCreate) { |
93cc7b95 DM |
78 | me.load({ |
79 | success: function(response, options) { | |
80 | var values = response.result.data; | |
81 | ||
82 | if (values.nameserver) { | |
83 | values.nameserver.replace(/[,;]/, ' '); | |
84 | values.nameserver.replace(/^\s+/, ''); | |
93cc7b95 DM |
85 | } |
86 | ||
87 | ipanel.setValues(values); | |
f6710aac | 88 | }, |
93cc7b95 DM |
89 | }); |
90 | } | |
f6710aac | 91 | }, |
93cc7b95 DM |
92 | }); |
93 | ||
93cc7b95 | 94 | Ext.define('PVE.lxc.DNS', { |
9fd8d73e | 95 | extend: 'Proxmox.grid.PendingObjectGrid', |
93cc7b95 DM |
96 | alias: ['widget.pveLxcDNS'], |
97 | ||
ba93a9c6 DC |
98 | onlineHelp: 'pct_container_network', |
99 | ||
8058410f | 100 | initComponent: function() { |
93cc7b95 | 101 | var me = this; |
93cc7b95 DM |
102 | |
103 | var nodename = me.pveSelNode.data.node; | |
104 | if (!nodename) { | |
105 | throw "no node name specified"; | |
106 | } | |
107 | ||
108 | var vmid = me.pveSelNode.data.vmid; | |
109 | if (!vmid) { | |
110 | throw "no VM ID specified"; | |
111 | } | |
112 | ||
113 | var caps = Ext.state.Manager.get('GuiCap'); | |
114 | ||
115 | var rows = { | |
116 | hostname: { | |
117 | required: true, | |
118 | defaultValue: me.pveSelNode.data.name, | |
119 | header: gettext('Hostname'), | |
120 | editor: caps.vms['VM.Config.Network'] ? { | |
9fccc702 | 121 | xtype: 'proxmoxWindowEdit', |
93cc7b95 DM |
122 | subject: gettext('Hostname'), |
123 | items: { | |
6b702514 | 124 | xtype: 'inputpanel', |
8058410f | 125 | items: { |
6b702514 DC |
126 | fieldLabel: gettext('Hostname'), |
127 | xtype: 'textfield', | |
128 | name: 'hostname', | |
129 | vtype: 'DnsName', | |
b6571655 | 130 | allowBlank: true, |
f6710aac | 131 | emptyText: 'CT' + vmid.toString(), |
6b702514 DC |
132 | }, |
133 | onGetValues: function(values) { | |
134 | var params = values; | |
135 | if (values.hostname === undefined || | |
136 | values.hostname === null || | |
137 | values.hostname === '') { | |
8058410f | 138 | params = { hostname: 'CT'+vmid.toString() }; |
6b702514 DC |
139 | } |
140 | return params; | |
f6710aac TL |
141 | }, |
142 | }, | |
143 | } : undefined, | |
93cc7b95 DM |
144 | }, |
145 | searchdomain: { | |
146 | header: gettext('DNS domain'), | |
147 | defaultValue: '', | |
148 | editor: caps.vms['VM.Config.Network'] ? 'PVE.lxc.DNSEdit' : undefined, | |
149 | renderer: function(value) { | |
e31690fa | 150 | return value || gettext('use host settings'); |
f6710aac | 151 | }, |
93cc7b95 DM |
152 | }, |
153 | nameserver: { | |
154 | header: gettext('DNS server'), | |
155 | defaultValue: '', | |
156 | editor: caps.vms['VM.Config.Network'] ? 'PVE.lxc.DNSEdit' : undefined, | |
157 | renderer: function(value) { | |
e31690fa | 158 | return value || gettext('use host settings'); |
f6710aac TL |
159 | }, |
160 | }, | |
93cc7b95 DM |
161 | }; |
162 | ||
163 | var baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config'; | |
164 | ||
165 | var reload = function() { | |
166 | me.rstore.load(); | |
167 | }; | |
168 | ||
169 | var sm = Ext.create('Ext.selection.RowModel', {}); | |
170 | ||
171 | var run_editor = function() { | |
172 | var rec = sm.getSelection()[0]; | |
173 | if (!rec) { | |
174 | return; | |
175 | } | |
176 | ||
177 | var rowdef = rows[rec.data.key]; | |
178 | if (!rowdef.editor) { | |
179 | return; | |
180 | } | |
181 | ||
182 | var win; | |
183 | if (Ext.isString(rowdef.editor)) { | |
184 | win = Ext.create(rowdef.editor, { | |
185 | pveSelNode: me.pveSelNode, | |
186 | confid: rec.data.key, | |
f6710aac | 187 | url: '/api2/extjs/nodes/' + nodename + '/lxc/' + vmid + '/config', |
93cc7b95 DM |
188 | }); |
189 | } else { | |
190 | var config = Ext.apply({ | |
191 | pveSelNode: me.pveSelNode, | |
192 | confid: rec.data.key, | |
f6710aac | 193 | url: '/api2/extjs/nodes/' + nodename + '/lxc/' + vmid + '/config', |
93cc7b95 DM |
194 | }, rowdef.editor); |
195 | win = Ext.createWidget(rowdef.editor.xtype, config); | |
6b702514 | 196 | win.load(); |
93cc7b95 DM |
197 | } |
198 | //win.load(); | |
199 | win.show(); | |
200 | win.on('destroy', reload); | |
201 | }; | |
202 | ||
5720fafa | 203 | var edit_btn = new Proxmox.button.Button({ |
93cc7b95 DM |
204 | text: gettext('Edit'), |
205 | disabled: true, | |
206 | selModel: sm, | |
207 | enableFn: function(rec) { | |
208 | var rowdef = rows[rec.data.key]; | |
209 | return !!rowdef.editor; | |
210 | }, | |
f6710aac | 211 | handler: run_editor, |
93cc7b95 DM |
212 | }); |
213 | ||
417f904f | 214 | var revert_btn = new PVE.button.PendingRevert(); |
273b5ce3 | 215 | |
93cc7b95 | 216 | var set_button_status = function() { |
55ee6ba1 DJ |
217 | let button_sm = me.getSelectionModel(); |
218 | let rec = button_sm.getSelection()[0]; | |
93cc7b95 DM |
219 | |
220 | if (!rec) { | |
221 | edit_btn.disable(); | |
222 | return; | |
223 | } | |
b8d53fbe TL |
224 | let key = rec.data.key; |
225 | ||
226 | let rowdef = rows[key]; | |
93cc7b95 | 227 | edit_btn.setDisabled(!rowdef.editor); |
b8d53fbe | 228 | |
399ffa76 | 229 | let pending = rec.data.delete || me.hasPendingChanges(key); |
273b5ce3 | 230 | revert_btn.setDisabled(!pending); |
93cc7b95 DM |
231 | }; |
232 | ||
f7993618 | 233 | Ext.apply(me, { |
9fd8d73e | 234 | url: "/api2/json/nodes/" + nodename + "/lxc/" + vmid + "/pending", |
93cc7b95 DM |
235 | selModel: sm, |
236 | cwidth1: 150, | |
273b5ce3 | 237 | interval: 5000, |
b08ae044 | 238 | run_editor: run_editor, |
8058410f | 239 | tbar: [edit_btn, revert_btn], |
93cc7b95 | 240 | rows: rows, |
9fd8d73e | 241 | editorConfig: { |
f6710aac | 242 | url: "/api2/extjs/" + baseurl, |
9fd8d73e | 243 | }, |
93cc7b95 DM |
244 | listeners: { |
245 | itemdblclick: run_editor, | |
4b488565 | 246 | selectionchange: set_button_status, |
f6710aac TL |
247 | activate: reload, |
248 | }, | |
93cc7b95 DM |
249 | }); |
250 | ||
251 | me.callParent(); | |
273b5ce3 OB |
252 | |
253 | me.on('activate', me.rstore.startUpdate); | |
254 | me.on('destroy', me.rstore.stopUpdate); | |
255 | me.on('deactivate', me.rstore.stopUpdate); | |
256 | ||
257 | me.mon(me.getStore(), 'datachanged', function() { | |
258 | set_button_status(); | |
259 | }); | |
f6710aac | 260 | }, |
93cc7b95 | 261 | }); |