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 <m.carr...@proxmox.com> --- Changes v2 --> v3: * new; originally part of patches 09, 10 of series v2 - decided it's better to move all this into a separate patch to make context + intention clearer Changes v3 --> v4: * none Changes v4 --> v5: * use placeholder for version guard in `postinst` (see cover letter) * reword commit message 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 -- 2.39.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel