]> git.proxmox.com Git - pve-manager.git/blobdiff - PVE/Ceph/Tools.pm
fix #4759: ceph: configure ceph-crash.service and its key
[pve-manager.git] / PVE / Ceph / Tools.pm
index 735bb11645934109663dcecdf7da517052643eb6..9b97171e106e81d03ab196afe5194cf13f776e4a 100644 (file)
@@ -20,6 +20,7 @@ my $pve_ceph_cfgpath = "/etc/pve/$ccname.conf";
 my $ceph_cfgpath = "$ceph_cfgdir/$ccname.conf";
 my $pve_ceph_cfgdir = "/etc/pve/ceph";
 
+my $pve_ceph_crash_key_path = "$pve_ceph_cfgdir/$ccname.client.crash.keyring";
 my $pve_mon_key_path = "/etc/pve/priv/$ccname.mon.keyring";
 my $pve_ckeyring_path = "/etc/pve/priv/$ccname.client.admin.keyring";
 my $ckeyring_path = "/etc/ceph/ceph.client.admin.keyring";
@@ -45,6 +46,7 @@ my $config_values = {
 
 my $config_files = {
     pve_ceph_cfgpath => $pve_ceph_cfgpath,
+    pve_ceph_crash_key_path => $pve_ceph_crash_key_path,
     pve_mon_key_path => $pve_mon_key_path,
     pve_ckeyring_path => $pve_ckeyring_path,
     ceph_bootstrap_osd_keyring => $ceph_bootstrap_osd_keyring,
@@ -420,6 +422,39 @@ sub get_or_create_admin_keyring {
     return $pve_ckeyring_path;
 }
 
+# is also used in `pve-init-ceph-crash` helper
+sub create_or_update_crash_keyring_file {
+    my ($rados) = @_;
+
+    if (!defined($rados)) {
+       $rados = PVE::RADOS->new();
+    }
+
+    my $output = $rados->mon_command({
+       prefix => 'auth get-or-create',
+       entity => 'client.crash',
+       caps => [
+           mon => 'profile crash',
+           mgr => 'profile crash',
+       ],
+       format => 'plain',
+    });
+
+    if (-f $pve_ceph_crash_key_path) {
+       my $contents = PVE::Tools::file_get_contents($pve_ceph_crash_key_path);
+
+       if ($contents ne $output) {
+           PVE::Tools::file_set_contents($pve_ceph_crash_key_path, $output);
+           return 1;
+       }
+    } else {
+       PVE::Tools::file_set_contents($pve_ceph_crash_key_path, $output);
+       return 1;
+    }
+
+    return 0;
+}
+
 # get ceph-volume managed osds
 sub ceph_volume_list {
     my $result = {};