[pve-devel] [PATCH manager 1/2] ui: ha: refresh rules lists on edit to display conflicts immediately
Michael Köppl
m.koeppl at proxmox.com
Fri Aug 1 18:58:44 CEST 2025
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.koeppl at 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
More information about the pve-devel
mailing list