]> git.proxmox.com Git - proxmox-widget-toolkit.git/blobdiff - src/node/APTRepositories.js
apt repositories: detect mixed suites before major upgrade
[proxmox-widget-toolkit.git] / src / node / APTRepositories.js
index 5971bd83b95c50a5de41accce3f3c341d41d106d..cba927128fee9820f47e5e771ef11d698101be0b 100644 (file)
@@ -460,6 +460,7 @@ Ext.define('Proxmox.node.APTRepositories', {
            let nosubscription = vm.get('noSubscriptionRepo');
            let test = vm.get('testRepo');
            let wrongSuites = vm.get('suitesWarning');
+           let mixedSuites = vm.get('mixedSuites');
 
            if (!enterprise && !nosubscription && !test) {
                addCritical(
@@ -477,6 +478,10 @@ Ext.define('Proxmox.node.APTRepositories', {
                addWarn(gettext('Some suites are misconfigured'));
            }
 
+           if (mixedSuites) {
+               addWarn(gettext('Detected mixed suites before upgrade'));
+           }
+
            if (!activeSubscription && enterprise) {
                addWarn(gettext('The enterprise repository is enabled, but there is no active subscription!'));
            }
@@ -507,6 +512,7 @@ Ext.define('Proxmox.node.APTRepositories', {
            product: 'Proxmox VE', // default
            errors: [],
            suitesWarning: false,
+           mixedSuites: false, // used before major upgrade
            subscriptionActive: '',
            noSubscriptionRepo: '',
            enterpriseRepo: '',
@@ -641,6 +647,11 @@ Ext.define('Proxmox.node.APTRepositories', {
            let digest;
            let suitesWarning = false;
 
+           // Usually different suites will give errors anyways, but before a major upgrade the
+           // current and the next suite are allowed, so it makes sense to check for mixed suites.
+           let checkMixedSuites = false;
+           let mixedSuites = false;
+
            if (success && records.length > 0) {
                let data = records[0].data;
                let files = data.files;
@@ -659,6 +670,9 @@ Ext.define('Proxmox.node.APTRepositories', {
                        infos[path][idx] = {
                            origin: '',
                            warnings: [],
+                           // Used as a heuristic to detect mixed repositories pre-upgrade. The
+                           // warning is set on all repositories that do configure the next suite.
+                           gotIgnorePreUpgradeWarning: false,
                        };
                    }
 
@@ -667,8 +681,11 @@ Ext.define('Proxmox.node.APTRepositories', {
                    } else if (info.kind === 'warning') {
                        infos[path][idx].warnings.push(info);
                    } else if (info.kind === 'ignore-pre-upgrade-warning') {
+                       infos[path][idx].gotIgnorePreUpgradeWarning = true;
                        if (!repoGrid.majorUpgradeAllowed) {
                            infos[path][idx].warnings.push(info);
+                       } else {
+                           checkMixedSuites = true;
                        }
                    }
                }
@@ -683,8 +700,21 @@ Ext.define('Proxmox.node.APTRepositories', {
                            repo.Origin = infos[file.path][n].origin || Proxmox.Utils.UnknownText;
                            repo.warnings = infos[file.path][n].warnings || [];
 
-                           if (repo.Enabled && repo.warnings.some(w => w.property === 'Suites')) {
-                               suitesWarning = true;
+                           if (repo.Enabled) {
+                               if (repo.warnings.some(w => w.property === 'Suites')) {
+                                   suitesWarning = true;
+                               }
+
+                               let originType = me.classifyOrigin(repo.Origin);
+                               // Only Proxmox and Debian repositories checked here, because the
+                               // warning can be missing for others for a different reason (e.g.
+                               // using 'stable' or non-Debian code names).
+                               if (checkMixedSuites && repo.Types.includes('deb') &&
+                                   (originType === 'Proxmox' || originType === 'Debian') &&
+                                   !infos[file.path][n].gotIgnorePreUpgradeWarning
+                               ) {
+                                   mixedSuites = true;
+                               }
                            }
                        }
                        gridData.push(repo);
@@ -700,6 +730,7 @@ Ext.define('Proxmox.node.APTRepositories', {
 
            vm.set('errors', errors);
            vm.set('suitesWarning', suitesWarning);
+           vm.set('mixedSuites', mixedSuites);
            me.getController().updateState();
        });