From a51a28e3cd86a4217d5ce0f75da426c746a31419 Mon Sep 17 00:00:00 2001 From: Max Carrara Date: Tue, 2 Apr 2024 16:55:21 +0200 Subject: [PATCH] ceph: introduce '/etc/pve/ceph' This commit adds the '/etc/pve/ceph' directory to our overall expected Ceph configuration. This directory is meant to store cluster-wide, non-private configuration files used by Ceph applications and services that are executed with lower privileges, such as 'ceph-crash.service'. The existence of the directory is now also checked for when checking whether Ceph is configured correctly. This makes it easier for our other tooling to rely on the directory's existence, reducing the number of otherwise needless frequent checking. * For new clusters: `pveceph init` now creates '/etc/pve/ceph' when called. * For existing clusters: The 'postinst' hook this commit adds ensures that '/etc/pve/ceph' is created when updating. Signed-off-by: Max Carrara Tested-by: Friedrich Weber --- PVE/API2/Ceph.pm | 5 +++++ PVE/Ceph/Tools.pm | 12 ++++++++++-- debian/postinst | 12 ++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm index 81c17d6e..7fedb87a 100644 --- a/PVE/API2/Ceph.pm +++ b/PVE/API2/Ceph.pm @@ -192,6 +192,11 @@ __PACKAGE__->register_method ({ PVE::Ceph::Tools::check_ceph_installed('ceph_bin'); } + my $pve_ceph_cfgdir = PVE::Ceph::Tools::get_config('pve_ceph_cfgdir'); + if (! -d $pve_ceph_cfgdir) { + File::Path::make_path($pve_ceph_cfgdir); + } + my $auth = $param->{disable_cephx} ? 'none' : 'cephx'; # simply load old config if it already exists diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm index ee6c515c..735bb116 100644 --- a/PVE/Ceph/Tools.pm +++ b/PVE/Ceph/Tools.pm @@ -18,6 +18,7 @@ my $ccname = 'ceph'; # ceph cluster name my $ceph_cfgdir = "/etc/ceph"; my $pve_ceph_cfgpath = "/etc/pve/$ccname.conf"; my $ceph_cfgpath = "$ceph_cfgdir/$ccname.conf"; +my $pve_ceph_cfgdir = "/etc/pve/ceph"; my $pve_mon_key_path = "/etc/pve/priv/$ccname.mon.keyring"; my $pve_ckeyring_path = "/etc/pve/priv/$ccname.client.admin.keyring"; @@ -37,6 +38,7 @@ my $ceph_service = { my $config_values = { ccname => $ccname, + pve_ceph_cfgdir => $pve_ceph_cfgdir, ceph_mds_data_dir => $ceph_mds_data_dir, long_rados_timeout => 60, }; @@ -186,8 +188,14 @@ sub check_ceph_inited { return undef if !check_ceph_installed('ceph_mon', $noerr); - if (! -f $pve_ceph_cfgpath) { - die "pveceph configuration not initialized\n" if !$noerr; + my @errors; + + push(@errors, "missing '$pve_ceph_cfgpath'") if ! -f $pve_ceph_cfgpath; + push(@errors, "missing '$pve_ceph_cfgdir'") if ! -d $pve_ceph_cfgdir; + + if (@errors) { + my $err = 'pveceph configuration not initialized - ' . join(', ', @errors) . "\n"; + die $err if !$noerr; return undef; } diff --git a/debian/postinst b/debian/postinst index 6138ef6d..58f2713f 100755 --- a/debian/postinst +++ b/debian/postinst @@ -80,6 +80,14 @@ EOF fi } +update_ceph_conf() { + CEPH_CONF_DIR='/etc/pve/ceph' + + if test ! -d "${CEPH_CONF_DIR}"; then + mkdir -p "${CEPH_CONF_DIR}" + fi +} + migrate_apt_auth_conf() { output="" removed="" @@ -190,6 +198,10 @@ case "$1" in set_lvm_conf + if test -n "$2" && dpkg --compare-versions "$2" 'lt' '0.0.0'; then + update_ceph_conf + fi + if test ! -e /proxmox_install_mode; then # modeled after code generated by dh_start for unit in ${UNITS}; do