]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/dc/Cluster.js
ui: eslint: fix various spacing related issues
[pve-manager.git] / www / manager6 / dc / Cluster.js
index 10e25bf07209260d0b87c093b5d1da21ad6aaae9..5880fbfc68d265d9c6ead9f6163f92c64920ff70 100644 (file)
@@ -1,23 +1,22 @@
-/*jslint confusion: true*/
 Ext.define('pve-cluster-nodes', {
     extend: 'Ext.data.Model',
     fields: [
        'node', { type: 'integer', name: 'nodeid' }, 'ring0_addr', 'ring1_addr',
-       { type: 'integer', name: 'quorum_votes' }
+       { type: 'integer', name: 'quorum_votes' },
     ],
     proxy: {
         type: 'proxmox',
-       url: "/api2/json/cluster/config/nodes"
+       url: "/api2/json/cluster/config/nodes",
     },
-    idProperty: 'nodeid'
+    idProperty: 'nodeid',
 });
 
 Ext.define('pve-cluster-info', {
     extend: 'Ext.data.Model',
     proxy: {
         type: 'proxmox',
-       url: "/api2/json/cluster/config/join"
-    }
+       url: "/api2/json/cluster/config/join",
+    },
 });
 
 Ext.define('PVE.ClusterAdministration', {
@@ -25,6 +24,7 @@ Ext.define('PVE.ClusterAdministration', {
     xtype: 'pveClusterAdministration',
 
     title: gettext('Cluster Administration'),
+    onlineHelp: 'chapter_pvecm',
 
     border: false,
     defaults: { border: false },
@@ -37,11 +37,11 @@ Ext.define('PVE.ClusterAdministration', {
            preferred_node: {
                name: '',
                fp: '',
-               addr: ''
+               addr: '',
            },
            isInCluster: false,
-           nodecount: 0
-       }
+           nodecount: 0,
+       },
     },
 
     items: [
@@ -56,7 +56,7 @@ Ext.define('PVE.ClusterAdministration', {
                        autoStart: true,
                        interval: 15 * 1000,
                        storeid: 'pve-cluster-info',
-                       model: 'pve-cluster-info'
+                       model: 'pve-cluster-info',
                    });
                    view.store.on('load', this.onLoad, this);
                    view.on('destroy', view.store.stopUpdate);
@@ -71,7 +71,7 @@ Ext.define('PVE.ClusterAdministration', {
                        vm.set('preferred_node', {
                            name: '',
                            addr: '',
-                           fp: ''
+                           fp: '',
                        });
                        return;
                    }
@@ -80,17 +80,92 @@ Ext.define('PVE.ClusterAdministration', {
                    vm.set('isInCluster', !!data.totem.cluster_name);
                    vm.set('nodelist', data.nodelist);
 
-                   var nodeinfo = Ext.Array.findBy(data.nodelist, function (el) {
+                   var nodeinfo = Ext.Array.findBy(data.nodelist, function(el) {
                        return el.name === data.preferred_node;
                    });
 
+                   let links = {};
+                   let ring_addr = [];
+                   PVE.Utils.forEachCorosyncLink(nodeinfo, (num, link) => {
+                       links[num] = link;
+                       ring_addr.push(link);
+                   });
+
                    vm.set('preferred_node', {
                        name: data.preferred_node,
                        addr: nodeinfo.pve_addr,
-                       fp: nodeinfo.pve_fp
+                       peerLinks: links,
+                       ring_addr: ring_addr,
+                       fp: nodeinfo.pve_fp,
+                   });
+               },
+
+               onCreate: function() {
+                   var view = this.getView();
+                   view.store.stopUpdate();
+                   var win = Ext.create('PVE.ClusterCreateWindow', {
+                       autoShow: true,
+                       listeners: {
+                           destroy: function() {
+                               view.store.startUpdate();
+                           },
+                       },
+                   });
+               },
+
+               onClusterInfo: function() {
+                   var vm = this.getViewModel();
+                   var win = Ext.create('PVE.ClusterInfoWindow', {
+                       joinInfo: {
+                           ipAddress: vm.get('preferred_node.addr'),
+                           fingerprint: vm.get('preferred_node.fp'),
+                           peerLinks: vm.get('preferred_node.peerLinks'),
+                           ring_addr: vm.get('preferred_node.ring_addr'),
+                           totem: vm.get('totem'),
+                       },
+                   });
+                   win.show();
+               },
+
+               onJoin: function() {
+                   var view = this.getView();
+                   view.store.stopUpdate();
+                   var win = Ext.create('PVE.ClusterJoinNodeWindow', {
+                       autoShow: true,
+                       listeners: {
+                           destroy: function() {
+                               view.store.startUpdate();
+                           },
+                       },
                    });
                },
            },
+           tbar: [
+               {
+                   text: gettext('Create Cluster'),
+                   reference: 'createButton',
+                   handler: 'onCreate',
+                   bind: {
+                       disabled: '{isInCluster}',
+                   },
+               },
+               {
+                   text: gettext('Join Information'),
+                   reference: 'addButton',
+                   handler: 'onClusterInfo',
+                   bind: {
+                       disabled: '{!isInCluster}',
+                   },
+               },
+               {
+                   text: gettext('Join Cluster'),
+                   reference: 'joinButton',
+                   handler: 'onJoin',
+                   bind: {
+                       disabled: '{isInCluster}',
+                   },
+               },
+           ],
            layout: 'hbox',
            bodyPadding: 5,
            items: [
@@ -99,18 +174,18 @@ Ext.define('PVE.ClusterAdministration', {
                    fieldLabel: gettext('Cluster Name'),
                    bind: {
                        value: '{totem.cluster_name}',
-                       hidden: '{!isInCluster}'
+                       hidden: '{!isInCluster}',
                    },
-                   flex: 1
+                   flex: 1,
                },
                {
                    xtype: 'displayfield',
                    fieldLabel: gettext('Config Version'),
                    bind: {
                        value: '{totem.config_version}',
-                       hidden: '{!isInCluster}'
+                       hidden: '{!isInCluster}',
                    },
-                   flex: 1
+                   flex: 1,
                },
                {
                    xtype: 'displayfield',
@@ -118,23 +193,25 @@ Ext.define('PVE.ClusterAdministration', {
                    labelWidth: 120,
                    bind: {
                        value: '{nodecount}',
-                       hidden: '{!isInCluster}'
+                       hidden: '{!isInCluster}',
                    },
-                   flex: 1
+                   flex: 1,
                },
                {
                    xtype: 'displayfield',
                    value: gettext('Standalone node - no cluster defined'),
                    bind: {
-                       hidden: '{isInCluster}'
+                       hidden: '{isInCluster}',
                    },
-                   flex: 1
-               }
-           ]
+                   flex: 1,
+               },
+           ],
        },
        {
            xtype: 'grid',
            title: gettext('Cluster Nodes'),
+           autoScroll: true,
+           enableColumnHide: false,
            controller: {
                xclass: 'Ext.app.ViewController',
 
@@ -145,56 +222,124 @@ Ext.define('PVE.ClusterAdministration', {
                        interval: 5 * 1000,
                        autoStart: true,
                        storeid: 'pve-cluster-nodes',
-                       model: 'pve-cluster-nodes'
+                       model: 'pve-cluster-nodes',
                    });
                    view.setStore(Ext.create('Proxmox.data.DiffStore', {
                        rstore: view.rstore,
                        sorters: {
                            property: 'nodeid',
-                           order: 'DESC'
-                       }
+                           order: 'DESC',
+                       },
                    }));
                    Proxmox.Utils.monStoreErrors(view, view.rstore);
-                   view.store.on('load', this.onLoad, this);
+                   view.rstore.on('load', this.onLoad, this);
                    view.on('destroy', view.rstore.stopUpdate);
                },
 
                onLoad: function(store, records, success) {
+                   var view = this.getView();
                    var vm = this.getViewModel();
-                   if (!success || !records) {
+
+                   if (!success || !records || !records.length) {
                        vm.set('nodecount', 0);
                        return;
                    }
                    vm.set('nodecount', records.length);
-               }
-           },
-           columns: [
-               {
-                   header: gettext('Nodename'),
-                   flex: 2,
-                   dataIndex: 'name'
-               },
-               {
-                   header: gettext('ID'),
-                   flex: 1,
-                   dataIndex: 'nodeid'
+
+                   // show/hide columns according to used links
+                   var linkIndex = view.columns.length;
+                   var columns = Ext.each(view.columns, (col, i) => {
+                       if (col.linkNumber !== undefined) {
+                           col.setHidden(true);
+
+                           // save offset at which link columns start, so we
+                           // can address them directly below
+                           if (i < linkIndex) {
+                               linkIndex = i;
+                           }
+                       }
+                   });
+
+                   PVE.Utils.forEachCorosyncLink(records[0].data,
+                       (linknum, val) => {
+                           if (linknum > 7) {
+                               return;
+                           }
+                           view.columns[linkIndex+linknum].setHidden(false);
+                       },
+                   );
                },
-               {
-                   header: gettext('Votes'),
+           },
+           columns: {
+               items: [
+                   {
+                       header: gettext('Nodename'),
+                       hidden: false,
+                       dataIndex: 'name',
+                   },
+                   {
+                       header: gettext('ID'),
+                       minWidth: 100,
+                       width: 100,
+                       flex: 0,
+                       hidden: false,
+                       dataIndex: 'nodeid',
+                   },
+                   {
+                       header: gettext('Votes'),
+                       minWidth: 100,
+                       width: 100,
+                       flex: 0,
+                       hidden: false,
+                       dataIndex: 'quorum_votes',
+                   },
+                   {
+                       header: Ext.String.format(gettext('Link {0}'), 0),
+                       dataIndex: 'ring0_addr',
+                       linkNumber: 0,
+                   },
+                   {
+                       header: Ext.String.format(gettext('Link {0}'), 1),
+                       dataIndex: 'ring1_addr',
+                       linkNumber: 1,
+                   },
+                   {
+                       header: Ext.String.format(gettext('Link {0}'), 2),
+                       dataIndex: 'ring2_addr',
+                       linkNumber: 2,
+                   },
+                   {
+                       header: Ext.String.format(gettext('Link {0}'), 3),
+                       dataIndex: 'ring3_addr',
+                       linkNumber: 3,
+                   },
+                   {
+                       header: Ext.String.format(gettext('Link {0}'), 4),
+                       dataIndex: 'ring4_addr',
+                       linkNumber: 4,
+                   },
+                   {
+                       header: Ext.String.format(gettext('Link {0}'), 5),
+                       dataIndex: 'ring5_addr',
+                       linkNumber: 5,
+                   },
+                   {
+                       header: Ext.String.format(gettext('Link {0}'), 6),
+                       dataIndex: 'ring6_addr',
+                       linkNumber: 6,
+                   },
+                   {
+                       header: Ext.String.format(gettext('Link {0}'), 7),
+                       dataIndex: 'ring7_addr',
+                       linkNumber: 7,
+                   },
+               ],
+               defaults: {
                    flex: 1,
-                   dataIndex: 'quorum_votes'
-               },
-               {
-                   header: gettext('Ring 0'),
-                   flex: 2,
-                   dataIndex: 'ring0_addr'
+                   hidden: true,
+                   minWidth: 150,
                },
-               {
-                   header: gettext('Ring 1'),
-                   flex: 2,
-                   dataIndex: 'ring1_addr'
-               }
-           ]
-       }
-    ]
+           },
+       },
+    ],
 });