]>
Commit | Line | Data |
---|---|---|
cbebb721 | 1 | Ext.define('PVE.storage.TPoolSelector', { |
14d9ecc4 | 2 | extend: 'PVE.form.ComboBoxSetStoreNode', |
cbebb721 DM |
3 | alias: 'widget.pveTPSelector', |
4 | ||
5 | queryParam: 'vg', | |
c2317525 DC |
6 | valueField: 'lv', |
7 | displayField: 'lv', | |
8 | editable: false, | |
d420b29a DC |
9 | allowBlank: false, |
10 | ||
11 | listConfig: { | |
12 | emptyText: gettext("No thinpool found"), | |
13 | columns: [ | |
14 | { | |
15 | dataIndex: 'lv', | |
16 | flex: 1, | |
17 | }, | |
18 | ], | |
19 | }, | |
cbebb721 | 20 | |
14d9ecc4 SH |
21 | config: { |
22 | apiSuffix: '/scan/lvmthin', | |
23 | }, | |
24 | ||
d420b29a | 25 | reload: function() { |
b9e706fb | 26 | let me = this; |
d420b29a DC |
27 | if (!me.isDisabled()) { |
28 | me.getStore().load(); | |
cbebb721 | 29 | } |
cbebb721 DM |
30 | }, |
31 | ||
32 | setVG: function(myvg) { | |
b9e706fb | 33 | let me = this; |
cbebb721 | 34 | me.vg = myvg; |
d420b29a DC |
35 | me.getStore().getProxy().setExtraParams({ vg: myvg }); |
36 | me.reload(); | |
37 | }, | |
38 | ||
39 | setNodeName: function(value) { | |
40 | let me = this; | |
41 | me.callParent([value]); | |
42 | me.reload(); | |
cbebb721 DM |
43 | }, |
44 | ||
8058410f | 45 | initComponent: function() { |
b9e706fb | 46 | let me = this; |
cbebb721 DM |
47 | |
48 | if (!me.nodename) { | |
49 | me.nodename = 'localhost'; | |
50 | } | |
51 | ||
b9e706fb | 52 | let store = Ext.create('Ext.data.Store', { |
8058410f | 53 | fields: ['lv'], |
cbebb721 | 54 | proxy: { |
56a353b9 | 55 | type: 'proxmox', |
14d9ecc4 | 56 | url: `${me.apiBaseUrl}${me.nodename}${me.apiSuffix}`, |
f6710aac | 57 | }, |
cbebb721 DM |
58 | }); |
59 | ||
9e9ab96f WL |
60 | store.sort('lv', 'ASC'); |
61 | ||
cbebb721 DM |
62 | Ext.apply(me, { |
63 | store: store, | |
cbebb721 DM |
64 | }); |
65 | ||
66 | me.callParent(); | |
f6710aac | 67 | }, |
cbebb721 DM |
68 | }); |
69 | ||
70 | Ext.define('PVE.storage.BaseVGSelector', { | |
14d9ecc4 | 71 | extend: 'PVE.form.ComboBoxSetStoreNode', |
cbebb721 DM |
72 | alias: 'widget.pveBaseVGSelector', |
73 | ||
c2317525 DC |
74 | valueField: 'vg', |
75 | displayField: 'vg', | |
76 | queryMode: 'local', | |
77 | editable: false, | |
d420b29a DC |
78 | allowBlank: false, |
79 | ||
80 | listConfig: { | |
81 | columns: [ | |
82 | { | |
83 | dataIndex: 'vg', | |
84 | flex: 1, | |
85 | }, | |
86 | ], | |
87 | }, | |
88 | ||
89 | showNodeSelector: true, | |
90 | ||
14d9ecc4 SH |
91 | config: { |
92 | apiSuffix: '/scan/lvm', | |
93 | }, | |
94 | ||
95 | setNodeName: function(value) { | |
96 | let me = this; | |
97 | me.callParent([value]); | |
98 | me.getStore().load(); | |
99 | }, | |
100 | ||
8058410f | 101 | initComponent: function() { |
b9e706fb | 102 | let me = this; |
cbebb721 DM |
103 | |
104 | if (!me.nodename) { | |
105 | me.nodename = 'localhost'; | |
106 | } | |
107 | ||
b9e706fb | 108 | let store = Ext.create('Ext.data.Store', { |
cbebb721 | 109 | autoLoad: {}, |
8058410f | 110 | fields: ['vg', 'size', 'free'], |
cbebb721 | 111 | proxy: { |
56a353b9 | 112 | type: 'proxmox', |
14d9ecc4 | 113 | url: `${me.apiBaseUrl}${me.nodename}${me.apiSuffix}`, |
f6710aac | 114 | }, |
cbebb721 DM |
115 | }); |
116 | ||
117 | Ext.apply(me, { | |
118 | store: store, | |
cbebb721 DM |
119 | }); |
120 | ||
121 | me.callParent(); | |
f6710aac | 122 | }, |
cbebb721 DM |
123 | }); |
124 | ||
125 | Ext.define('PVE.storage.LvmThinInputPanel', { | |
f28ec3e4 | 126 | extend: 'PVE.panel.StorageBase', |
fa84bd59 | 127 | mixins: ['Proxmox.Mixin.CBind'], |
cbebb721 | 128 | |
96988dfa DC |
129 | onlineHelp: 'storage_lvmthin', |
130 | ||
fa84bd59 DC |
131 | column1: [ |
132 | { | |
133 | xtype: 'pmxDisplayEditField', | |
134 | cbind: { | |
135 | editable: '{isCreate}', | |
136 | }, | |
cbebb721 | 137 | |
cbebb721 | 138 | name: 'vgname', |
cbebb721 | 139 | fieldLabel: gettext('Volume group'), |
cbebb721 | 140 | |
fa84bd59 DC |
141 | editConfig: { |
142 | xtype: 'pveBaseVGSelector', | |
cbebb721 | 143 | listeners: { |
d420b29a | 144 | nodechanged: function(value) { |
fa84bd59 DC |
145 | let panel = this.up('inputpanel'); |
146 | panel.lookup('thinPoolSelector').setNodeName(value); | |
147 | panel.lookup('storageNodeRestriction').setValue(value); | |
d420b29a | 148 | }, |
cbebb721 | 149 | change: function(f, value) { |
fa84bd59 DC |
150 | let vgField = this.up('inputpanel').lookup('thinPoolSelector'); |
151 | if (vgField) { | |
152 | vgField.setDisabled(!value); | |
cbebb721 DM |
153 | vgField.setVG(value); |
154 | vgField.setValue(''); | |
155 | } | |
f6710aac TL |
156 | }, |
157 | }, | |
fa84bd59 DC |
158 | }, |
159 | }, | |
160 | { | |
161 | xtype: 'pmxDisplayEditField', | |
162 | cbind: { | |
163 | editable: '{isCreate}', | |
164 | }, | |
cbebb721 | 165 | |
fa84bd59 DC |
166 | name: 'thinpool', |
167 | fieldLabel: gettext('Thin Pool'), | |
168 | allowBlank: false, | |
cbebb721 | 169 | |
fa84bd59 DC |
170 | editConfig: { |
171 | xtype: 'pveTPSelector', | |
172 | reference: 'thinPoolSelector', | |
173 | disabled: true, | |
174 | }, | |
175 | }, | |
176 | { | |
cbebb721 DM |
177 | xtype: 'pveContentTypeSelector', |
178 | cts: ['images', 'rootdir'], | |
179 | fieldLabel: gettext('Content'), | |
180 | name: 'content', | |
181 | value: ['images', 'rootdir'], | |
182 | multiSelect: true, | |
f6710aac | 183 | allowBlank: false, |
fa84bd59 DC |
184 | }, |
185 | ], | |
cbebb721 | 186 | |
fa84bd59 | 187 | column2: [], |
cbebb721 | 188 | }); |