]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/ceph/ServiceList.js
api: ceph: create osd: work around udev bug
[pve-manager.git] / www / manager6 / ceph / ServiceList.js
index ce688eae2071568bb7062b5bd82de4e3bc81a526..971de63526aa8802c15ebcdd6f1d3f6a1e27ccdb 100644 (file)
@@ -5,10 +5,9 @@ Ext.define('PVE.CephCreateService', {
     showProgress: true,
 
     setNode: function(nodename) {
-        var me = this;
-
+       let me = this;
        me.nodename = nodename;
-        me.url = "/nodes/" + nodename + "/ceph/" + me.type + "/" + nodename;
+       me.url = `/nodes/${nodename}/ceph/${me.type}/${nodename}`;
     },
 
     method: 'POST',
@@ -23,28 +22,26 @@ Ext.define('PVE.CephCreateService', {
            allowBlank: false,
            listeners: {
                change: function(f, value) {
-                   var me = this.up('pveCephCreateService');
-                   me.setNode(value);
-               }
-           }
-       }
+                   let view = this.up('pveCephCreateService');
+                   view.setNode(value);
+               },
+           },
+       },
     ],
 
-    initComponent : function() {
-        var me = this;
+    initComponent: function() {
+        let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
        }
-
        if (!me.type) {
            throw "no type specified";
        }
-
        me.setNode(me.nodename);
 
         me.callParent();
-    }
+    },
 });
 
 Ext.define('PVE.node.CephServiceList', {
@@ -66,25 +63,21 @@ Ext.define('PVE.node.CephServiceList', {
        xclass: 'Ext.app.ViewController',
 
        render_version: function(value, metadata, rec) {
-           let me = this.getView();
-           let host = rec.data.host;
-           let icon = "";
-           let v = value;
-           let nodev = [0];
-           if (me.nodeversions[host] !== undefined) {
-               nodev = me.nodeversions[host].version.parts;
+           let view = this.getView();
+           let host = rec.data.host, nodev = [0];
+           if (view.nodeversions[host] !== undefined) {
+               nodev = view.nodeversions[host].version.parts;
            }
-           let maxv = me.maxversion;
 
-           if (PVE.Utils.compare_ceph_versions(maxv, nodev) > 0) {
+           let icon = '';
+           if (PVE.Utils.compare_ceph_versions(view.maxversion, nodev) > 0) {
                icon = PVE.Utils.get_ceph_icon_html('HEALTH_UPGRADE');
-           } else if (PVE.Utils.compare_ceph_versions(nodev, v) > 0) {
+           } else if (PVE.Utils.compare_ceph_versions(nodev, value) > 0) {
                icon = PVE.Utils.get_ceph_icon_html('HEALTH_OLD');
-           } else if (me.mixedversions) {
+           } else if (view.mixedversions) {
                icon = PVE.Utils.get_ceph_icon_html('HEALTH_OK');
            }
-
-           return icon + v;
+           return icon + value;
        },
 
        getMaxVersions: function(store, records, success) {
@@ -97,7 +90,7 @@ Ext.define('PVE.node.CephServiceList', {
            view.nodeversions = records[0].data.node;
            view.maxversion = [];
            view.mixedversions = false;
-           for (const [nodename, data] of Object.entries(view.nodeversions)) {
+           for (const [_nodename, data] of Object.entries(view.nodeversions)) {
                let res = PVE.Utils.compare_ceph_versions(data.version.parts, view.maxversion);
                if (res !== 0 && view.maxversion.length > 0) {
                    view.mixedversions = true;
@@ -123,31 +116,29 @@ Ext.define('PVE.node.CephServiceList', {
            view.versionsstore = Ext.create('Proxmox.data.UpdateStore', {
                autoStart: true,
                interval: 10000,
-               storeid: 'ceph-versions-' + view.type + '-list' + view.nodename,
+               storeid: `ceph-versions-${view.type}-list${view.nodename}`,
                proxy: {
                    type: 'proxmox',
-                   url: "/api2/json/cluster/ceph/metadata?scope=versions"
-               }
+                   url: "/api2/json/cluster/ceph/metadata?scope=versions",
+               },
            });
-
            view.versionsstore.on('load', this.getMaxVersions, this);
            view.on('destroy', view.versionsstore.stopUpdate);
 
            view.rstore = Ext.create('Proxmox.data.UpdateStore', {
-               autoLoad: true,
                autoStart: true,
                interval: 3000,
-               storeid: 'ceph-' + view.type + '-list' + view.nodename,
+               storeid: `ceph-${view.type}-list${view.nodename}`,
                model: 'ceph-service-list',
                proxy: {
                    type: 'proxmox',
-                   url: "/api2/json/nodes/" + view.nodename + "/ceph/" + view.type
-               }
+                   url: `/api2/json/nodes/${view.nodename}/ceph/${view.type}`,
+               },
            });
 
            view.setStore(Ext.create('Proxmox.data.DiffStore', {
                rstore: view.rstore,
-               sorters: [{ property: 'name' }]
+               sorters: [{ property: 'name' }],
            }));
 
            if (view.storeLoadCallback) {
@@ -156,85 +147,65 @@ Ext.define('PVE.node.CephServiceList', {
            view.on('destroy', view.rstore.stopUpdate);
 
            if (view.showCephInstallMask) {
-               var regex = new RegExp("not (installed|initialized)", "i");
-               PVE.Utils.handleStoreErrorOrMask(view, view.rstore, regex, function(me, error) {
-                   view.rstore.stopUpdate();
-                   PVE.Utils.showCephInstallOrMask(view.ownerCt, error.statusText, view.nodename,
-                       function(win){
-                           me.mon(win, 'cephInstallWindowClosed', function(){
-                               view.rstore.startUpdate();
-                           });
-                       }
-                   );
-               });
+               PVE.Utils.monitor_ceph_installed(view, view.rstore, view.nodename, true);
            }
        },
 
        service_cmd: function(rec, cmd) {
-           var view = this.getView();
+           let view = this.getView();
            if (!rec.data.host) {
                Ext.Msg.alert(gettext('Error'), "entry has no host");
                return;
            }
            Proxmox.Utils.API2Request({
-               url: "/nodes/" + rec.data.host + "/ceph/" + cmd,
+               url: `/nodes/${rec.data.host}/ceph/${cmd}`,
                method: 'POST',
                params: { service: view.type + '.' + rec.data.name },
                success: function(response, options) {
-                   var upid = response.result.data;
-                   var win = Ext.create('Proxmox.window.TaskProgress', {
-                       upid: upid,
-                       taskDone: function() {
-                           view.rstore.load();
-                       }
+                   Ext.create('Proxmox.window.TaskProgress', {
+                       autoShow: true,
+                       upid: response.result.data,
+                       taskDone: () => view.rstore.load(),
                    });
-                   win.show();
                },
-               failure: function(response, opts) {
-                   Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-               }
+               failure: (response, _opts) => Ext.Msg.alert(gettext('Error'), response.htmlStatus),
            });
        },
-       onChangeService: function(btn) {
-           var me = this;
-           var view = this.getView();
-           var cmd = btn.action;
-           var rec = view.getSelection()[0];
-           me.service_cmd(rec, cmd);
+       onChangeService: function(button) {
+           let me = this;
+           let record = me.getView().getSelection()[0];
+           me.service_cmd(record, button.action);
        },
 
        showSyslog: function() {
-           var view = this.getView();
-           var rec = view.getSelection()[0];
-           var servicename = 'ceph-' + view.type + '@' + rec.data.name;
-           var url = "/api2/extjs/nodes/" + rec.data.host + "/syslog?service=" +  encodeURIComponent(servicename);
-           var win = Ext.create('Ext.window.Window', {
-               title: gettext('Syslog') + ': ' + servicename,
+           let view = this.getView();
+           let rec = view.getSelection()[0];
+           let service = `ceph-${view.type}@${rec.data.name}`;
+           Ext.create('Ext.window.Window', {
+               title: `${gettext('Syslog')}: ${service}`,
+               autoShow: true,
                modal: true,
                width: 800,
                height: 400,
                layout: 'fit',
                items: [{
                    xtype: 'proxmoxLogView',
-                   url: url,
-                   log_select_timespan: 1
-               }]
+                   url: `/api2/extjs/nodes/${rec.data.host}/syslog?service=${encodeURIComponent(service)}`,
+                   log_select_timespan: 1,
+               }],
            });
-           win.show();
        },
 
        onCreate: function() {
-           var view = this.getView();
-           var win = Ext.create('PVE.CephCreateService', {
+           let view = this.getView();
+           Ext.create('PVE.CephCreateService', {
                autoShow: true,
                nodename: view.nodename,
                subject: view.getTitle(),
                type: view.type,
-               taskDone: function() {
-                   view.rstore.load();
-               }
+               taskDone: () => view.rstore.load(),
            });
-       }
+       },
     },
 
     tbar: [
@@ -244,22 +215,17 @@ Ext.define('PVE.node.CephServiceList', {
            iconCls: 'fa fa-play',
            action: 'start',
            disabled: true,
-           enableFn: function(rec) {
-               return rec.data.state === 'stopped' ||
-                 rec.data.state === 'unknown';
-           },
-           handler: 'onChangeService'
+           enableFn: rec => rec.data.state === 'stopped' || rec.data.state === 'unknown',
+           handler: 'onChangeService',
        },
        {
            xtype: 'proxmoxButton',
            text: gettext('Stop'),
            iconCls: 'fa fa-stop',
            action: 'stop',
-           enableFn: function(rec) {
-               return rec.data.state !== 'stopped';
-           },
+           enableFn: rec => rec.data.state !== 'stopped',
            disabled: true,
-           handler: 'onChangeService'
+           handler: 'onChangeService',
        },
        {
            xtype: 'proxmoxButton',
@@ -267,51 +233,46 @@ Ext.define('PVE.node.CephServiceList', {
            iconCls: 'fa fa-refresh',
            action: 'restart',
            disabled: true,
-           enableFn: function(rec) {
-               return rec.data.state !== 'stopped';
-           },
-           handler: 'onChangeService'
+           enableFn: rec => rec.data.state !== 'stopped',
+           handler: 'onChangeService',
        },
        '-',
        {
            text: gettext('Create'),
            reference: 'createButton',
-           handler: 'onCreate'
+           handler: 'onCreate',
        },
        {
            text: gettext('Destroy'),
            xtype: 'proxmoxStdRemoveButton',
            getUrl: function(rec) {
-               var view = this.up('grid');
+               let view = this.up('grid');
                if (!rec.data.host) {
-                   Ext.Msg.alert(gettext('Error'), "entry has no host");
-                   return;
+                   Ext.Msg.alert(gettext('Error'), "entry has no host, cannot build API url");
+                   return '';
                }
-               return "/nodes/" + rec.data.host + "/ceph/" + view.type + "/" + rec.data.name;
+               return `/nodes/${rec.data.host}/ceph/${view.type}/${rec.data.name}`;
            },
            callback: function(options, success, response) {
-               var view = this.up('grid');
+               let view = this.up('grid');
                if (!success) {
                    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
                    return;
                }
-               var upid = response.result.data;
-               var win = Ext.create('Proxmox.window.TaskProgress', {
-                   upid: upid,
-                   taskDone: function() {
-                       view.rstore.load();
-                   }
+               Ext.create('Proxmox.window.TaskProgress', {
+                   autoShow: true,
+                   upid: response.result.data,
+                   taskDone: () => view.rstore.load(),
                });
-               win.show();
-           }
+           },
        },
        '-',
        {
            xtype: 'proxmoxButton',
            text: gettext('Syslog'),
            disabled: true,
-           handler: 'showSyslog'
-       }
+           handler: 'showSyslog',
+       },
     ],
 
     columns: [
@@ -322,7 +283,7 @@ Ext.define('PVE.node.CephServiceList', {
            renderer: function(v) {
                return this.type + '.' + v;
            },
-           dataIndex: 'name'
+           dataIndex: 'name',
        },
        {
            header: gettext('Host'),
@@ -331,13 +292,13 @@ Ext.define('PVE.node.CephServiceList', {
            renderer: function(v) {
                return v || Proxmox.Utils.unknownText;
            },
-           dataIndex: 'host'
+           dataIndex: 'host',
        },
        {
            header: gettext('Status'),
            flex: 1,
            sortable: false,
-           dataIndex: 'state'
+           dataIndex: 'state',
        },
        {
            header: gettext('Address'),
@@ -346,7 +307,7 @@ Ext.define('PVE.node.CephServiceList', {
            renderer: function(v) {
                return v || Proxmox.Utils.unknownText;
            },
-           dataIndex: 'addr'
+           dataIndex: 'addr',
        },
        {
            header: gettext('Version'),
@@ -354,29 +315,37 @@ Ext.define('PVE.node.CephServiceList', {
            sortable: true,
            dataIndex: 'version',
            renderer: 'render_version',
-       }
+       },
     ],
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (me.additionalColumns) {
            me.columns = me.columns.concat(me.additionalColumns);
        }
 
        me.callParent();
-    }
+    },
 
 }, function() {
-
     Ext.define('ceph-service-list', {
        extend: 'Ext.data.Model',
-       fields: [ 'addr', 'name', 'rank', 'host', 'quorum', 'state',
-           'ceph_version', 'ceph_version_short',
-           { type: 'string', name: 'version', calculate: function(data) {
-               return PVE.Utils.parse_ceph_version(data);
-           } }
+       fields: [
+           'addr',
+           'name',
+           'rank',
+           'host',
+           'quorum',
+           'state',
+           'ceph_version',
+           'ceph_version_short',
+           {
+               type: 'string',
+               name: 'version',
+               calculate: data => PVE.Utils.parse_ceph_version(data),
+           },
        ],
-       idProperty: 'name'
+       idProperty: 'name',
     });
 });