import json
import logging
import uuid
+import os
from collections import defaultdict
from typing import TYPE_CHECKING, Optional, List, cast, Dict, Any, Union, Tuple, Set, \
DefaultDict
# ceph.conf
config = self.mgr.get_minimal_ceph_conf().encode('utf-8')
config_digest = ''.join('%02x' % c for c in hashlib.sha256(config).digest())
+ cluster_cfg_dir = f'/var/lib/ceph/{self.mgr._cluster_fsid}/config'
if self.mgr.manage_etc_ceph_ceph_conf:
try:
for host in {s.hostname for s in all_slots}:
if host not in client_files:
client_files[host] = {}
- client_files[host]['/etc/ceph/ceph.conf'] = (
- 0o644, 0, 0, bytes(config), str(config_digest)
- )
+ ceph_conf = (0o644, 0, 0, bytes(config), str(config_digest))
+ client_files[host]['/etc/ceph/ceph.conf'] = ceph_conf
+ client_files[host][f'{cluster_cfg_dir}/ceph.conf'] = ceph_conf
except Exception as e:
self.mgr.log.warning(
f'unable to calc conf hosts: {self.mgr.manage_etc_ceph_ceph_conf_hosts}: {e}')
for host in {s.hostname for s in all_slots}:
if host not in client_files:
client_files[host] = {}
- client_files[host]['/etc/ceph/ceph.conf'] = (
- 0o644, 0, 0, bytes(config), str(config_digest)
- )
- client_files[host][ks.path] = (
- ks.mode, ks.uid, ks.gid, keyring.encode('utf-8'), digest
- )
+ ceph_conf = (0o644, 0, 0, bytes(config), str(config_digest))
+ client_files[host]['/etc/ceph/ceph.conf'] = ceph_conf
+ client_files[host][f'{cluster_cfg_dir}/ceph.conf'] = ceph_conf
+ ceph_admin_key = (ks.mode, ks.uid, ks.gid, keyring.encode('utf-8'), digest)
+ client_files[host][ks.path] = ceph_admin_key
+ client_files[host][f'{cluster_cfg_dir}/{os.path.basename(ks.path)}'] = ceph_admin_key
except Exception as e:
self.log.warning(
f'unable to calc client keyring {ks.entity} placement {ks.placement}: {e}')
assert cephadm_module.manage_etc_ceph_ceph_conf is True
CephadmServe(cephadm_module)._refresh_hosts_and_daemons()
- _write_file.assert_called_with('test', '/etc/ceph/ceph.conf', b'',
- 0o644, 0, 0, None)
-
- assert '/etc/ceph/ceph.conf' in cephadm_module.cache.get_host_client_files('test')
+ # Make sure both ceph conf locations (default and per fsid) are called
+ _write_file.assert_has_calls([mock.call('test', '/etc/ceph/ceph.conf', b'',
+ 0o644, 0, 0, None),
+ mock.call('test', '/var/lib/ceph/fsid/config/ceph.conf', b'',
+ 0o644, 0, 0, None)]
+ )
+ ceph_conf_files = cephadm_module.cache.get_host_client_files('test')
+ assert len(ceph_conf_files) == 2
+ assert '/etc/ceph/ceph.conf' in ceph_conf_files
+ assert '/var/lib/ceph/fsid/config/ceph.conf' in ceph_conf_files
# set extra config and expect that we deploy another ceph.conf
cephadm_module._set_extra_ceph_conf('[mon]\nk=v')
CephadmServe(cephadm_module)._refresh_hosts_and_daemons()
- _write_file.assert_called_with('test', '/etc/ceph/ceph.conf',
- b'\n\n[mon]\nk=v\n', 0o644, 0, 0, None)
-
+ _write_file.assert_has_calls([mock.call('test',
+ '/etc/ceph/ceph.conf',
+ b'\n\n[mon]\nk=v\n', 0o644, 0, 0, None),
+ mock.call('test',
+ '/var/lib/ceph/fsid/config/ceph.conf',
+ b'\n\n[mon]\nk=v\n', 0o644, 0, 0, None)])
# reload
cephadm_module.cache.last_client_files = {}
cephadm_module.cache.load()
- assert '/etc/ceph/ceph.conf' in cephadm_module.cache.get_host_client_files('test')
+ ceph_conf_files = cephadm_module.cache.get_host_client_files('test')
+ assert len(ceph_conf_files) == 2
+ assert '/etc/ceph/ceph.conf' in ceph_conf_files
+ assert '/var/lib/ceph/fsid/config/ceph.conf' in ceph_conf_files
# Make sure, _check_daemons does a redeploy due to monmap change:
- before_digest = cephadm_module.cache.get_host_client_files('test')[
+ f1_before_digest = cephadm_module.cache.get_host_client_files('test')[
'/etc/ceph/ceph.conf'][0]
+ f2_before_digest = cephadm_module.cache.get_host_client_files(
+ 'test')['/var/lib/ceph/fsid/config/ceph.conf'][0]
cephadm_module._set_extra_ceph_conf('[mon]\nk2=v2')
CephadmServe(cephadm_module)._refresh_hosts_and_daemons()
- after_digest = cephadm_module.cache.get_host_client_files('test')[
+ f1_after_digest = cephadm_module.cache.get_host_client_files('test')[
'/etc/ceph/ceph.conf'][0]
- assert before_digest != after_digest
+ f2_after_digest = cephadm_module.cache.get_host_client_files(
+ 'test')['/var/lib/ceph/fsid/config/ceph.conf'][0]
+ assert f1_before_digest != f1_after_digest
+ assert f2_before_digest != f2_after_digest
def test_etc_ceph_init(self):
with with_cephadm_module({'manage_etc_ceph_ceph_conf': True}) as m: