From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id ACB941FF146 for ; Tue, 28 Apr 2026 04:45:55 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 61EDD2059; Tue, 28 Apr 2026 04:45:54 +0200 (CEST) From: Kefu Chai To: pve-devel@lists.proxmox.com Subject: [PATCH manager 2/5] ceph: add pveceph upgrade-check command Date: Tue, 28 Apr 2026 10:45:35 +0800 Message-ID: <20260428024538.3559017-3-k.chai@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260428024538.3559017-1-k.chai@proxmox.com> References: <20260428024538.3559017-1-k.chai@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1777344254124 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.315 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [pveceph.pm] Message-ID-Hash: CTF4XLCMHOZFHYCP6EU5JHO3EI4QFMG5 X-Message-ID-Hash: CTF4XLCMHOZFHYCP6EU5JHO3EI4QFMG5 X-MailFrom: k.chai@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Expose the Ceph upgrade checks via a new 'pveceph upgrade-check' subcommand, so operators can run a post-upgrade Ceph readiness check against the release they are currently running, independently of a PVE major-version upgrade. Signed-off-by: Kefu Chai --- PVE/CLI/pveceph.pm | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/PVE/CLI/pveceph.pm b/PVE/CLI/pveceph.pm index d8867106..e5bbbdce 100755 --- a/PVE/CLI/pveceph.pm +++ b/PVE/CLI/pveceph.pm @@ -24,6 +24,7 @@ use PVE::Tools qw(run_command); use PVE::Ceph::Releases; use PVE::Ceph::Services; use PVE::Ceph::Tools; +use PVE::Ceph::UpgradeCheck; use PVE::API2::Ceph; use PVE::API2::Ceph::FS; @@ -498,6 +499,49 @@ __PACKAGE__->register_method({ }, }); +__PACKAGE__->register_method({ + name => 'upgrade-check', + path => 'upgrade-check', + method => 'GET', + description => + "Run post-upgrade Ceph readiness checks for the currently installed release.", + parameters => { + additionalProperties => 0, + properties => { + node => get_standard_option('pve-node'), + }, + }, + returns => { type => 'null' }, + code => sub { + my ($param) = @_; + + my $supported_release = PVE::Ceph::Tools::get_local_version(1); + if (!$supported_release) { + my $default_codename = PVE::Ceph::Releases::get_default_ceph_release_codename(); + my $info = PVE::Ceph::Releases::get_ceph_release_info($default_codename); + $supported_release = int($info->{release}) if $info; + } + die "could not determine local Ceph major release\n" if !$supported_release; + + my $messages = PVE::Ceph::UpgradeCheck::run_checks( + nodename => $param->{node}, + supported_release => $supported_release, + ); + + my $counters = { pass => 0, info => 0, notice => 0, warn => 0, fail => 0, skip => 0 }; + for my $m ($messages->@*) { + $counters->{ $m->{level} }++ if exists $counters->{ $m->{level} }; + print uc($m->{level}) . ": $m->{msg}\n"; + } + + print "\n"; + print "Summary: $counters->{pass} pass, $counters->{notice} notices," + . " $counters->{warn} warnings, $counters->{fail} failures.\n"; + + return undef; + }, +}); + my $format_osddetails = sub { my ($data, $schema, $options) = @_; @@ -616,6 +660,7 @@ our $cmddef = { install => [__PACKAGE__, 'install', []], purge => [__PACKAGE__, 'purge', []], status => [__PACKAGE__, 'status', []], + 'upgrade-check' => [__PACKAGE__, 'upgrade-check', [], { node => $nodename }], }; 1; -- 2.47.3