]>
Commit | Line | Data |
---|---|---|
208ba0c6 | 1 | Ext.define('PVE.storage.IScsiScan', { |
14d9ecc4 | 2 | extend: 'PVE.form.ComboBoxSetStoreNode', |
208ba0c6 DM |
3 | alias: 'widget.pveIScsiScan', |
4 | ||
5 | queryParam: 'portal', | |
c2317525 DC |
6 | valueField: 'target', |
7 | displayField: 'target', | |
8 | matchFieldWidth: false, | |
d420b29a DC |
9 | allowBlank: false, |
10 | ||
c2317525 | 11 | listConfig: { |
f6710aac | 12 | width: 350, |
d420b29a DC |
13 | columns: [ |
14 | { | |
15 | dataIndex: 'target', | |
16 | flex: 1, | |
17 | }, | |
18 | ], | |
04389e49 | 19 | emptyText: PVE.Utils.renderNotFound(gettext('iSCSI Target')), |
c2317525 | 20 | }, |
d420b29a | 21 | |
14d9ecc4 SH |
22 | config: { |
23 | apiSuffix: '/scan/iscsi', | |
24 | }, | |
208ba0c6 | 25 | |
d420b29a | 26 | showNodeSelector: true, |
208ba0c6 | 27 | |
d420b29a DC |
28 | reload: function() { |
29 | let me = this; | |
30 | if (!me.isDisabled()) { | |
31 | me.getStore().load(); | |
208ba0c6 | 32 | } |
208ba0c6 DM |
33 | }, |
34 | ||
35 | setPortal: function(portal) { | |
62427184 | 36 | let me = this; |
208ba0c6 | 37 | me.portal = portal; |
d420b29a DC |
38 | me.getStore().getProxy().setExtraParams({ portal }); |
39 | me.reload(); | |
40 | }, | |
41 | ||
42 | setNodeName: function(value) { | |
43 | let me = this; | |
44 | me.callParent([value]); | |
45 | me.reload(); | |
208ba0c6 DM |
46 | }, |
47 | ||
8058410f | 48 | initComponent: function() { |
62427184 | 49 | let me = this; |
208ba0c6 DM |
50 | |
51 | if (!me.nodename) { | |
52 | me.nodename = 'localhost'; | |
53 | } | |
54 | ||
62427184 | 55 | let store = Ext.create('Ext.data.Store', { |
8058410f | 56 | fields: ['target', 'portal'], |
208ba0c6 | 57 | proxy: { |
56a353b9 | 58 | type: 'proxmox', |
14d9ecc4 | 59 | url: `${me.apiBaseUrl}${me.nodename}${me.apiSuffix}`, |
f6710aac | 60 | }, |
208ba0c6 | 61 | }); |
9e9ab96f WL |
62 | store.sort('target', 'ASC'); |
63 | ||
208ba0c6 | 64 | Ext.apply(me, { |
f6710aac | 65 | store: store, |
208ba0c6 DM |
66 | }); |
67 | ||
68 | me.callParent(); | |
f6710aac | 69 | }, |
208ba0c6 DM |
70 | }); |
71 | ||
72 | Ext.define('PVE.storage.IScsiInputPanel', { | |
f28ec3e4 | 73 | extend: 'PVE.panel.StorageBase', |
df60e210 | 74 | mixins: ['Proxmox.Mixin.CBind'], |
208ba0c6 | 75 | |
96988dfa DC |
76 | onlineHelp: 'storage_open_iscsi', |
77 | ||
208ba0c6 | 78 | onGetValues: function(values) { |
b9e706fb | 79 | let me = this; |
208ba0c6 | 80 | |
208ba0c6 DM |
81 | values.content = values.luns ? 'images' : 'none'; |
82 | delete values.luns; | |
83 | ||
9c1fe394 | 84 | return me.callParent([values]); |
f28ec3e4 | 85 | }, |
177de3de | 86 | |
f28ec3e4 | 87 | setValues: function(values) { |
53e3ea84 | 88 | values.luns = values.content.indexOf('images') !== -1; |
ff86a291 | 89 | this.callParent([values]); |
208ba0c6 DM |
90 | }, |
91 | ||
df60e210 DC |
92 | column1: [ |
93 | { | |
94 | xtype: 'pmxDisplayEditField', | |
95 | cbind: { | |
96 | editable: '{isCreate}', | |
97 | }, | |
208ba0c6 | 98 | |
df60e210 DC |
99 | name: 'portal', |
100 | value: '', | |
101 | fieldLabel: 'Portal', | |
102 | allowBlank: false, | |
103 | ||
104 | editConfig: { | |
208ba0c6 | 105 | listeners: { |
df60e210 DC |
106 | change: { |
107 | fn: function(f, value) { | |
108 | let panel = this.up('inputpanel'); | |
109 | let exportField = panel.lookup('iScsiTargetScan'); | |
110 | if (exportField) { | |
111 | exportField.setDisabled(!value); | |
112 | exportField.setPortal(value); | |
113 | exportField.setValue(''); | |
114 | } | |
115 | }, | |
116 | buffer: 500, | |
f6710aac TL |
117 | }, |
118 | }, | |
208ba0c6 | 119 | }, |
df60e210 DC |
120 | }, |
121 | { | |
122 | cbind: { | |
123 | xtype: (get) => get('isCreate') ? 'pveIScsiScan' : 'displayfield', | |
124 | readOnly: '{!isCreate}', | |
125 | disabled: '{isCreate}', | |
f6710aac | 126 | }, |
208ba0c6 | 127 | |
df60e210 DC |
128 | name: 'target', |
129 | value: '', | |
130 | fieldLabel: gettext('Target'), | |
131 | allowBlank: false, | |
132 | reference: 'iScsiTargetScan', | |
133 | listeners: { | |
134 | nodechanged: function(value) { | |
135 | this.up('inputpanel').lookup('storageNodeRestriction').setValue(value); | |
136 | }, | |
137 | }, | |
138 | }, | |
139 | ], | |
140 | ||
141 | column2: [ | |
142 | { | |
143 | xtype: 'checkbox', | |
144 | name: 'luns', | |
145 | checked: true, | |
146 | fieldLabel: gettext('Use LUNs directly'), | |
147 | }, | |
148 | ], | |
208ba0c6 | 149 | }); |