class CephadmDaemonSpec(Generic[ServiceSpecs]):
# typing.NamedTuple + Generic is broken in py36
def __init__(self, host: str, daemon_id,
- spec: Optional[ServiceSpecs]=None,
- network: Optional[str]=None,
- keyring: Optional[str]=None,
- extra_args: Optional[List[str]]=None,
- extra_config: Optional[Dict[str, Any]]=None,
- daemon_type: Optional[str]=None,
- ports: Optional[List[int]]=None,):
+ spec: Optional[ServiceSpecs] = None,
+ network: Optional[str] = None,
+ keyring: Optional[str] = None,
+ extra_args: Optional[List[str]] = None,
+ extra_config: Optional[Dict[str, Any]] = None,
+ daemon_type: Optional[str] = None,
+ ports: Optional[List[int]] = None,):
"""
Used for
* deploying new daemons. then everything is set
# TCP ports used by the daemon
self.ports: List[int] = ports or []
-
def name(self) -> str:
return '%s.%s' % (self.daemon_type, self.daemon_id)
keyring=daemon_spec.keyring,
extra_ceph_config=daemon_spec.extra_config.pop('config', ''))
-
if daemon_spec.extra_config:
cephadm_config.update({'files': daemon_spec.extra_config})
except MonCommandFailed as e:
logger.warning('Failed to set Dashboard config for %s: %s', service_name, e)
-
-
def ok_to_stop(self, daemon_ids: List[str]) -> HandleCommandResult:
names = [f'{self.TYPE}.{d_id}' for d_id in daemon_ids]
out = f'It is presumed safe to stop {names}'
"""
pass
+
class MonService(CephadmService):
TYPE = 'mon'
elif ':' not in network:
extra_config += 'public addr = %s\n' % network
else:
- raise OrchestratorError('Must specify a CIDR network, ceph addrvec, or plain IP: \'%s\'' % network)
+ raise OrchestratorError(
+ 'Must specify a CIDR network, ceph addrvec, or plain IP: \'%s\'' % network)
else:
# try to get the public_network from the config
ret, network, err = self.mgr.check_mon_command({
})
network = network.strip() if network else network
if not network:
- raise OrchestratorError('Must set public_network config option or specify a CIDR network, ceph addrvec, or plain IP')
+ raise OrchestratorError(
+ 'Must set public_network config option or specify a CIDR network, ceph addrvec, or plain IP')
if '/' not in network:
- raise OrchestratorError('public_network is set but does not look like a CIDR network: \'%s\'' % network)
+ raise OrchestratorError(
+ 'public_network is set but does not look like a CIDR network: \'%s\'' % network)
extra_config += 'public network = %s\n' % network
- daemon_spec.extra_config={'config': extra_config}
- daemon_spec.keyring=keyring
+ daemon_spec.extra_config = {'config': extra_config}
+ daemon_spec.keyring = keyring
return self.mgr._create_daemon(daemon_spec)
new_mons = [m for m in mons if m != mon_id]
new_quorum = [m for m in j['quorum_names'] if m != mon_id]
if len(new_quorum) > len(new_mons) / 2:
- logger.info('Safe to remove mon.%s: new quorum should be %s (from %s)' % (mon_id, new_quorum, new_mons))
+ logger.info('Safe to remove mon.%s: new quorum should be %s (from %s)' %
+ (mon_id, new_quorum, new_mons))
return
- raise OrchestratorError('Removing %s would break mon quorum (new quorum %s, new mons %s)' % (mon_id, new_quorum, new_mons))
-
+ raise OrchestratorError(
+ 'Removing %s would break mon quorum (new quorum %s, new mons %s)' % (mon_id, new_quorum, new_mons))
def pre_remove(self, daemon_id: str) -> None:
self._check_safe_to_destroy(daemon_id)
'mds', 'allow *'],
})
-
# Retrieve ports used by manager modules
# In the case of the dashboard port and with several manager daemons
# running in different hosts, it exists the possibility that the
ports = []
config_ports = ''
ret, mgr_services, err = self.mgr.check_mon_command({
- 'prefix': 'mgr services',
+ 'prefix': 'mgr services',
})
if mgr_services:
mgr_endpoints = json.loads(mgr_services)
daemon_spec.keyring = keyring
return self.mgr._create_daemon(daemon_spec)
-
+
def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
active_mgr_str = self.mgr.get('mgr_map')['active_name']
for daemon in daemon_descrs:
daemon_spec.keyring = keyring
return self.mgr._create_daemon(daemon_spec)
-
+
def get_active_daemon(self, daemon_descrs: List[DaemonDescription]) -> DaemonDescription:
active_mds_strs = list()
for fs in self.mgr.get('fs_map')['filesystems']:
cert_data = spec.rgw_frontend_ssl_certificate
else:
raise OrchestratorError(
- 'Invalid rgw_frontend_ssl_certificate: %s'
- % spec.rgw_frontend_ssl_certificate)
+ 'Invalid rgw_frontend_ssl_certificate: %s'
+ % spec.rgw_frontend_ssl_certificate)
ret, out, err = self.mgr.check_mon_command({
'prefix': 'config-key set',
'key': f'rgw/cert/{spec.rgw_realm}/{spec.rgw_zone}.crt',
key_data = spec.rgw_frontend_ssl_key
else:
raise OrchestratorError(
- 'Invalid rgw_frontend_ssl_key: %s'
- % spec.rgw_frontend_ssl_key)
+ 'Invalid rgw_frontend_ssl_key: %s'
+ % spec.rgw_frontend_ssl_key)
ret, out, err = self.mgr.check_mon_command({
'prefix': 'config-key set',
'key': f'rgw/cert/{spec.rgw_realm}/{spec.rgw_zone}.key',
if utils.get_cluster_health(self.mgr) != 'HEALTH_OK':
raise OrchestratorError('Health not ok, will try agin when health ok')
- #get keyring needed to run rados commands and strip out just the keyring
- keyring = self.get_keyring(rgw_id).split('key = ',1)[1].rstrip()
+ # get keyring needed to run rados commands and strip out just the keyring
+ keyring = self.get_keyring(rgw_id).split('key = ', 1)[1].rstrip()
# We can call radosgw-admin within the container, cause cephadm gives the MGR the required keyring permissions
def get_realms() -> List[str]:
cmd = ['radosgw-admin',
- '--key=%s'%keyring,
- '--user', 'rgw.%s'%rgw_id,
+ '--key=%s' % keyring,
+ '--user', 'rgw.%s' % rgw_id,
'realm', 'list',
'--format=json']
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def create_realm():
cmd = ['radosgw-admin',
- '--key=%s'%keyring,
- '--user', 'rgw.%s'%rgw_id,
+ '--key=%s' % keyring,
+ '--user', 'rgw.%s' % rgw_id,
'realm', 'create',
- '--rgw-realm=%s'%spec.rgw_realm,
+ '--rgw-realm=%s' % spec.rgw_realm,
'--default']
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- self.mgr.log.info('created realm: %s'%spec.rgw_realm)
+ self.mgr.log.info('created realm: %s' % spec.rgw_realm)
def get_zonegroups() -> List[str]:
cmd = ['radosgw-admin',
- '--key=%s'%keyring,
- '--user', 'rgw.%s'%rgw_id,
+ '--key=%s' % keyring,
+ '--user', 'rgw.%s' % rgw_id,
'zonegroup', 'list',
'--format=json']
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def create_zonegroup():
cmd = ['radosgw-admin',
- '--key=%s'%keyring,
- '--user', 'rgw.%s'%rgw_id,
+ '--key=%s' % keyring,
+ '--user', 'rgw.%s' % rgw_id,
'zonegroup', 'create',
'--rgw-zonegroup=default',
'--master', '--default']
def get_zones() -> List[str]:
cmd = ['radosgw-admin',
- '--key=%s'%keyring,
- '--user', 'rgw.%s'%rgw_id,
+ '--key=%s' % keyring,
+ '--user', 'rgw.%s' % rgw_id,
'zone', 'list',
'--format=json']
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def create_zone():
cmd = ['radosgw-admin',
- '--key=%s'%keyring,
- '--user', 'rgw.%s'%rgw_id,
+ '--key=%s' % keyring,
+ '--user', 'rgw.%s' % rgw_id,
'zone', 'create',
'--rgw-zonegroup=default',
- '--rgw-zone=%s'%spec.rgw_zone,
+ '--rgw-zone=%s' % spec.rgw_zone,
'--master', '--default']
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- self.mgr.log.info('created zone: %s'%spec.rgw_zone)
-
+ self.mgr.log.info('created zone: %s' % spec.rgw_zone)
changes = False
realms = get_realms()
# update period if changes were made
if changes:
cmd = ['radosgw-admin',
- '--key=%s'%keyring,
- '--user', 'rgw.%s'%rgw_id,
+ '--key=%s' % keyring,
+ '--user', 'rgw.%s' % rgw_id,
'period', 'update',
- '--rgw-realm=%s'%spec.rgw_realm,
+ '--rgw-realm=%s' % spec.rgw_realm,
'--commit']
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
self.mgr.log.info('updated period')