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 <m.carr...@proxmox.com>
---
 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

Reply via email to