]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/storage/Base.js
api: add proxmox-firewall to versions pkg list
[pve-manager.git] / www / manager6 / storage / Base.js
CommitLineData
f28ec3e4
TL
1Ext.define('PVE.panel.StorageBase', {
2 extend: 'Proxmox.panel.InputPanel',
3 controller: 'storageEdit',
4
5 type: '',
6
7 onGetValues: function(values) {
b9e706fb 8 let me = this;
f28ec3e4
TL
9
10 if (me.isCreate) {
11 values.type = me.type;
12 } else {
13 delete values.storage;
14 }
15
16 values.disable = values.enable ? 0 : 1;
17 delete values.enable;
18
19 return values;
20 },
21
8058410f 22 initComponent: function() {
b9e706fb 23 let me = this;
f28ec3e4
TL
24
25 me.column1.unshift({
26 xtype: me.isCreate ? 'textfield' : 'displayfield',
27 name: 'storage',
28 value: me.storageId || '',
29 fieldLabel: 'ID',
30 vtype: 'StorageId',
f6710aac 31 allowBlank: false,
f28ec3e4
TL
32 });
33
e194ea7c 34 me.column2 = me.column2 || [];
f28ec3e4
TL
35 me.column2.unshift(
36 {
37 xtype: 'pveNodeSelector',
38 name: 'nodes',
14d9ecc4 39 reference: 'storageNodeRestriction',
f28ec3e4
TL
40 disabled: me.storageId === 'local',
41 fieldLabel: gettext('Nodes'),
42 emptyText: gettext('All') + ' (' + gettext('No restrictions') +')',
43 multiSelect: true,
f6710aac 44 autoSelect: false,
f28ec3e4
TL
45 },
46 {
47 xtype: 'proxmoxcheckbox',
48 name: 'enable',
49 checked: true,
50 uncheckedValue: 0,
f6710aac
TL
51 fieldLabel: gettext('Enable'),
52 },
f28ec3e4
TL
53 );
54
bb157f5d
LS
55 const qemuImgStorageTypes = ['dir', 'btrfs', 'nfs', 'cifs', 'glusterfs'];
56
57 if (qemuImgStorageTypes.includes(me.type)) {
58 const preallocSelector = {
59 xtype: 'pvePreallocationSelector',
60 name: 'preallocation',
61 fieldLabel: gettext('Preallocation'),
62 allowBlank: false,
e82d3583 63 deleteEmpty: !me.isCreate,
bb157f5d
LS
64 value: '__default__',
65 };
66
67 me.advancedColumn1 = me.advancedColumn1 || [];
68 me.advancedColumn2 = me.advancedColumn2 || [];
69 if (me.advancedColumn2.length < me.advancedColumn1.length) {
70 me.advancedColumn2.unshift(preallocSelector);
71 } else {
72 me.advancedColumn1.unshift(preallocSelector);
73 }
74 }
75
f28ec3e4 76 me.callParent();
f6710aac 77 },
f28ec3e4
TL
78});
79
80Ext.define('PVE.storage.BaseEdit', {
81 extend: 'Proxmox.window.Edit',
82
71dec88f
TL
83 apiCallDone: function(success, response, options) {
84 let me = this;
85 if (typeof me.ipanel.apiCallDone === "function") {
86 me.ipanel.apiCallDone(success, response, options);
87 }
88 },
89
8058410f 90 initComponent: function() {
b9e706fb 91 let me = this;
f28ec3e4
TL
92
93 me.isCreate = !me.storageId;
94
95 if (me.isCreate) {
f3c1eac7
TL
96 me.url = '/api2/extjs/storage';
97 me.method = 'POST';
98 } else {
99 me.url = '/api2/extjs/storage/' + me.storageId;
100 me.method = 'PUT';
101 }
f28ec3e4 102
71dec88f 103 me.ipanel = Ext.create(me.paneltype, {
232415d9 104 title: gettext('General'),
f28ec3e4
TL
105 type: me.type,
106 isCreate: me.isCreate,
f6710aac 107 storageId: me.storageId,
f28ec3e4
TL
108 });
109
110 Ext.apply(me, {
111 subject: PVE.Utils.format_storage_type(me.type),
112 isAdd: true,
232415d9
TL
113 bodyPadding: 0,
114 items: {
115 xtype: 'tabpanel',
116 region: 'center',
117 layout: 'fit',
118 bodyPadding: 10,
119 items: [
120 me.ipanel,
017889f1 121 {
57513f76 122 xtype: 'pveBackupJobPrunePanel',
017889f1 123 title: gettext('Backup Retention'),
4981660f 124 hasMaxProtected: true,
017889f1 125 isCreate: me.isCreate,
9c4c5797
FE
126 keepAllDefaultForCreate: true,
127 showPBSHint: me.ipanel.isPBS,
128 fallbackHintHtml: gettext('Without any keep option, the node\'s vzdump.conf or `keep-all` is used as fallback for backup jobs'),
017889f1 129 },
232415d9
TL
130 ],
131 },
f28ec3e4
TL
132 });
133
d994d2a7
TL
134 if (me.ipanel.extraTabs) {
135 me.ipanel.extraTabs.forEach(panel => {
136 panel.isCreate = me.isCreate;
137 me.items.items.push(panel);
138 });
139 }
140
f28ec3e4
TL
141 me.callParent();
142
06c8315d 143 if (!me.canDoBackups) {
017889f1
TL
144 // cannot mask now, not fully rendered until activated
145 me.down('pmxPruneInputPanel').needMask = true;
146 }
147
f28ec3e4
TL
148 if (!me.isCreate) {
149 me.load({
8058410f 150 success: function(response, options) {
b9e706fb
SH
151 let values = response.result.data;
152 let ctypes = values.content || '';
f28ec3e4
TL
153
154 values.content = ctypes.split(',');
155
156 if (values.nodes) {
157 values.nodes = values.nodes.split(',');
158 }
159 values.enable = values.disable ? 0 : 1;
017889f1
TL
160 if (values['prune-backups']) {
161 let retention = PVE.Parser.parsePropertyString(values['prune-backups']);
162 delete values['prune-backups'];
163 Object.assign(values, retention);
164 } else if (values.maxfiles !== undefined) {
165 if (values.maxfiles > 0) {
166 values['keep-last'] = values.maxfiles;
167 }
168 delete values.maxfiles;
169 }
f28ec3e4 170
232415d9
TL
171 me.query('inputpanel').forEach(panel => {
172 panel.setValues(values);
173 });
f6710aac 174 },
f28ec3e4
TL
175 });
176 }
f6710aac 177 },
f28ec3e4 178});