s = {
'plans': list(self.plans.keys()),
'active': self.active,
- 'mode': self.get_config('mode', default_mode),
+ 'mode': self.get_module_option('mode', default_mode),
}
return (0, json.dumps(s, indent=4), '')
elif command['prefix'] == 'balancer mode':
def serve(self):
self.log.info('Starting')
while self.run:
- self.active = self.get_config('active', '') is not ''
- begin_time = self.get_config('begin_time') or '0000'
- end_time = self.get_config('end_time') or '2400'
+ self.active = self.get_module_option('active', '') is not ''
+ begin_time = self.get_module_option('begin_time') or '0000'
+ end_time = self.get_module_option('end_time') or '2400'
timeofday = time.strftime('%H%M', time.localtime())
self.log.debug('Waking up [%s, scheduled for %s-%s, now %s]',
"active" if self.active else "inactive",
begin_time, end_time, timeofday)
- sleep_interval = float(self.get_config('sleep_interval',
+ sleep_interval = float(self.get_module_option('sleep_interval',
default_sleep_interval))
if self.active and self.time_in_interval(timeofday, begin_time, end_time):
self.log.debug('Running')
self.log.debug('score_by_root %s' % pe.score_by_root)
# get the list of score metrics, comma separated
- metrics = self.get_config('crush_compat_metrics', 'pgs,objects,bytes').split(',')
+ metrics = self.get_module_option('crush_compat_metrics', 'pgs,objects,bytes').split(',')
# total score is just average of normalized stddevs
pe.score = 0.0
def optimize(self, plan):
self.log.info('Optimize plan %s' % plan.name)
- plan.mode = self.get_config('mode', default_mode)
+ plan.mode = self.get_module_option('mode', default_mode)
max_misplaced = float(self.get_option('target_max_misplaced_ratio'))
self.log.info('Mode %s, max misplaced %f' %
(plan.mode, max_misplaced))
def do_upmap(self, plan):
self.log.info('do_upmap')
- max_iterations = int(self.get_config('upmap_max_iterations', 10))
- max_deviation = float(self.get_config('upmap_max_deviation', .01))
+ max_iterations = int(self.get_module_option('upmap_max_iterations', 10))
+ max_deviation = float(self.get_module_option('upmap_max_deviation', .01))
ms = plan.initial
if len(plan.pools):
def do_crush_compat(self, plan):
self.log.info('do_crush_compat')
- max_iterations = int(self.get_config('crush_compat_max_iterations', 25))
+ max_iterations = int(self.get_module_option('crush_compat_max_iterations', 25))
if max_iterations < 1:
return -errno.EINVAL, '"crush_compat_max_iterations" must be >= 1'
- step = float(self.get_config('crush_compat_step', .5))
+ step = float(self.get_module_option('crush_compat_step', .5))
if step <= 0 or step >= 1.0:
return -errno.EINVAL, '"crush_compat_step" must be in (0, 1)'
max_misplaced = float(self.get_option('target_max_misplaced_ratio'))
osdmap = ms.osdmap
crush = osdmap.get_crush()
pe = self.calc_eval(ms, plan.pools)
- min_score_to_optimize = float(self.get_config('min_score', 0))
+ min_score_to_optimize = float(self.get_module_option('min_score', 0))
if pe.score <= min_score_to_optimize:
if pe.score == 0:
detail = 'Distribution is already perfect'
return -errno.EOPNOTSUPP, detail
# rebalance by pgs, objects, or bytes
- metrics = self.get_config('crush_compat_metrics', 'pgs,objects,bytes').split(',')
+ metrics = self.get_module_option('crush_compat_metrics', 'pgs,objects,bytes').split(',')
key = metrics[0] # balancing using the first score metric
if key not in ['pgs', 'bytes', 'objects']:
self.log.warn("Invalid crush_compat balancing key %s. Using 'pgs'." % key)
baseUrl = "/"
scheme = 'https'
- ssl = strtobool(mgr.get_localized_config('ssl', 'True'))
+ ssl = strtobool(mgr.get_localized_module_option('ssl', 'True'))
if not ssl:
scheme = 'http'
JwtManager.set_user(JwtManager.decode_token(token))
token = token.decode('utf-8')
logger.debug("JWT Token: %s", token)
- url_prefix = prepare_url_prefix(mgr.get_config('url_prefix', default=''))
+ url_prefix = prepare_url_prefix(mgr.get_module_option('url_prefix', default=''))
raise cherrypy.HTTPRedirect("{}/#/login?access_token={}".format(url_prefix, token))
else:
return {
# pylint: disable=unused-argument
Saml2._check_python_saml()
JwtManager.reset_user()
- url_prefix = prepare_url_prefix(mgr.get_config('url_prefix', default=''))
+ url_prefix = prepare_url_prefix(mgr.get_module_option('url_prefix', default=''))
raise cherrypy.HTTPRedirect("{}/#/login".format(url_prefix))
:returns our URI
"""
- server_addr = self.get_localized_config('server_addr', '::')
- ssl = strtobool(self.get_localized_config('ssl', 'True'))
+ server_addr = self.get_localized_module_option('server_addr', '::')
+ ssl = strtobool(self.get_localized_module_option('ssl', 'True'))
def_server_port = 8443
if not ssl:
def_server_port = 8080
- server_port = self.get_localized_config('server_port', def_server_port)
+ server_port = self.get_localized_module_option('server_port', def_server_port)
if server_addr is None:
raise ServerConfigException(
'no server_addr configured; '
self.cert_tmp.flush() # cert_tmp must not be gc'ed
cert_fname = self.cert_tmp.name
else:
- cert_fname = self.get_localized_config('crt_file')
+ cert_fname = self.get_localized_module_option('crt_file')
pkey = self.get_store("key")
if pkey is not None:
self.pkey_tmp.flush() # pkey_tmp must not be gc'ed
pkey_fname = self.pkey_tmp.name
else:
- pkey_fname = self.get_localized_config('key_file')
+ pkey_fname = self.get_localized_module_option('key_file')
if not cert_fname or not pkey_fname:
raise ServerConfigException('no certificate configured')
cherrypy.config.update(config)
- self._url_prefix = prepare_url_prefix(self.get_config('url_prefix',
+ self._url_prefix = prepare_url_prefix(self.get_module_option('url_prefix',
default=''))
uri = "{0}://{1}:{2}{3}/".format(
self.set_config('jwt_token_ttl', str(cmd['seconds']))
return 0, 'JWT token TTL updated', ''
elif cmd['prefix'] == 'dashboard get-jwt-token-ttl':
- ttl = self.get_config('jwt_token_ttl', JwtManager.JWT_TOKEN_TTL)
+ ttl = self.get_module_option('jwt_token_ttl', JwtManager.JWT_TOKEN_TTL)
return 0, str(ttl), ''
elif cmd['prefix'] == 'dashboard create-self-signed-cert':
self.create_self_signed_cert()
logger.debug("AC: Checking for previews DB versions")
if self.VERSION == 1: # current version
# check if there is username/password from previous version
- username = mgr.get_config('username', None)
- password = mgr.get_config('password', None)
+ username = mgr.get_module_option('username', None)
+ password = mgr.get_module_option('password', None)
if username and password:
logger.debug("AC: Found single user credentials: user=%s",
username)
def gen_token(cls, username):
if not cls._secret:
cls.init()
- ttl = mgr.get_config('jwt_token_ttl', cls.JWT_TOKEN_TTL)
+ ttl = mgr.get_module_option('jwt_token_ttl', cls.JWT_TOKEN_TTL)
ttl = int(ttl)
now = int(time.mktime(time.gmtime()))
payload = {
except Exception:
return -errno.EINVAL, '', 'Invalid parameter `idp_metadata`.'
- url_prefix = prepare_url_prefix(mgr.get_config('url_prefix', default=''))
+ url_prefix = prepare_url_prefix(mgr.get_module_option('url_prefix', default=''))
settings = {
'sp': {
'entityId': '{}{}/auth/saml2/metadata'.format(ceph_dashboard_base_url, url_prefix),
class SettingsMeta(type):
def __getattr__(cls, attr):
default, stype = getattr(Options, attr)
- if stype == bool and str(mgr.get_config(attr,
+ if stype == bool and str(mgr.get_module_option(attr,
default)).lower() == 'false':
value = False
else:
- value = stype(mgr.get_config(attr, default))
+ value = stype(mgr.get_module_option(attr, default))
return value
def __setattr__(cls, attr, value):
return dict((o['name'], o.get('default', None)) for o in self.MODULE_OPTIONS)
- def get_config(self, key, default=None):
+ def get_module_option(self, key, default=None):
"""
- Overrides the default MgrModule get_config() method to pull in defaults
+ Overrides the default MgrModule get_module_option() method to pull in defaults
specific to this module
"""
- return super(DeepSeaOrchestrator, self).get_config(key, default=self.config_keys[key])
+ return super(DeepSeaOrchestrator, self).get_module_option(key, default=self.config_keys[key])
def _config_valid(self):
for key in self.config_keys.keys():
- if not self.get_config(key, self.config_keys[key]):
+ if not self.get_module_option(key, self.config_keys[key]):
return False
return True
def handle_command(self, inbuf, cmd):
if cmd['prefix'] == 'deepsea config-show':
- return 0, json.dumps(dict([(key, self.get_config(key)) for key in self.config_keys.keys()])), ''
+ return 0, json.dumps(dict([(key, self.get_module_option(key)) for key in self.config_keys.keys()])), ''
elif cmd['prefix'] == 'deepsea config-set':
if cmd['key'] not in self.config_keys.keys():
"""
returns the response, which the caller then has to read
"""
- url = "{0}/{1}".format(self.get_config('salt_api_url'), path)
+ url = "{0}/{1}".format(self.get_module_option('salt_api_url'), path)
try:
if method.lower() == 'get':
resp = requests.get(url, headers = { "X-Auth-Token": self._token },
def _login(self):
resp = self._do_request('POST', 'login', data = {
- "eauth": self.get_config('salt_api_eauth'),
- "sharedsecret" if self.get_config('salt_api_eauth') == 'sharedsecret' else 'password': self.get_config('salt_api_password'),
- "username": self.get_config('salt_api_username')
+ "eauth": self.get_module_option('salt_api_eauth'),
+ "sharedsecret" if self.get_module_option('salt_api_eauth') == 'sharedsecret' else 'password': self.get_module_option('salt_api_password'),
+ "username": self.get_module_option('salt_api_username')
})
self._token = resp.json()['return'][0]['token']
self.log.info("Salt API login successful")
for opt in self.MODULE_OPTIONS:
setattr(self,
opt['name'],
- self.get_config(opt['name']) or opt['default'])
+ self.get_module_option(opt['name']) or opt['default'])
self.log.debug(' %s = %s', opt['name'], getattr(self, opt['name']))
def serve(self):
for opt in self.MODULE_OPTIONS:
setattr(self,
opt['name'],
- self.get_config(opt['name']) or opt['default'])
+ self.get_module_option(opt['name']) or opt['default'])
self.log.debug(' %s = %s', opt['name'], getattr(self, opt['name']))
if not self._activated_cloud and self.get_option('device_failure_prediction_mode') == 'cloud':
self._event.set()
return True
def get_configuration(self, key):
- return self.get_config(key, self.config_keys[key])
+ return self.get_module_option(key, self.config_keys[key])
@staticmethod
def _convert_timestamp(predicted_timestamp, life_expectancy_day):
for opt in self.MODULE_OPTIONS:
setattr(self,
opt['name'],
- self.get_config(opt['name']) or opt['default'])
+ self.get_module_option(opt['name']) or opt['default'])
self.log.debug(' %s = %s', opt['name'], getattr(self, opt['name']))
def _status(self, cmd):
def show_module_config(self):
for key, default in self.config_keys.items():
- self.set_config_option(key, self.get_config(key, default))
+ self.set_config_option(key, self.get_module_option(key, default))
def serve(self):
self.log.info('Starting diskprediction module')
for opt in self.MODULE_OPTIONS:
setattr(self,
opt['name'],
- self.get_config(opt['name']) or opt['default'])
+ self.get_module_option(opt['name']) or opt['default'])
self.log.debug(' %s = %s', opt['name'], getattr(self, opt['name']))
if self.get_option('device_failure_prediction_mode') == 'local':
self._event.set()
for opt in self.MODULE_OPTIONS:
setattr(self,
opt['name'],
- self.get_config(opt['name']) or opt['default'])
+ self.get_module_option(opt['name']) or opt['default'])
self.log.debug(' %s = %s', opt['name'], getattr(self, opt['name']))
def handle_command(self, _, cmd):
def init_module_config(self):
self.config['hostname'] = \
- self.get_config("hostname", default=self.config_keys['hostname'])
+ self.get_module_option("hostname", default=self.config_keys['hostname'])
self.config['port'] = \
- int(self.get_config("port", default=self.config_keys['port']))
+ int(self.get_module_option("port", default=self.config_keys['port']))
self.config['database'] = \
- self.get_config("database", default=self.config_keys['database'])
+ self.get_module_option("database", default=self.config_keys['database'])
self.config['username'] = \
- self.get_config("username", default=self.config_keys['username'])
+ self.get_module_option("username", default=self.config_keys['username'])
self.config['password'] = \
- self.get_config("password", default=self.config_keys['password'])
+ self.get_module_option("password", default=self.config_keys['password'])
self.config['interval'] = \
- int(self.get_config("interval",
+ int(self.get_module_option("interval",
default=self.config_keys['interval']))
self.config['threads'] = \
- int(self.get_config("threads",
+ int(self.get_module_option("threads",
default=self.config_keys['threads']))
self.config['batch_size'] = \
- int(self.get_config("batch_size",
+ int(self.get_module_option("batch_size",
default=self.config_keys['batch_size']))
- ssl = self.get_config("ssl", default=self.config_keys['ssl'])
+ ssl = self.get_module_option("ssl", default=self.config_keys['ssl'])
self.config['ssl'] = ssl.lower() == 'true'
verify_ssl = \
- self.get_config("verify_ssl", default=self.config_keys['verify_ssl'])
+ self.get_module_option("verify_ssl", default=self.config_keys['verify_ssl'])
self.config['verify_ssl'] = verify_ssl.lower() == 'true'
def gather_statistics(self):
"""
Check pools on each OSDMap change
"""
- subtree_type = self.get_config('subtree') or 'rack'
- failure_domain = self.get_config('failure_domain') or 'host'
- pg_num = self.get_config('pg_num') or '128'
- num_rep = self.get_config('num_rep') or '3'
- min_size = self.get_config('min_size')
- prefix = self.get_config('prefix') or 'by-' + subtree_type + '-'
+ subtree_type = self.get_module_option('subtree') or 'rack'
+ failure_domain = self.get_module_option('failure_domain') or 'host'
+ pg_num = self.get_module_option('pg_num') or '128'
+ num_rep = self.get_module_option('num_rep') or '3'
+ min_size = self.get_module_option('min_size')
+ prefix = self.get_module_option('prefix') or 'by-' + subtree_type + '-'
osdmap = self.get("osd_map")
lpools = []
def get_mgr_id(self):
return self._ceph_get_mgr_id()
- def get_config(self, key, default=None):
+ def get_module_option(self, key, default=None):
"""
Retrieve the value of a persistent configuration setting
def get_active_uri(self):
return self._ceph_get_active_uri()
- def get_localized_config(self, key, default=None):
- r = self.get_config(self.get_mgr_id() + '/' + key)
+ def get_localized_module_option(self, key, default=None):
+ r = self.get_module_option(self.get_mgr_id() + '/' + key)
if r is None:
- r = self.get_config(key)
+ r = self.get_module_option(key)
if r is None:
r = default
else:
return r
- def get_config(self, key, default=None):
+ def get_module_option(self, key, default=None):
"""
Retrieve the value of a persistent configuration setting
def _set_localized(self, key, val, setter):
return setter(self.get_mgr_id() + '/' + key, val)
- def get_localized_config(self, key, default=None):
+ def get_localized_module_option(self, key, default=None):
"""
Retrieve localized configuration for this ceph-mgr instance
:param str key:
]
def _select_orchestrator(self):
- o = self.get_config("orchestrator")
+ o = self.get_module_option("orchestrator")
if o is None:
raise NoOrchestrator()
raise cherrypy.HTTPError(503, 'No MON connection')
# Make the cache timeout for collecting configurable
- self.collect_timeout = self.get_localized_config('scrape_interval', 5.0)
+ self.collect_timeout = self.get_localized_module_option('scrape_interval', 5.0)
- server_addr = self.get_localized_config('server_addr', DEFAULT_ADDR)
- server_port = self.get_localized_config('server_port', DEFAULT_PORT)
+ server_addr = self.get_localized_module_option('server_addr', DEFAULT_ADDR)
+ server_port = self.get_localized_module_option('server_port', DEFAULT_PORT)
self.log.info(
"server_addr: %s server_port: %s" %
(server_addr, server_port)
self.shutdown_event = threading.Event()
def serve(self):
- server_addr = self.get_localized_config('server_addr', '::')
- server_port = self.get_localized_config('server_port', DEFAULT_PORT)
+ server_addr = self.get_localized_module_option('server_addr', '::')
+ server_port = self.get_localized_module_option('server_port', DEFAULT_PORT)
self.log.info("server_addr: %s server_port: %s" % (server_addr, server_port))
cherrypy.config.update({
'server.socket_host': server_addr,
separators=(',', ': '),
)
- server_addr = self.get_localized_config('server_addr', '::')
+ server_addr = self.get_localized_module_option('server_addr', '::')
if server_addr is None:
raise CannotServe('no server_addr configured; try "ceph config-key set mgr/restful/server_addr <ip>"')
- server_port = int(self.get_localized_config('server_port', '8003'))
+ server_port = int(self.get_localized_module_option('server_port', '8003'))
self.log.info('server_addr: %s server_port: %d',
server_addr, server_port)
pkey_tmp.flush()
pkey_fname = pkey_tmp.name
else:
- pkey_fname = self.get_localized_config('key_file')
+ pkey_fname = self.get_localized_module_option('key_file')
if not cert_fname or not pkey_fname:
raise CannotServe('no certificate configured')
else:
return 0, '', 'No background workload was running'
elif command['prefix'] == 'mgr self-test config get':
- return 0, str(self.get_config(command['key'])), ''
+ return 0, str(self.get_module_option(command['key'])), ''
elif command['prefix'] == 'mgr self-test config get_localized':
- return 0, str(self.get_localized_config(command['key'])), ''
+ return 0, str(self.get_localized_module_option(command['key'])), ''
elif command['prefix'] == 'mgr self-test remote':
self._test_remote_calls()
return 0, '', 'Successfully called'
# persisted), it's just for the python interface bit.
self.set_config("testkey", "testvalue")
- assert self.get_config("testkey") == "testvalue"
+ assert self.get_module_option("testkey") == "testvalue"
self.set_localized_config("testkey", "testvalue")
- assert self.get_localized_config("testkey") == "testvalue"
+ assert self.get_localized_module_option("testkey") == "testvalue"
def _self_test_store(self):
existing_keys = set(self.get_store_prefix("test").keys())
def init_module_config(self):
self.config['address'] = \
- self.get_config("address", default=self.config_keys['address'])
+ self.get_module_option("address", default=self.config_keys['address'])
self.config['interval'] = \
- int(self.get_config("interval",
+ int(self.get_module_option("interval",
default=self.config_keys['interval']))
def now(self):
def init_module_config(self):
for key, default in self.config_keys.items():
- self.set_config_option(key, self.get_config(key, default))
+ self.set_config_option(key, self.get_module_option(key, default))
self.last_upload = self.get_store('last_upload', None)
if self.last_upload is not None:
self.log.debug('Found Ceph fsid %s', self.fsid)
for key, default in self.config_keys.items():
- self.set_config_option(key, self.get_config(key, default))
+ self.set_config_option(key, self.get_module_option(key, default))
def set_config_option(self, option, value):
if option not in self.config_keys.keys():