]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/lxc/DNS.js
ui CT Features: add checkbox for new "allow mknod device creation in CT"
[pve-manager.git] / www / manager6 / lxc / DNS.js
CommitLineData
93cc7b95 1Ext.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
62Ext.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 */
95Ext.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});