Refactor AgentIPView to be generic over container and vms. Reuse it in
the Container Summary to show the ip addresses of the container.

Signed-off-by: Gabriel Goller <g.gol...@proxmox.com>
---
 www/manager6/Makefile                         |   2 +-
 www/manager6/panel/GuestStatusView.js         | 140 +++++++++++++++++-
 www/manager6/panel/GuestSummary.js            |   2 +-
 .../{qemu/AgentIPView.js => panel/IPView.js}  |  79 ++--------
 4 files changed, 151 insertions(+), 72 deletions(-)
 rename www/manager6/{qemu/AgentIPView.js => panel/IPView.js} (58%)

diff --git a/www/manager6/Makefile b/www/manager6/Makefile
index c94a5cdfbf70..aa10eb420c5b 100644
--- a/www/manager6/Makefile
+++ b/www/manager6/Makefile
@@ -102,6 +102,7 @@ JSSRC=                                                      
\
        panel/BackupJobPrune.js                         \
        panel/HealthWidget.js                           \
        panel/IPSet.js                                  \
+       panel/IPView.js                                 \
        panel/RunningChart.js                           \
        panel/StatusPanel.js                            \
        panel/GuestStatusView.js                        \
@@ -231,7 +232,6 @@ JSSRC=                                                      
\
        pool/Config.js                                  \
        pool/StatusView.js                              \
        pool/Summary.js                                 \
-       qemu/AgentIPView.js                             \
        qemu/AudioEdit.js                               \
        qemu/BootOrderEdit.js                           \
        qemu/CDEdit.js                                  \
diff --git a/www/manager6/panel/GuestStatusView.js 
b/www/manager6/panel/GuestStatusView.js
index 6401811c73bb..6c06141fd9f3 100644
--- a/www/manager6/panel/GuestStatusView.js
+++ b/www/manager6/panel/GuestStatusView.js
@@ -146,14 +146,150 @@ Ext.define('PVE.panel.GuestStatusView', {
            height: 15,
        },
        {
-           itemId: 'ips',
-           xtype: 'pveAgentIPView',
+           itemId: 'agentIPs',
+           xtype: 'pveIPView',
            cbind: {
                rstore: '{rstore}',
                pveSelNode: '{pveSelNode}',
                hidden: '{isLxc}',
                disabled: '{isLxc}',
            },
+           createUpdateStoreCallback: function(ipview, nodename, vmid) {
+               ipview.ipStore = Ext.create('Proxmox.data.UpdateStore', {
+                   interval: 10000,
+                   storeid: 'pve-qemu-agent-' + vmid,
+                   method: 'POST',
+                   proxy: {
+                       type: 'proxmox',
+                       url: '/api2/json/nodes/' + nodename + '/qemu/' + vmid + 
'/agent/network-get-interfaces',
+                   },
+               });
+               ipview.callParent();
+
+               ipview.mon(ipview.ipStore, 'load', function(_store, records, 
success) {
+                   if (records && records.length) {
+                       ipview.nics = records[0].data.result;
+                   } else {
+                       ipview.nics = undefined;
+                   }
+                   ipview.updateStatus(!success);
+               });
+           },
+           updateStatusCallback: function(ipview, unsuccessful, defaulttext) {
+               var text = defaulttext || gettext('No network information');
+               var more = false;
+               if (unsuccessful) {
+                   text = gettext('Guest Agent not running');
+               } else if (ipview.agent && ipview.running) {
+                   if (Ext.isArray(ipview.nics) && ipview.nics.length) {
+                       more = true;
+                       var ips = ipview.getDefaultIps(ipview.nics);
+                       if (ips.length !== 0) {
+                           text = ips.join('<br>');
+                       }
+                   } else if (ipview.nics && ipview.nics.error) {
+                       let msg = gettext('Cannot get info from Guest 
Agent<br>Error: {0}');
+                       text = Ext.String.format(msg, 
Ext.htmlEncode(ipview.nics.error.desc));
+                   }
+               } else if (ipview.agent) {
+                   text = gettext('Guest Agent not running');
+               } else {
+                   text = gettext('No Guest Agent configured');
+               }
+
+               var ipBox = ipview.down('#ipBox');
+               ipBox.update(text);
+
+               var moreBtn = ipview.down('#moreBtn');
+               moreBtn.setVisible(more);
+           },
+           startIPStoreCallback: function(ipview, store) {
+               let agentRec = store.getById('agent');
+               let state = store.getById('status');
+
+               ipview.agent = agentRec && agentRec.data.value === 1;
+               ipview.running = state && state.data.value === 'running';
+
+               var caps = Ext.state.Manager.get('GuiCap');
+
+               if (!caps.vms['VM.Monitor']) {
+                   var errorText = gettext("Requires '{0}' Privileges");
+                   ipview.updateStatus(false, Ext.String.format(errorText, 
'VM.Monitor'));
+                   return;
+               }
+
+               if (ipview.agent && ipview.running && ipview.ipStore.isStopped) 
{
+                   ipview.ipStore.startUpdate();
+               } else if (ipview.ipStore.isStopped) {
+                   ipview.updateStatus();
+               }
+           },
+       },
+       {
+           itemId: 'ctIPS',
+           xtype: 'pveIPView',
+           cbind: {
+               rstore: '{rstore}',
+               pveSelNode: '{pveSelNode}',
+               hidden: '{!isLxc}',
+               disabled: '{!isLxc}',
+           },
+           createUpdateStoreCallback: function(ipview, nodename, vmid) {
+               ipview.ipStore = Ext.create('Proxmox.data.UpdateStore', {
+                   interval: 10000,
+                   storeid: 'lxc-interfaces-' + vmid,
+                   method: 'GET',
+                   proxy: {
+                       type: 'proxmox',
+                       url: '/api2/json/nodes/' + nodename + '/lxc/' + vmid + 
'/interfaces',
+                   },
+               });
+               ipview.callParent();
+
+               ipview.mon(ipview.ipStore, 'load', function(_store, records, 
success) {
+                   if (records && records.length) {
+                       ipview.nics = records.map(r => r.data);
+                   } else {
+                       ipview.nics = undefined;
+                   }
+                   ipview.updateStatus(!success);
+               });
+           },
+           updateStatusCallback: function(ipview, _unsuccessful, defaulttext) {
+               var text = defaulttext || gettext('No network information');
+               var more = false;
+               if (Ext.isArray(ipview.nics) && ipview.nics.length) {
+                   more = true;
+                   var ips = ipview.getDefaultIps(ipview.nics);
+                   if (ips.length !== 0) {
+                       text = ips.join('<br>');
+                   }
+               }
+               var ipBox = ipview.down('#ipBox');
+               ipBox.update(text);
+
+               var moreBtn = ipview.down('#moreBtn');
+               moreBtn.setVisible(more);
+           },
+           startIPStoreCallback: function(ipview, store) {
+               let state = store.getById('status');
+
+               ipview.running = state && state.data.value === 'running';
+
+               var caps = Ext.state.Manager.get('GuiCap');
+
+               if (!caps.vms['VM.Audit']) {
+                   var errorText = gettext("Requires '{0}' Privileges");
+                   ipview.updateStatus(false, Ext.String.format(errorText, 
'VM.Audit'));
+                   return;
+               }
+
+               if (ipview.running && ipview.ipStore.isStopped) {
+                   ipview.ipStore.startUpdate();
+               } else if (ipview.ipStore.isStopped) {
+                   ipview.updateStatus();
+               }
+           },
        },
     ],
 
diff --git a/www/manager6/panel/GuestSummary.js 
b/www/manager6/panel/GuestSummary.js
index 1565db3f658d..2186967f62da 100644
--- a/www/manager6/panel/GuestSummary.js
+++ b/www/manager6/panel/GuestSummary.js
@@ -54,7 +54,7 @@ Ext.define('PVE.guest.Summary', {
            items = [
                {
                    xtype: 'container',
-                   height: 300,
+                   height: 370,
                    layout: {
                        type: 'hbox',
                        align: 'stretch',
diff --git a/www/manager6/qemu/AgentIPView.js b/www/manager6/panel/IPView.js
similarity index 58%
rename from www/manager6/qemu/AgentIPView.js
rename to www/manager6/panel/IPView.js
index a554de65f119..f8d1e77d139d 100644
--- a/www/manager6/qemu/AgentIPView.js
+++ b/www/manager6/panel/IPView.js
@@ -1,7 +1,7 @@
 Ext.define('PVE.window.IPInfo', {
     extend: 'Ext.window.Window',
     width: 600,
-    title: gettext('Guest Agent Network Information'),
+    title: gettext('Network Information'),
     height: 300,
     layout: {
        type: 'fit',
@@ -53,9 +53,9 @@ Ext.define('PVE.window.IPInfo', {
     ],
 });
 
-Ext.define('PVE.qemu.AgentIPView', {
+Ext.define('PVE.IPView', {
     extend: 'Ext.container.Container',
-    xtype: 'pveAgentIPView',
+    xtype: 'pveIPView',
 
     layout: {
        type: 'hbox',
@@ -63,6 +63,9 @@ Ext.define('PVE.qemu.AgentIPView', {
     },
 
     nics: [],
+    startIPStoreCallback: undefined,
+    updateStatusCallback: undefined,
+    createUpdateStoreCallback: undefined,
 
     items: [
        {
@@ -92,7 +95,7 @@ Ext.define('PVE.qemu.AgentIPView', {
                    hidden: true,
                    ui: 'default-toolbar',
                    handler: function(btn) {
-                       let view = this.up('pveAgentIPView');
+                       let view = this.up('pveIPView');
 
                        var win = Ext.create('PVE.window.IPInfo');
                        win.down('grid').getStore().setData(view.nics);
@@ -127,55 +130,14 @@ Ext.define('PVE.qemu.AgentIPView', {
 
     startIPStore: function(store, records, success) {
        var me = this;
-       let agentRec = store.getById('agent');
-       let state = store.getById('status');
 
-       me.agent = agentRec && agentRec.data.value === 1;
-       me.running = state && state.data.value === 'running';
-
-       var caps = Ext.state.Manager.get('GuiCap');
-
-       if (!caps.vms['VM.Monitor']) {
-           var errorText = gettext("Requires '{0}' Privileges");
-           me.updateStatus(false, Ext.String.format(errorText, 'VM.Monitor'));
-           return;
-       }
-
-       if (me.agent && me.running && me.ipStore.isStopped) {
-           me.ipStore.startUpdate();
-       } else if (me.ipStore.isStopped) {
-           me.updateStatus();
-       }
+       me.startIPStoreCallback(me, store);
     },
 
     updateStatus: function(unsuccessful, defaulttext) {
        var me = this;
-       var text = defaulttext || gettext('No network information');
-       var more = false;
-       if (unsuccessful) {
-           text = gettext('Guest Agent not running');
-       } else if (me.agent && me.running) {
-           if (Ext.isArray(me.nics) && me.nics.length) {
-               more = true;
-               var ips = me.getDefaultIps(me.nics);
-               if (ips.length !== 0) {
-                   text = ips.join('<br>');
-               }
-           } else if (me.nics && me.nics.error) {
-               let msg = gettext('Cannot get info from Guest Agent<br>Error: 
{0}');
-               text = Ext.String.format(msg, 
Ext.htmlEncode(me.nics.error.desc));
-           }
-       } else if (me.agent) {
-           text = gettext('Guest Agent not running');
-       } else {
-           text = gettext('No Guest Agent configured');
-       }
-
-       var ipBox = me.down('#ipBox');
-       ipBox.update(text);
 
-       var moreBtn = me.down('#moreBtn');
-       moreBtn.setVisible(more);
+       me.updateStatusCallback(me, unsuccessful, defaulttext);
     },
 
     initComponent: function() {
@@ -192,26 +154,7 @@ Ext.define('PVE.qemu.AgentIPView', {
        var nodename = me.pveSelNode.data.node;
        var vmid = me.pveSelNode.data.vmid;
 
-       me.ipStore = Ext.create('Proxmox.data.UpdateStore', {
-           interval: 10000,
-           storeid: 'pve-qemu-agent-' + vmid,
-           method: 'POST',
-           proxy: {
-               type: 'proxmox',
-               url: '/api2/json/nodes/' + nodename + '/qemu/' + vmid + 
'/agent/network-get-interfaces',
-           },
-       });
-
-       me.callParent();
-
-       me.mon(me.ipStore, 'load', function(store, records, success) {
-           if (records && records.length) {
-               me.nics = records[0].data.result;
-           } else {
-               me.nics = undefined;
-           }
-           me.updateStatus(!success);
-       });
+       me.createUpdateStoreCallback(me, nodename, vmid);
 
        me.on('destroy', me.ipStore.stopUpdate, me.ipStore);
 
@@ -220,7 +163,7 @@ Ext.define('PVE.qemu.AgentIPView', {
            me.startIPStore(me.rstore, me.rstore.getData(), false);
        }
 
-       // check if the guest agent is there on every statusstore load
        me.mon(me.rstore, 'load', me.startIPStore, me);
     },
 });
+
-- 
2.39.5



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to