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