by adding a 4th repository option called 'offline'. If set, the ceph
installation step will not touch the repository configuration.

We add a simple version check to make sure that the latest version
available (and to be installed) does match the selected major Ceph
version.

Signed-off-by: Aaron Lauterer <a.laute...@proxmox.com>
Tested-by: Christoph Heiss <c.he...@proxmox.com>
---

Notes:
    Changes since RFC [0]:
    
    * rename option from 'offline' to 'manual'
    * start moved warning to begin uppercase as the others
    
    [0] 
https://lore.proxmox.com/pve-devel/20250423132825.1194271-1-a.laute...@proxmox.com/

 PVE/CLI/pveceph.pm | 47 +++++++++++++++++++++++++++++++++-------------
 1 file changed, 34 insertions(+), 13 deletions(-)

diff --git a/PVE/CLI/pveceph.pm b/PVE/CLI/pveceph.pm
index 488aea04..bff7ba70 100755
--- a/PVE/CLI/pveceph.pm
+++ b/PVE/CLI/pveceph.pm
@@ -3,6 +3,7 @@ package PVE::CLI::pveceph;
 use strict;
 use warnings;
 
+use AptPkg::Cache;
 use Data::Dumper;
 use Fcntl ':flock';
 use File::Path;
@@ -135,9 +136,13 @@ __PACKAGE__->register_method ({
            },
            repository => {
                type => 'string',
-               enum => ['enterprise', 'no-subscription', 'test'],
+               enum => ['enterprise', 'no-subscription', 'test', 'manual'],
                default => 'enterprise',
-               description => "Ceph repository to use.",
+               description => "Ceph repository to use. The 'manual' option 
will not configure"
+                   ." any repositories. Use it if the host cannot access the 
public repositories,"
+                   ." for example if Proxmox Offline Mirror is used. A 
repository that contains"
+                   ." the Ceph packages for the version needs to be manually 
configured before"
+                   ." starting the installation!",
                optional => 1,
            },
            'allow-experimental' => {
@@ -166,6 +171,9 @@ __PACKAGE__->register_method ({
        } elsif ($repo eq 'no-subscription') {
            warn "\nHINT: The no-subscription repository is not the best choice 
for production setups.\n"
                ."Proxmox recommends using the enterprise repository with a 
valid subscription.\n";
+       } elsif ($repo eq 'manual') {
+           warn "\nHINT: The manual repository option expects that the Ceph 
repository is already correctly configured."
+               ." For example, when used in combination with Proxmox Offline 
Mirror.\n";
        } else {
            warn "\nWARN: The test repository should only be used for test 
setups or after consulting"
                ." the official Proxmox support!\n\n"
@@ -186,19 +194,21 @@ __PACKAGE__->register_method ({
            die "Aborting installation as requested\n" if !$continue;
        }
 
-       PVE::Tools::file_set_contents("/etc/apt/sources.list.d/ceph.list", 
$repolist);
+       if ($repo ne "manual") {
+           PVE::Tools::file_set_contents("/etc/apt/sources.list.d/ceph.list", 
$repolist);
 
-       if ($available_ceph_releases->{$cephver}->{unsupported}) {
-           if ($param->{'allow-experimental'}) {
-               warn "NOTE: installing experimental/tech-preview Ceph release 
${rendered_release}!\n";
-           } elsif (-t STDOUT) {
-               print "Ceph ${rendered_release} is currently considered a 
technology preview for Proxmox VE - continue (y/N)? ";
-               my $answer = <STDIN>;
-               my $continue = defined($answer) && $answer =~ 
m/^\s*y(?:es)?\s*$/i;
+           if ($available_ceph_releases->{$cephver}->{unsupported}) {
+               if ($param->{'allow-experimental'}) {
+                   warn "NOTE: installing experimental/tech-preview Ceph 
release ${rendered_release}!\n";
+               } elsif (-t STDOUT) {
+                   print "Ceph ${rendered_release} is currently considered a 
technology preview for Proxmox VE - continue (y/N)? ";
+                   my $answer = <STDIN>;
+                   my $continue = defined($answer) && $answer =~ 
m/^\s*y(?:es)?\s*$/i;
 
-               die "Aborting installation as requested\n" if !$continue;
-           } else {
-               die "refusing to install tech-preview Ceph release 
${rendered_release} without 'allow-experimental' parameter!\n";
+                   die "Aborting installation as requested\n" if !$continue;
+               } else {
+                   die "Refusing to install tech-preview Ceph release 
${rendered_release} without 'allow-experimental' parameter!\n";
+               }
            }
        }
 
@@ -212,6 +222,17 @@ __PACKAGE__->register_method ({
            )
        };
 
+       if ($repo eq "manual") {
+           # TODO: get used repo metadata and print it as additional info
+           my $apt_cache = AptPkg::Cache->new() || die "unable to initialize 
AptPkg::Cache\n";
+           my @ceph_versions = 
$apt_cache->{'ceph-common:amd64'}->{'VersionList'}->@*;
+           my $latest_available = $ceph_versions[0]->{'VerStr'};
+           my $selected_version = 
PVE::Ceph::Releases::get_ceph_release_info($cephver)->{'release'};
+
+           die "Selected Ceph version '${selected_version}' does not match the 
available version in the repository '${latest_available}' \n"
+               if ($latest_available !~ "^$selected_version");
+       }
+
        my @apt_install = qw(apt-get --no-install-recommends -o 
Dpkg::Options::=--force-confnew install --);
        my @ceph_packages = qw(
            ceph
-- 
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