From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 91D171FF16F for ; Tue, 16 Sep 2025 19:21:23 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 4D37819E0B; Tue, 16 Sep 2025 19:21:37 +0200 (CEST) From: "Max R. Carrara" To: pve-devel@lists.proxmox.com Date: Tue, 16 Sep 2025 19:20:06 +0200 Message-ID: <20250916172012.739807-6-m.carrara@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20250916172012.739807-1-m.carrara@proxmox.com> References: <20250916172012.739807-1-m.carrara@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1758043255369 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.087 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 Subject: [pve-devel] [PATCH pve-manager master v1 5/6] bin: make pve-init-ceph-crash call pve-ceph-keyring X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" Support 'client.crash' in the new `pve-ceph-keyring` helper and let `pve-init-ceph-crash` call `pve-ceph-keyring`. This avoids having duplicate logic lying around and retains the original behavior, except that the log output is slightly different. Signed-off-by: Max R. Carrara --- PVE/Ceph/Tools.pm | 2 +- bin/pve-ceph-keyring | 4 ++ bin/pve-init-ceph-crash | 152 +--------------------------------------- 3 files changed, 7 insertions(+), 151 deletions(-) diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm index b6430f79..dd146f6d 100644 --- a/PVE/Ceph/Tools.pm +++ b/PVE/Ceph/Tools.pm @@ -537,7 +537,7 @@ my sub create_or_update_keyring_file { return 0; } -# is also used in `pve-init-ceph-crash` helper +# is also used in `pve-ceph-keyring` helper sub create_or_update_crash_keyring_file { my ($rados) = @_; diff --git a/bin/pve-ceph-keyring b/bin/pve-ceph-keyring index 9d6e89d4..cf15776a 100755 --- a/bin/pve-ceph-keyring +++ b/bin/pve-ceph-keyring @@ -15,6 +15,10 @@ my $CEPH_CFG_FILE_PATH = PVE::Ceph::Tools::get_config('pve_ceph_cfgpath'); my $KEYRING_PATH = '/etc/pve/ceph/$cluster.$name.keyring'; my $SUPPORTED_ENTITIES = { + 'client.crash' => { + 'keyring-func' => \&PVE::Ceph::Tools::create_or_update_crash_keyring_file, + 'keyring-path' => PVE::Ceph::Tools::get_config('pve_ceph_crash_key_path'), + }, 'client.exporter' => { 'keyring-func' => \&PVE::Ceph::Tools::create_or_update_exporter_keyring_file, 'keyring-path' => PVE::Ceph::Tools::get_config('pve_ceph_exporter_key_path'), diff --git a/bin/pve-init-ceph-crash b/bin/pve-init-ceph-crash index d25201d9..8945ed88 100755 --- a/bin/pve-init-ceph-crash +++ b/bin/pve-init-ceph-crash @@ -1,151 +1,3 @@ -#!/usr/bin/perl +#!/bin/bash -use strict; -use warnings; - -use List::Util qw(first); - -use PVE::Ceph::Tools; -use PVE::Cluster; -use PVE::RADOS; -use PVE::RPCEnvironment; - -my $ceph_cfg_file = 'ceph.conf'; -my $keyring_value = '/etc/pve/ceph/$cluster.$name.keyring'; - -sub try_adapt_cfg { - my ($cfg) = @_; - - my $entity = 'client.crash'; - my $removed_key = 0; - - print("Checking whether the configuration for '$entity' needs to be updated.\n"); - - my $add_keyring = sub { - print("Setting keyring path to '$keyring_value'.\n"); - $cfg->{$entity}->{keyring} = $keyring_value; - }; - - if (!exists($cfg->{$entity})) { - print("Adding missing section for '$entity'.\n"); - $add_keyring->(); - return 1; - } - - if (exists($cfg->{$entity}->{key})) { - print("Removing existing usage of key.\n"); - delete($cfg->{$entity}->{key}); - $removed_key = 1; - } - - if (!exists($cfg->{$entity}->{keyring})) { - print("Keyring path is missing from configuration.\n"); - $add_keyring->(); - return 1; - } - - my $current_keyring_value = $cfg->{$entity}->{keyring}; - if ($current_keyring_value ne $keyring_value) { - print("Current keyring path differs from expected path.\n"); - $add_keyring->(); - return 1; - } - - return $removed_key; -} - -sub main { - # PVE::RADOS expects an active RPC Environment because it forks itself - # and may want to clean up after - my $rpcenv = PVE::RPCEnvironment->setup_default_cli_env(); - - if (!PVE::Ceph::Tools::check_ceph_installed('ceph_bin', 1)) { - print("Ceph is not installed. No action required.\n"); - exit 0; - } - - my $ceph_cfg_path = PVE::Ceph::Tools::get_config('pve_ceph_cfgpath'); - if (PVE::Ceph::Tools::check_ceph_installed('ceph_mon', 1) && -f $ceph_cfg_path) { - my $pve_ceph_cfgdir = PVE::Ceph::Tools::get_config('pve_ceph_cfgdir'); - if (!-d $pve_ceph_cfgdir) { - File::Path::make_path($pve_ceph_cfgdir); - } - } - - eval { PVE::Ceph::Tools::check_ceph_inited(); }; - if ($@) { - print("Ceph is not initialized. No action required.\n"); - exit 0; - } - - my $rados = eval { PVE::RADOS->new() }; - my $ceph_crash_key_path = PVE::Ceph::Tools::get_config('pve_ceph_crash_key_path'); - - my $inner_err = ''; - - my $rval = PVE::Cluster::cfs_lock_file( - $ceph_cfg_file, - undef, - sub { - eval { - my $cfg = PVE::Cluster::cfs_read_file($ceph_cfg_file); - - if (!defined($rados)) { - my $has_mon_host = - defined($cfg->{global}) && defined($cfg->{global}->{mon_host}); - if ($has_mon_host && $cfg->{global}->{mon_host} ne '') { - die "Connection to RADOS failed even though a monitor is configured.\n" - . "Please verify whether your configuration in '$ceph_cfg_file' is correct.\n"; - } - - print( - "Connection to RADOS failed and no monitor is configured in '$ceph_cfg_file'.\n" - . "Assuming that things are fine. No action required.\n"); - return; - } - - my $updated_keyring = - PVE::Ceph::Tools::create_or_update_crash_keyring_file($rados); - - if ($updated_keyring) { - print("Keyring file '$ceph_crash_key_path' was updated.\n"); - } - - my $changed = try_adapt_cfg($cfg); - - if ($changed) { - print("Committing updated configuration to '$ceph_cfg_file'.\n"); - PVE::Cluster::cfs_write_file($ceph_cfg_file, $cfg); - print("Successfully updated configuration for 'ceph-crash.service'.\n"); - } else { - print("Configuration in '$ceph_cfg_file' does not need to be updated.\n"); - } - }; - $inner_err = $@; - - return 1; - }, - ); - - # cfs_lock_file sets $@ explicitly to undef - my $err = $@ // ''; - - my $has_err = !defined($rval) || $inner_err || $err; - - if ($has_err) { - $err =~ s/\n*$//; - $inner_err =~ s/\n*$//; - - if (!defined($rval)) { - warn("Error while acquiring or releasing lock for '$ceph_cfg_file'.\n"); - warn("Error: $err\n") if $err ne ''; - } - - warn("Failed to configure keyring for 'ceph-crash.service'.\nError: $inner_err\n") - if $inner_err ne ''; - - exit 1; - } -} - -main(); +/usr/share/pve-manager/helpers/pve-ceph-keyring --init client.crash -- 2.47.3 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel