diff --git a/pve-manager/js/pvemanagerlib-6.3-6_1.js.patch b/pve-manager/js/pvemanagerlib-6.3-6_1.js.patch new file mode 100644 index 0000000..12dc4a5 --- /dev/null +++ b/pve-manager/js/pvemanagerlib-6.3-6_1.js.patch @@ -0,0 +1,189 @@ +--- pvemanagerlib.js.orig 2021-03-09 02:22:47.000000000 -0500 ++++ pvemanagerlib.js 2021-03-20 11:52:39.694828636 -0400 +@@ -7849,6 +7849,7 @@ + alias: ['widget.pveiScsiProviderSelector'], + comboItems: [ + ['comstar', 'Comstar'], ++ ['freenas', 'FreeNAS-API'], + ['istgt', 'istgt'], + ['iet', 'IET'], + ['LIO', 'LIO'], +@@ -46874,6 +46875,7 @@ + data: { + isLIO: false, + isComstar: true, ++ isFreeNAS: false, + hasWriteCacheOption: true, + }, + }, +@@ -46886,10 +46888,26 @@ + }, + }, + changeISCSIProvider: function(f, newVal, oldVal) { ++ var me = this; + var vm = this.getViewModel(); + vm.set('isLIO', newVal === 'LIO'); + vm.set('isComstar', newVal === 'comstar'); +- vm.set('hasWriteCacheOption', newVal === 'comstar' || newVal === 'istgt'); ++ vm.set('isFreeNAS', newVal === 'freenas'); ++ vm.set('hasWriteCacheOption', newVal === 'comstar' || newVal === 'freenas' || newVal === 'istgt'); ++ if (newVal !== 'freenas') { ++ me.lookupReference('freenas_use_ssl_field').setValue(false); ++ me.lookupReference('freenas_apiv4_host_field').setValue(''); ++ me.lookupReference('freenas_user_field').setValue(''); ++ me.lookupReference('freenas_user_field').allowBlank = true; ++ me.lookupReference('freenas_password_field').setValue(''); ++ me.lookupReference('freenas_password_field').allowBlank = true; ++ me.lookupReference('freenas_confirmpw_field').setValue(''); ++ me.lookupReference('freenas_confirmpw_field').allowBlank = true; ++ } else { ++ me.lookupReference('freenas_user_field').allowBlank = false; ++ me.lookupReference('freenas_password_field').allowBlank = false; ++ me.lookupReference('freenas_confirmpw_field').allowBlank = false; ++ } + }, + }, + +@@ -46907,6 +46925,7 @@ + }, + + setValues: function diff(values) { ++ values.freenas_confirmpw = values.freenas_password; + values.writecache = values.nowritecache ? 0 : 1; + this.callParent([values]); + }, +@@ -46923,7 +46942,7 @@ + allowBlank: false, + }, + { +- xtype: me.isCreate ? 'textfield' : 'displayfield', ++ xtype: 'textfield', + name: 'pool', + value: '', + fieldLabel: gettext('Pool'), +@@ -46933,11 +46952,11 @@ + xtype: me.isCreate ? 'textfield' : 'displayfield', + name: 'blocksize', + value: '4k', +- fieldLabel: gettext('Block Size'), ++ fieldLabel: gettext('ZFS Block Size'), + allowBlank: false, + }, + { +- xtype: me.isCreate ? 'textfield' : 'displayfield', ++ xtype: 'textfield', + name: 'target', + value: '', + fieldLabel: gettext('Target'), +@@ -46948,9 +46967,34 @@ + name: 'comstar_tg', + value: '', + fieldLabel: gettext('Target group'), +- bind: me.isCreate ? { disabled: '{!isComstar}' } : { hidden: '{!isComstar}' }, ++ bind: { ++ hidden: '{!isComstar}' ++ }, + allowBlank: true, + }, ++ { ++ xtype: 'proxmoxcheckbox', ++ name: 'freenas_use_ssl', ++ reference: 'freenas_use_ssl_field', ++ inputId: 'freenas_use_ssl_field', ++ checked: false, ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ uncheckedValue: 0, ++ fieldLabel: gettext('API use SSL'), ++ }, ++ { ++ xtype: 'textfield', ++ name: 'freenas_user', ++ reference: 'freenas_user_field', ++ inputId: 'freenas_user_field', ++ value: '', ++ fieldLabel: gettext('API Username'), ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ }, + ]; + + me.column2 = [ +@@ -46980,7 +47024,9 @@ + xtype: me.isCreate ? 'textfield' : 'displayfield', + name: 'comstar_hg', + value: '', +- bind: me.isCreate ? { disabled: '{!isComstar}' } : { hidden: '{!isComstar}' }, ++ bind: { ++ hidden: '{!isComstar}' ++ }, + fieldLabel: gettext('Host group'), + allowBlank: true, + }, +@@ -46988,9 +47034,62 @@ + xtype: me.isCreate ? 'textfield' : 'displayfield', + name: 'lio_tpg', + value: '', +- bind: me.isCreate ? { disabled: '{!isLIO}' } : { hidden: '{!isLIO}' }, +- allowBlank: false, ++ bind: { ++ hidden: '{!isLIO}' ++ }, + fieldLabel: gettext('Target portal group'), ++ allowBlank: true ++ }, ++ { ++ xtype: 'proxmoxtextfield', ++ name: 'freenas_apiv4_host', ++ reference: 'freenas_apiv4_host_field', ++ value: '', ++ editable: true, ++ emptyText: Proxmox.Utils.noneText, ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ fieldLabel: gettext('API IPv4 Host'), ++ }, ++ { ++ xtype: 'proxmoxtextfield', ++ name: 'freenas_password', ++ reference: 'freenas_password_field', ++ inputType: me.isCreate ? '' : 'password', ++ value: '', ++ editable: true, ++ emptyText: Proxmox.Utils.noneText, ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ fieldLabel: gettext('API Password'), ++ change: function(f, value) { ++ if (f.rendered) { ++ f.up().down('field[name=freenas_confirmpw]').validate(); ++ } ++ }, ++ }, ++ { ++ xtype: 'proxmoxtextfield', ++ name: 'freenas_confirmpw', ++ reference: 'freenas_confirmpw_field', ++ inputType: me.isCreate ? '' : 'password', ++ value: '', ++ editable: true, ++ submitValue: false, ++ emptyText: Proxmox.Utils.noneText, ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ fieldLabel: gettext('Confirm Password'), ++ validator: function(value) { ++ var pw = this.up().down('field[name=freenas_password]').getValue(); ++ if (pw !== value) { ++ return "Passwords do not match!"; ++ } ++ return true; ++ }, + }, + ]; + diff --git a/pve-manager/js/pvemanagerlib.js.patch b/pve-manager/js/pvemanagerlib.js.patch index b4da53d..e9ff380 100644 --- a/pve-manager/js/pvemanagerlib.js.patch +++ b/pve-manager/js/pvemanagerlib.js.patch @@ -1,189 +1,189 @@ ---- pvemanagerlib.js.orig 2019-09-03 04:31:21.000000000 -0400 -+++ pvemanagerlib.js 2019-09-22 13:54:51.602048049 -0400 -@@ -6183,6 +6183,7 @@ +--- pvemanagerlib.js.orig 2021-03-09 02:22:47.000000000 -0500 ++++ pvemanagerlib.js 2021-03-20 11:52:39.694828636 -0400 +@@ -7849,6 +7849,7 @@ alias: ['widget.pveiScsiProviderSelector'], comboItems: [ - ['comstar', 'Comstar'], -+ ['freenas', 'FreeNAS-API'], - [ 'istgt', 'istgt'], - [ 'iet', 'IET'], - [ 'LIO', 'LIO'] -@@ -32992,6 +32993,7 @@ - data: { - isLIO: false, - isComstar: true, -+ isFreeNAS: false, - hasWriteCacheOption: true - } + ['comstar', 'Comstar'], ++ ['freenas', 'FreeNAS-API'], + ['istgt', 'istgt'], + ['iet', 'IET'], + ['LIO', 'LIO'], +@@ -46874,6 +46875,7 @@ + data: { + isLIO: false, + isComstar: true, ++ isFreeNAS: false, + hasWriteCacheOption: true, + }, }, -@@ -33004,10 +33006,26 @@ - } - }, - changeISCSIProvider: function(f, newVal, oldVal) { -+ var me = this; - var vm = this.getViewModel(); - vm.set('isLIO', newVal === 'LIO'); - vm.set('isComstar', newVal === 'comstar'); -- vm.set('hasWriteCacheOption', newVal === 'comstar' || newVal === 'istgt'); -+ vm.set('isFreeNAS', newVal === 'freenas'); -+ vm.set('hasWriteCacheOption', newVal === 'comstar' || newVal === 'freenas' || newVal === 'istgt'); -+ if (newVal !== 'freenas') { -+ me.lookupReference('freenas_use_ssl_field').setValue(false); -+ me.lookupReference('freenas_apiv4_host_field').setValue(''); -+ me.lookupReference('freenas_user_field').setValue(''); -+ me.lookupReference('freenas_user_field').allowBlank = true; -+ me.lookupReference('freenas_password_field').setValue(''); -+ me.lookupReference('freenas_password_field').allowBlank = true; -+ me.lookupReference('freenas_confirmpw_field').setValue(''); -+ me.lookupReference('freenas_confirmpw_field').allowBlank = true; -+ } else { -+ me.lookupReference('freenas_user_field').allowBlank = false; -+ me.lookupReference('freenas_password_field').allowBlank = false; -+ me.lookupReference('freenas_confirmpw_field').allowBlank = false; -+ } - } +@@ -46886,10 +46888,26 @@ + }, + }, + changeISCSIProvider: function(f, newVal, oldVal) { ++ var me = this; + var vm = this.getViewModel(); + vm.set('isLIO', newVal === 'LIO'); + vm.set('isComstar', newVal === 'comstar'); +- vm.set('hasWriteCacheOption', newVal === 'comstar' || newVal === 'istgt'); ++ vm.set('isFreeNAS', newVal === 'freenas'); ++ vm.set('hasWriteCacheOption', newVal === 'comstar' || newVal === 'freenas' || newVal === 'istgt'); ++ if (newVal !== 'freenas') { ++ me.lookupReference('freenas_use_ssl_field').setValue(false); ++ me.lookupReference('freenas_apiv4_host_field').setValue(''); ++ me.lookupReference('freenas_user_field').setValue(''); ++ me.lookupReference('freenas_user_field').allowBlank = true; ++ me.lookupReference('freenas_password_field').setValue(''); ++ me.lookupReference('freenas_password_field').allowBlank = true; ++ me.lookupReference('freenas_confirmpw_field').setValue(''); ++ me.lookupReference('freenas_confirmpw_field').allowBlank = true; ++ } else { ++ me.lookupReference('freenas_user_field').allowBlank = false; ++ me.lookupReference('freenas_password_field').allowBlank = false; ++ me.lookupReference('freenas_confirmpw_field').allowBlank = false; ++ } + }, }, -@@ -33025,6 +33043,7 @@ +@@ -46907,6 +46925,7 @@ }, setValues: function diff(values) { -+ values.freenas_confirmpw = values.freenas_password; - values.writecache = values.nowritecache ? 0 : 1; - this.callParent([values]); ++ values.freenas_confirmpw = values.freenas_password; + values.writecache = values.nowritecache ? 0 : 1; + this.callParent([values]); }, -@@ -33041,7 +33060,7 @@ - allowBlank: false - }, - { -- xtype: me.isCreate ? 'textfield' : 'displayfield', -+ xtype: 'textfield', - name: 'pool', - value: '', - fieldLabel: gettext('Pool'), -@@ -33051,11 +33070,11 @@ - xtype: me.isCreate ? 'textfield' : 'displayfield', - name: 'blocksize', - value: '4k', -- fieldLabel: gettext('Block Size'), -+ fieldLabel: gettext('ZFS Block Size'), - allowBlank: false - }, - { -- xtype: me.isCreate ? 'textfield' : 'displayfield', -+ xtype: 'textfield', - name: 'target', - value: '', - fieldLabel: gettext('Target'), -@@ -33066,8 +33085,33 @@ - name: 'comstar_tg', - value: '', - fieldLabel: gettext('Target group'), -- bind: me.isCreate ? { disabled: '{!isComstar}' } : { hidden: '{!isComstar}' }, -+ bind: { -+ hidden: '{!isComstar}' -+ }, - allowBlank: true -+ }, -+ { -+ xtype: 'proxmoxcheckbox', -+ name: 'freenas_use_ssl', -+ reference: 'freenas_use_ssl_field', -+ inputId: 'freenas_use_ssl_field', -+ checked: false, -+ bind: { -+ hidden: '{!isFreeNAS}' -+ }, -+ uncheckedValue: 0, -+ fieldLabel: gettext('API use SSL') -+ }, -+ { -+ xtype: 'textfield', -+ name: 'freenas_user', -+ reference: 'freenas_user_field', -+ inputId: 'freenas_user_field', -+ value: '', -+ fieldLabel: gettext('API Username'), -+ bind: { -+ hidden: '{!isFreeNAS}' -+ } - } - ]; +@@ -46923,7 +46942,7 @@ + allowBlank: false, + }, + { +- xtype: me.isCreate ? 'textfield' : 'displayfield', ++ xtype: 'textfield', + name: 'pool', + value: '', + fieldLabel: gettext('Pool'), +@@ -46933,11 +46952,11 @@ + xtype: me.isCreate ? 'textfield' : 'displayfield', + name: 'blocksize', + value: '4k', +- fieldLabel: gettext('Block Size'), ++ fieldLabel: gettext('ZFS Block Size'), + allowBlank: false, + }, + { +- xtype: me.isCreate ? 'textfield' : 'displayfield', ++ xtype: 'textfield', + name: 'target', + value: '', + fieldLabel: gettext('Target'), +@@ -46948,9 +46967,34 @@ + name: 'comstar_tg', + value: '', + fieldLabel: gettext('Target group'), +- bind: me.isCreate ? { disabled: '{!isComstar}' } : { hidden: '{!isComstar}' }, ++ bind: { ++ hidden: '{!isComstar}' ++ }, + allowBlank: true, + }, ++ { ++ xtype: 'proxmoxcheckbox', ++ name: 'freenas_use_ssl', ++ reference: 'freenas_use_ssl_field', ++ inputId: 'freenas_use_ssl_field', ++ checked: false, ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ uncheckedValue: 0, ++ fieldLabel: gettext('API use SSL'), ++ }, ++ { ++ xtype: 'textfield', ++ name: 'freenas_user', ++ reference: 'freenas_user_field', ++ inputId: 'freenas_user_field', ++ value: '', ++ fieldLabel: gettext('API Username'), ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ }, + ]; -@@ -33098,7 +33142,9 @@ - xtype: me.isCreate ? 'textfield' : 'displayfield', - name: 'comstar_hg', - value: '', -- bind: me.isCreate ? { disabled: '{!isComstar}' } : { hidden: '{!isComstar}' }, -+ bind: { -+ hidden: '{!isComstar}' -+ }, - fieldLabel: gettext('Host group'), - allowBlank: true - }, -@@ -33106,9 +33152,62 @@ - xtype: me.isCreate ? 'textfield' : 'displayfield', - name: 'lio_tpg', - value: '', -- bind: me.isCreate ? { disabled: '{!isLIO}' } : { hidden: '{!isLIO}' }, -- allowBlank: false, -- fieldLabel: gettext('Target portal group') -+ bind: { -+ hidden: '{!isLIO}' -+ }, -+ fieldLabel: gettext('Target portal group'), -+ allowBlank: true -+ }, -+ { -+ xtype: 'proxmoxtextfield', -+ name: 'freenas_apiv4_host', -+ reference: 'freenas_apiv4_host_field', -+ value: '', -+ editable: true, -+ emptyText: Proxmox.Utils.noneText, -+ bind: { -+ hidden: '{!isFreeNAS}' -+ }, -+ fieldLabel: gettext('API IPv4 Host'), -+ }, -+ { -+ xtype: 'proxmoxtextfield', -+ name: 'freenas_password', -+ reference: 'freenas_password_field', -+ inputType: me.isCreate ? '' : 'password', -+ value: '', -+ editable: true, -+ emptyText: Proxmox.Utils.noneText, -+ bind: { -+ hidden: '{!isFreeNAS}' -+ }, -+ fieldLabel: gettext('API Password'), -+ change: function(f, value) { -+ if (f.rendered) { -+ f.up().down('field[name=freenas_confirmpw]').validate(); -+ } -+ } -+ }, -+ { -+ xtype: 'proxmoxtextfield', -+ name: 'freenas_confirmpw', -+ reference: 'freenas_confirmpw_field', -+ inputType: me.isCreate ? '' : 'password', -+ value: '', -+ editable: true, -+ submitValue: false, -+ emptyText: Proxmox.Utils.noneText, -+ bind: { -+ hidden: '{!isFreeNAS}' -+ }, -+ fieldLabel: gettext('Confirm Password'), -+ validator: function(value) { -+ var pw = this.up().down('field[name=freenas_password]').getValue(); -+ if (pw !== value) { -+ return "Passwords do not match!"; -+ } -+ return true; -+ } - } - ]; + me.column2 = [ +@@ -46980,7 +47024,9 @@ + xtype: me.isCreate ? 'textfield' : 'displayfield', + name: 'comstar_hg', + value: '', +- bind: me.isCreate ? { disabled: '{!isComstar}' } : { hidden: '{!isComstar}' }, ++ bind: { ++ hidden: '{!isComstar}' ++ }, + fieldLabel: gettext('Host group'), + allowBlank: true, + }, +@@ -46988,9 +47034,62 @@ + xtype: me.isCreate ? 'textfield' : 'displayfield', + name: 'lio_tpg', + value: '', +- bind: me.isCreate ? { disabled: '{!isLIO}' } : { hidden: '{!isLIO}' }, +- allowBlank: false, ++ bind: { ++ hidden: '{!isLIO}' ++ }, + fieldLabel: gettext('Target portal group'), ++ allowBlank: true ++ }, ++ { ++ xtype: 'proxmoxtextfield', ++ name: 'freenas_apiv4_host', ++ reference: 'freenas_apiv4_host_field', ++ value: '', ++ editable: true, ++ emptyText: Proxmox.Utils.noneText, ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ fieldLabel: gettext('API IPv4 Host'), ++ }, ++ { ++ xtype: 'proxmoxtextfield', ++ name: 'freenas_password', ++ reference: 'freenas_password_field', ++ inputType: me.isCreate ? '' : 'password', ++ value: '', ++ editable: true, ++ emptyText: Proxmox.Utils.noneText, ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ fieldLabel: gettext('API Password'), ++ change: function(f, value) { ++ if (f.rendered) { ++ f.up().down('field[name=freenas_confirmpw]').validate(); ++ } ++ }, ++ }, ++ { ++ xtype: 'proxmoxtextfield', ++ name: 'freenas_confirmpw', ++ reference: 'freenas_confirmpw_field', ++ inputType: me.isCreate ? '' : 'password', ++ value: '', ++ editable: true, ++ submitValue: false, ++ emptyText: Proxmox.Utils.noneText, ++ bind: { ++ hidden: '{!isFreeNAS}' ++ }, ++ fieldLabel: gettext('Confirm Password'), ++ validator: function(value) { ++ var pw = this.up().down('field[name=freenas_password]').getValue(); ++ if (pw !== value) { ++ return "Passwords do not match!"; ++ } ++ return true; ++ }, + }, + ];