Usually, differing suites already produce warnings/errors, but before
a major upgrade the current and the next suite are both valid. Mixing
them is an issue though.

Signed-off-by: Fiona Ebner <f.eb...@proxmox.com>
---
 src/node/APTRepositories.js | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/node/APTRepositories.js b/src/node/APTRepositories.js
index 5971bd8..cba9271 100644
--- a/src/node/APTRepositories.js
+++ b/src/node/APTRepositories.js
@@ -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();
        });
 
-- 
2.39.2



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

Reply via email to