]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/storage/LVMEdit.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / storage / LVMEdit.js
index 8b7607b3857c5f4adcdd4839e77bf435b32fc7d9..882b9eb7db36f0bec3823e5a836e92112e470e24 100644 (file)
@@ -1,37 +1,57 @@
 Ext.define('PVE.storage.VgSelector', {
-    extend: 'Ext.form.field.ComboBox',
+    extend: 'PVE.form.ComboBoxSetStoreNode',
     alias: 'widget.pveVgSelector',
     valueField: 'vg',
     displayField: 'vg',
     queryMode: 'local',
     editable: false,
-    initComponent : function() {
-       var me = this;
+
+    listConfig: {
+       columns: [
+           {
+               dataIndex: 'vg',
+               flex: 1,
+           },
+       ],
+       emptyText: PVE.Utils.renderNotFound('VGs'),
+    },
+
+    config: {
+       apiSuffix: '/scan/lvm',
+    },
+
+    showNodeSelector: true,
+
+    setNodeName: function(value) {
+       let me = this;
+       me.callParent([value]);
+       me.getStore().load();
+    },
+
+    initComponent: function() {
+       let me = this;
 
        if (!me.nodename) {
            me.nodename = 'localhost';
        }
 
-       var store = Ext.create('Ext.data.Store', {
+       let store = Ext.create('Ext.data.Store', {
            autoLoad: {}, // true,
-           fields: [ 'vg', 'size', 'free' ],
+           fields: ['vg', 'size', 'free'],
            proxy: {
-               type: 'pve',
-               url: '/api2/json/nodes/' + me.nodename + '/scan/lvm'
-           }
+               type: 'proxmox',
+               url: `${me.apiBaseUrl}${me.nodename}${me.apiSuffix}`,
+           },
        });
 
        store.sort('vg', 'ASC');
 
        Ext.apply(me, {
            store: store,
-           listConfig: {
-               loadingText: gettext('Scanning...')
-           }
        });
 
        me.callParent();
-    }
+    },
 });
 
 Ext.define('PVE.storage.BaseStorageSelector', {
@@ -44,17 +64,17 @@ Ext.define('PVE.storage.BaseStorageSelector', {
     value: '',
     valueField: 'storage',
     displayField: 'text',
-    initComponent : function() {
-       var me = this;
+    initComponent: function() {
+       let me = this;
 
-       var store = Ext.create('Ext.data.Store', {
+       let store = Ext.create('Ext.data.Store', {
            autoLoad: {
                addRecords: true,
                params: {
-                   type: 'iscsi'
-               }
+                   type: 'iscsi',
+               },
            },
-           fields: [ 'storage', 'type', 'content',
+           fields: ['storage', 'type', 'content',
                      {
                          name: 'text',
                          convert: function(value, record) {
@@ -63,12 +83,12 @@ Ext.define('PVE.storage.BaseStorageSelector', {
                              } else {
                                  return me.existingGroupsText;
                              }
-                         }
+                         },
                      }],
            proxy: {
-               type: 'pve',
-               url: '/api2/json/storage/'
-           }
+               type: 'proxmox',
+               url: '/api2/json/storage/',
+           },
        });
 
        store.loadData([{ storage: '' }], true);
@@ -76,193 +96,147 @@ Ext.define('PVE.storage.BaseStorageSelector', {
        store.sort('storage', 'ASC');
 
        Ext.apply(me, {
-           store: store
+           store: store,
        });
 
        me.callParent();
-    }
+    },
 });
 
-Ext.define('PVE.storage.LVMInputPanel', {
-    extend: 'PVE.panel.InputPanel',
-
-    onGetValues: function(values) {
-       var me = this;
-
-       if (me.create) {
-           values.type = 'lvm';
-       } else {
-           delete values.storage;
+Ext.define('PVE.storage.LunSelector', {
+    extend: 'PVE.form.FileSelector',
+    alias: 'widget.pveStorageLunSelector',
+
+    nodename: 'localhost',
+    storageContent: 'images',
+    allowBlank: false,
+
+    initComponent: function() {
+       let me = this;
+
+       if (!PVE.Utils.isStandaloneNode()) {
+           me.errorHeight = 140;
+           Ext.apply(me.listConfig ?? {}, {
+               tbar: {
+                   xtype: 'toolbar',
+                   items: [
+                       {
+                           xtype: "pveStorageScanNodeSelector",
+                           autoSelect: false,
+                           fieldLabel: gettext('Node to scan'),
+                           listeners: {
+                               change: (_field, value) => me.setNodename(value),
+                           },
+                       },
+                   ],
+               },
+               emptyText: me.listConfig?.emptyText ?? PVE.Utils.renderNotFound(gettext('Volume')),
+           });
        }
 
-       values.disable = values.enable ? 0 : 1;
-       delete values.enable;
-
-       return values;
+       me.callParent();
     },
 
-    initComponent : function() {
-       var me = this;
-
-       me.column1 = [
-           {
-               xtype: me.create ? 'textfield' : 'displayfield',
-               name: 'storage',
-               value: me.storageId || '',
-               fieldLabel: 'ID',
-               vtype: 'StorageId',
-               submitValue: !!me.create,
-               allowBlank: false
-           }
-       ];
+});
 
-       var vgnameField = Ext.createWidget(me.create ? 'textfield' : 'displayfield', {
+Ext.define('PVE.storage.LVMInputPanel', {
+    extend: 'PVE.panel.StorageBase',
+    mixins: ['Proxmox.Mixin.CBind'],
+
+    onlineHelp: 'storage_lvm',
+
+    column1: [
+       {
+           xtype: 'pveBaseStorageSelector',
+           name: 'basesel',
+           fieldLabel: gettext('Base storage'),
+           cbind: {
+               disabled: '{!isCreate}',
+               hidden: '{!isCreate}',
+           },
+           submitValue: false,
+           listeners: {
+               change: function(f, value) {
+                   let me = this;
+                   let vgField = me.up('inputpanel').lookup('volumeGroupSelector');
+                   let vgNameField = me.up('inputpanel').lookup('vgName');
+                   let baseField = me.up('inputpanel').lookup('lunSelector');
+
+                   vgField.setVisible(!value);
+                   vgField.setDisabled(!!value);
+
+                   baseField.setVisible(!!value);
+                   baseField.setDisabled(!value);
+                   baseField.setStorage(value);
+
+                   vgNameField.setVisible(!!value);
+                   vgNameField.setDisabled(!value);
+               },
+           },
+       },
+       {
+           xtype: 'pveStorageLunSelector',
+           name: 'base',
+           fieldLabel: gettext('Base volume'),
+           reference: 'lunSelector',
+           hidden: true,
+           disabled: true,
+       },
+       {
+           xtype: 'pveVgSelector',
            name: 'vgname',
-           hidden: !!me.create,
-           disabled: !!me.create,
-           value: '',
            fieldLabel: gettext('Volume group'),
-           allowBlank: false
-       });
-
-       if (me.create) {
-           var vgField = Ext.create('PVE.storage.VgSelector', {
-               name: 'vgname',
-               fieldLabel: gettext('Volume group'),
-               allowBlank: false
-           });
-
-           var baseField = Ext.createWidget('pveFileSelector', {
-               name: 'base',
-               hidden: true,
-               disabled: true,
-               nodename: 'localhost',
-               storageContent: 'images',
-               fieldLabel: gettext('Base volume'),
-               allowBlank: false
-           });
-
-           me.column1.push({
-               xtype: 'pveBaseStorageSelector',
-               name: 'basesel',
-               fieldLabel: gettext('Base storage'),
-               submitValue: false,
-               listeners: {
-                   change: function(f, value) {
-                       if (value) {
-                           vgnameField.setVisible(true);
-                           vgnameField.setDisabled(false);
-                           vgField.setVisible(false);
-                           vgField.setDisabled(true);
-                           baseField.setVisible(true);
-                           baseField.setDisabled(false);
-                       } else {
-                           vgnameField.setVisible(false);
-                           vgnameField.setDisabled(true);
-                           vgField.setVisible(true);
-                           vgField.setDisabled(false);
-                           baseField.setVisible(false);
-                           baseField.setDisabled(true);
-                       }
-                       baseField.setStorage(value);
-                   }
-               }
-           });
-
-           me.column1.push(baseField);
-
-           me.column1.push(vgField);
-       }
-
-       me.column1.push(vgnameField);
-
-       // here value is an array, 
-       // while before it was a string
-       /*jslint confusion: true*/
-       me.column1.push({
+           reference: 'volumeGroupSelector',
+           cbind: {
+               disabled: '{!isCreate}',
+               hidden: '{!isCreate}',
+           },
+           allowBlank: false,
+           listeners: {
+               nodechanged: function(value) {
+                   this.up('inputpanel').lookup('storageNodeRestriction').setValue(value);
+               },
+           },
+       },
+       {
+           name: 'vgname',
+           fieldLabel: gettext('Volume group'),
+           reference: 'vgName',
+           cbind: {
+               xtype: (get) => get('isCreate') ? 'textfield' : 'displayfield',
+               hidden: '{isCreate}',
+               disabled: '{isCreate}',
+           },
+           value: '',
+           allowBlank: false,
+       },
+       {
            xtype: 'pveContentTypeSelector',
            cts: ['images', 'rootdir'],
            fieldLabel: gettext('Content'),
            name: 'content',
            value: ['images', 'rootdir'],
            multiSelect: true,
-           allowBlank: false
-       });
-       /*jslint confusion: false*/
-
-       me.column2 = [
-           {
-               xtype: 'pveNodeSelector',
-               name: 'nodes',
-               fieldLabel: gettext('Nodes'),
-               emptyText: gettext('All') + ' (' +
-                   gettext('No restrictions') +')',
-               multiSelect: true,
-               autoSelect: false
+           allowBlank: false,
+       },
+    ],
+
+    column2: [
+       {
+           xtype: 'proxmoxcheckbox',
+           name: 'shared',
+           uncheckedValue: 0,
+           fieldLabel: gettext('Shared'),
+           autoEl: {
+               tag: 'div',
+               'data-qtip': gettext('Enable if the LVM is located on a shared LUN.'),
            },
-           {
-               xtype: 'pvecheckbox',
-               name: 'enable',
-               checked: true,
-               uncheckedValue: 0,
-               fieldLabel: gettext('Enable')
-           },
-           {
-               xtype: 'pvecheckbox',
-               name: 'shared',
-               uncheckedValue: 0,
-               fieldLabel: gettext('Shared')
-           }
-       ];
-
-       me.callParent();
-    }
-});
-
-Ext.define('PVE.storage.LVMEdit', {
-    extend: 'PVE.window.Edit',
-
-    initComponent : function() {
-       var me = this;
-
-       me.create = !me.storageId;
-
-       if (me.create) {
-            me.url = '/api2/extjs/storage';
-            me.method = 'POST';
-        } else {
-            me.url = '/api2/extjs/storage/' + me.storageId;
-            me.method = 'PUT';
-        }
-
-       var ipanel = Ext.create('PVE.storage.LVMInputPanel', {
-           create: me.create,
-           storageId: me.storageId
-       });
-
-       Ext.apply(me, {
-            subject: PVE.Utils.format_storage_type('lvm'),
-           isAdd: true,
-           items: [ ipanel ]
-       });
-
-       me.callParent();
-
-       if (!me.create) {
-           me.load({
-               success:  function(response, options) {
-                   var values = response.result.data;
-                   var ctypes = values.content || '';
-
-                   values.content = ctypes.split(',');
-
-                   if (values.nodes) {
-                       values.nodes = values.nodes.split(',');
-                   }
-                   values.enable = values.disable ? 0 : 1;
-                   ipanel.setValues(values);
-               }
-           });
-       }
-    }
+       },
+       {
+           xtype: 'proxmoxcheckbox',
+           name: 'saferemove',
+           uncheckedValue: 0,
+           fieldLabel: gettext('Wipe Removed Volumes'),
+       },
+    ],
 });