On January 30, 2024 7:40 pm, Max Carrara wrote:
> when creating the cluster's first monitor.
> 
> Signed-off-by: Max Carrara <m.carr...@proxmox.com>
> ---
>  PVE/API2/Ceph/MON.pm | 28 +++++++++++++++++++++++++++-
>  PVE/Ceph/Services.pm | 12 ++++++++++--
>  PVE/Ceph/Tools.pm    | 38 ++++++++++++++++++++++++++++++++++++++
>  3 files changed, 75 insertions(+), 3 deletions(-)
> 
> diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm
> index 1e959ef3..8d75f5d1 100644
> --- a/PVE/API2/Ceph/MON.pm
> +++ b/PVE/API2/Ceph/MON.pm
> @@ -459,11 +459,37 @@ __PACKAGE__->register_method ({
>           });
>           die $@ if $@;
>           # automatically create manager after the first monitor is created
> +         # and set up keyring and config for ceph-crash.service
>           if ($is_first_monitor) {
>               PVE::API2::Ceph::MGR->createmgr({
>                   node => $param->{node},
>                   id => $param->{node}
> -             })
> +             });
> +
> +             PVE::Cluster::cfs_lock_file('ceph.conf', undef, sub {
> +                 my $cfg = cfs_read_file('ceph.conf');
> +
> +                 if ($cfg->{'client.crash'}) {
> +                     return undef;
> +                 }
> +
> +                 $cfg->{'client.crash'}->{keyring} = 
> '/etc/pve/ceph/$cluster.$name.keyring';
> +
> +                 cfs_write_file('ceph.conf', $cfg);
> +             });
> +             die $@ if $@;
> +
> +             eval {
> +                 PVE::Ceph::Tools::get_or_create_crash_keyring();
> +             };
> +             warn "Unable to configure keyring for ceph-crash.service: $@" 
> if $@;

the order here should maybe be switched around? first handle the
keyring, then put it in the config?

> +
> +             print "enabling service 'ceph-crash.service'\n";
> +             PVE::Ceph::Services::ceph_service_cmd('enable', 'crash');

shouldn't this already be handled by default?

> +             print "starting service 'ceph-crash.service'\n";
> +             # ceph-crash already runs by default,
> +             # this makes sure the keyring is used
> +             PVE::Ceph::Services::ceph_service_cmd('restart', 'crash');

this should probably be a try-restart to avoid starting it if the admin
explicitly disabled and/or stopped it..

but - AFAICT, the ceph-crash script that is executed by the service
boils down to (as forked process!) "ceph -n XXX ..." where XXX is (in sequence)
client.crash.$HOST, client.crash, client.admin, so a service restart
shouldn't even be needed, since a fresh ceph (client) process will pick
up the config changes anyway?

>           }
>       };
>  
> diff --git a/PVE/Ceph/Services.pm b/PVE/Ceph/Services.pm
> index e0f31e8e..5f5986f9 100644
> --- a/PVE/Ceph/Services.pm
> +++ b/PVE/Ceph/Services.pm

> [..]

> diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm
> index 3acef11b..cf9f2ed4 100644
> --- a/PVE/Ceph/Tools.pm
> +++ b/PVE/Ceph/Tools.pm

> [..]

> +    my $output = $rados->mon_command({
> +     prefix => 'auth get-or-create',
> +     entity => 'client.crash',
> +     caps => [
> +         mon => 'profile crash',
> +         mgr => 'profile crash',
> +     ],
> +     format => 'plain',
> +    });
> +
> +    if (! -d $pve_ceph_cfgdir) {
> +     mkdir $pve_ceph_cfgdir;
> +    }
> +
> +    PVE::Tools::file_set_contents($pve_ceph_crash_key_path, $output);
> +
> +    return $pve_ceph_crash_key_path;
> +}
> +

we have another helper for creating a keyring (and another inline call
to ceph-authtool when creating a monitor), should we unify them?


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to