Ext.define('PVE.storage.ZFSInputPanel', {
- extend: 'PVE.panel.InputPanel',
+ extend: 'PVE.panel.StorageBase',
+
+ viewModel: {
+ parent: null,
+ data: {
+ isLIO: false,
+ isComstar: true,
+ hasWriteCacheOption: true,
+ },
+ },
+
+ controller: {
+ xclass: 'Ext.app.ViewController',
+ control: {
+ 'field[name=iscsiprovider]': {
+ change: 'changeISCSIProvider',
+ },
+ },
+ changeISCSIProvider: function(f, newVal, oldVal) {
+ var vm = this.getViewModel();
+ vm.set('isLIO', newVal === 'LIO');
+ vm.set('isComstar', newVal === 'comstar');
+ vm.set('hasWriteCacheOption', newVal === 'comstar' || newVal === 'istgt');
+ },
+ },
onGetValues: function(values) {
var me = this;
- if (me.create) {
- values.type = 'zfs';
+ if (me.isCreate) {
values.content = 'images';
- } else {
- delete values.storage;
}
- values.disable = values.enable ? 0 : 1;
- delete values.enable;
+ values.nowritecache = values.writecache ? 0 : 1;
+ delete values.writecache;
- return values;
+ return me.callParent([values]);
},
- initComponent : function() {
+ setValues: function(values) {
+ values.writecache = values.nowritecache ? 0 : 1;
+ this.callParent([values]);
+ },
+
+ initComponent: function() {
var me = this;
me.column1 = [
{
- xtype: me.create ? 'textfield' : 'displayfield',
- name: 'storage',
- height: 22, // hack: set same height as text fields
- value: me.storageId || '',
- fieldLabel: 'ID',
- vtype: 'StorageId',
- allowBlank: false
- },
- {
- xtype: me.create ? 'textfield' : 'displayfield',
+ xtype: me.isCreate ? 'textfield' : 'displayfield',
name: 'portal',
- height: 22, // hack: set same height as text fields
value: '',
fieldLabel: gettext('Portal'),
- allowBlank: false
+ allowBlank: false,
},
{
- xtype: me.create ? 'textfield' : 'displayfield',
+ xtype: me.isCreate ? 'textfield' : 'displayfield',
name: 'pool',
- height: 22, // hack: set same height as text fields
value: '',
fieldLabel: gettext('Pool'),
- allowBlank: false
+ allowBlank: false,
},
{
- xtype: me.create ? 'textfield' : 'displayfield',
+ xtype: me.isCreate ? 'textfield' : 'displayfield',
name: 'blocksize',
- height: 22, // hack: set same height as text fields
value: '4k',
fieldLabel: gettext('Block Size'),
- allowBlank: false
+ allowBlank: false,
},
{
- xtype: me.create ? 'textfield' : 'displayfield',
+ xtype: me.isCreate ? 'textfield' : 'displayfield',
name: 'target',
- height: 22, // hack: set same height as text fields
value: '',
fieldLabel: gettext('Target'),
- allowBlank: false
+ allowBlank: false,
},
{
- xtype: me.create ? 'textfield' : 'displayfield',
+ xtype: me.isCreate ? 'textfield' : 'displayfield',
name: 'comstar_tg',
- height: 22, // hack: set same height as text fields
value: '',
fieldLabel: gettext('Target group'),
- allowBlank: true
- }
+ bind: me.isCreate ? { disabled: '{!isComstar}' } : { hidden: '{!isComstar}' },
+ allowBlank: true,
+ },
];
me.column2 = [
{
- xtype: 'pvecheckbox',
- name: 'enable',
- checked: true,
- uncheckedValue: 0,
- fieldLabel: gettext('Enable')
- },
- {
- xtype: me.create ? 'pveiScsiProviderSelector' : 'displayfield',
+ xtype: me.isCreate ? 'pveiScsiProviderSelector' : 'displayfield',
name: 'iscsiprovider',
- height: 22, // hack: set same height as text fields
value: 'comstar',
fieldLabel: gettext('iSCSI Provider'),
- allowBlank: false
+ allowBlank: false,
},
{
- xtype: 'pvecheckbox',
+ xtype: 'proxmoxcheckbox',
name: 'sparse',
checked: false,
uncheckedValue: 0,
- fieldLabel: gettext('Thin provision')
+ fieldLabel: gettext('Thin provision'),
},
{
- xtype: 'pvecheckbox',
- name: 'nowritecache',
+ xtype: 'proxmoxcheckbox',
+ name: 'writecache',
checked: true,
+ bind: me.isCreate ? { disabled: '{!hasWriteCacheOption}' } : { hidden: '{!hasWriteCacheOption}' },
uncheckedValue: 0,
- fieldLabel: gettext('Write cache')
+ fieldLabel: gettext('Write cache'),
},
{
- xtype: me.create ? 'textfield' : 'displayfield',
+ xtype: me.isCreate ? 'textfield' : 'displayfield',
name: 'comstar_hg',
- height: 22, // hack: set same height as text fields
value: '',
+ bind: me.isCreate ? { disabled: '{!isComstar}' } : { hidden: '{!isComstar}' },
fieldLabel: gettext('Host group'),
- allowBlank: true
- }
+ allowBlank: true,
+ },
+ {
+ xtype: me.isCreate ? 'textfield' : 'displayfield',
+ name: 'lio_tpg',
+ value: '',
+ bind: me.isCreate ? { disabled: '{!isLIO}' } : { hidden: '{!isLIO}' },
+ allowBlank: false,
+ fieldLabel: gettext('Target portal group'),
+ },
];
- if (me.create || me.storageId !== 'local') {
- me.column2.unshift({
- xtype: 'PVE.form.NodeSelector',
- name: 'nodes',
- fieldLabel: gettext('Nodes'),
- emptyText: gettext('All') + ' (' +
- gettext('No restrictions') +')',
- multiSelect: true,
- autoSelect: false
- });
- }
-
me.callParent();
- }
-});
-
-Ext.define('PVE.storage.ZFSEdit', {
- 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.ZFSInputPanel', {
- create: me.create,
- storageId: me.storageId
- });
-
- Ext.apply(me, {
- subject: 'ZFS Storage',
- isAdd: true,
- items: [ ipanel ]
- });
-
- me.callParent();
-
- if (!me.create) {
- me.load({
- success: function(response, options) {
- var values = response.result.data;
- if (values.nodes) {
- values.nodes = values.nodes.split(',');
- }
- values.enable = values.disable ? 0 : 1;
- ipanel.setValues(values);
- }
- });
- }
- }
+ },
});