On each add, edit, remove of a rule, refresh both affinity rule stores to immediately display any conflicts between the rules. Before this change, users would have to refresh the page to see conflicts on resource affinity rules after adding node affinity rules and vice-versa.
Signed-off-by: Michael Köppl <m.koe...@proxmox.com> --- Note: I moved the stores from the RulesBaseView outside to the RulesView, which encapsulates the NodeAffinityRulesView and the ResourceAffinityRulesView. I did this to make it easier to refresh both stores when the datachanged event is fired. Open to suggestions, though. www/manager6/ha/Rules.js | 143 ++++++++++++++++++++++++--------------- 1 file changed, 87 insertions(+), 56 deletions(-) diff --git a/www/manager6/ha/Rules.js b/www/manager6/ha/Rules.js index 1799d25fb..c8d4c1dac 100644 --- a/www/manager6/ha/Rules.js +++ b/www/manager6/ha/Rules.js @@ -8,18 +8,9 @@ Ext.define('PVE.ha.RulesBaseView', { throw 'no rule type given'; } - let store = new Ext.data.Store({ - model: 'pve-ha-rules', - autoLoad: true, - filters: [ - { - property: 'type', - value: me.ruleType, - }, - ], - }); - - let reloadStore = () => store.load(); + let reloadStore = () => { + me.fireEvent('datachanged', me); + }; let sm = Ext.create('Ext.selection.RowModel', {}); @@ -63,7 +54,7 @@ Ext.define('PVE.ha.RulesBaseView', { }); Ext.apply(me, { - store: store, + store: me.store, selModel: sm, viewConfig: { trackOver: false, @@ -160,49 +151,89 @@ Ext.define( align: 'stretch', }, - items: [ - { - title: gettext('HA Node Affinity Rules'), - xtype: 'pveHANodeAffinityRulesView', - flex: 1, - border: 0, - }, - { - xtype: 'splitter', - collapsible: false, - performCollapse: false, - }, - { - title: gettext('HA Resource Affinity Rules'), - xtype: 'pveHAResourceAffinityRulesView', - flex: 1, - border: 0, - }, - ], - }, - function () { - Ext.define('pve-ha-rules', { - extend: 'Ext.data.Model', - fields: [ - 'rule', - 'type', - 'nodes', - 'digest', - 'errors', - 'disable', - 'comment', - 'affinity', - 'resources', + initComponent: function () { + var me = this; + + Ext.define('pve-ha-rules', { + extend: 'Ext.data.Model', + fields: [ + 'rule', + 'type', + 'nodes', + 'digest', + 'errors', + 'disable', + 'comment', + 'affinity', + 'resources', + { + name: 'strict', + type: 'boolean', + }, + ], + proxy: { + type: 'proxmox', + url: '/api2/json/cluster/ha/rules', + }, + idProperty: 'rule', + }); + + let nodeAffinityStore = new Ext.data.Store({ + model: 'pve-ha-rules', + autoLoad: true, + filters: [ + { + property: 'type', + value: 'node-affinity', + }, + ], + }); + + let resourceAffinityStore = new Ext.data.Store({ + model: 'pve-ha-rules', + autoLoad: true, + filters: [ + { + property: 'type', + value: 'resource-affinity', + }, + ], + }); + + let reloadStores = () => { + nodeAffinityStore.load(); + resourceAffinityStore.load(); + }; + + me.items = [ { - name: 'strict', - type: 'boolean', + title: gettext('HA Node Affinity Rules'), + xtype: 'pveHANodeAffinityRulesView', + flex: 1, + border: 0, + store: nodeAffinityStore, + listeners: { + datachanged: reloadStores, + }, }, - ], - proxy: { - type: 'proxmox', - url: '/api2/json/cluster/ha/rules', - }, - idProperty: 'rule', - }); - }, + { + xtype: 'splitter', + collapsible: false, + performCollapse: false, + }, + { + title: gettext('HA Resource Affinity Rules'), + xtype: 'pveHAResourceAffinityRulesView', + flex: 1, + border: 0, + store: resourceAffinityStore, + listeners: { + datachanged: reloadStores, + }, + }, + ]; + + me.callParent(); + }, + } ); -- 2.47.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel