aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshmel1k <shmel1k@ydb.tech>2023-11-28 14:52:07 +0300
committershmel1k <shmel1k@ydb.tech>2023-11-28 17:11:34 +0300
commit945d29a9978481ed294621003282e65243ad116a (patch)
treebcae87035e7707e7be61c09ddf5a441e2e5da527
parentf9f8c00f535ef8a439a77952ddec79f6b277fdda (diff)
downloadydb-945d29a9978481ed294621003282e65243ad116a.tar.gz
move kikimr_configure to opensource
-rw-r--r--ydb/tools/cfg/base.py390
1 files changed, 196 insertions, 194 deletions
diff --git a/ydb/tools/cfg/base.py b/ydb/tools/cfg/base.py
index f139cfba32..3bf9c8a0a8 100644
--- a/ydb/tools/cfg/base.py
+++ b/ydb/tools/cfg/base.py
@@ -24,32 +24,32 @@ DEFAULT_BOX_ID = 1
# MOVE THESE DEFAULTS TO YDB CODE
VDISKS_DEFAULT_CONFIG = {
- 'vdisk_kinds': [
- {'kind': 'Log', 'base_kind': 'Default', 'config': {'fresh_use_dreg': True, 'allow_keep_flags': False}},
+ "vdisk_kinds": [
+ {"kind": "Log", "base_kind": "Default", "config": {"fresh_use_dreg": True, "allow_keep_flags": False}},
{
- 'kind': 'LocalMode',
- 'base_kind': 'Default',
- 'config': {'hull_comp_level0_max_ssts_at_once': 2, 'hull_comp_sorted_parts_num': 1},
+ "kind": "LocalMode",
+ "base_kind": "Default",
+ "config": {"hull_comp_level0_max_ssts_at_once": 2, "hull_comp_sorted_parts_num": 1},
},
]
}
GRPC_DEFAULT_CONFIG = {
- 'port': 2135,
- 'host': "[::]",
- 'start_grpc_proxy': True,
- 'grpc_memory_quota_bytes': 1073741824,
- 'streaming_config': {'enable_output_streams': True},
- 'keep_alive_enable': True,
- 'keep_alive_idle_timeout_trigger_sec': 90,
- 'keep_alive_max_probe_count': 3,
- 'keep_alive_probe_interval_sec': 10,
+ "port": 2135,
+ "host": "[::]",
+ "start_grpc_proxy": True,
+ "grpc_memory_quota_bytes": 1073741824,
+ "streaming_config": {"enable_output_streams": True},
+ "keep_alive_enable": True,
+ "keep_alive_idle_timeout_trigger_sec": 90,
+ "keep_alive_max_probe_count": 3,
+ "keep_alive_probe_interval_sec": 10,
}
-DYNAMIC_NAME_SERVICE = {'max_static_node_id': 50000}
+DYNAMIC_NAME_SERVICE = {"max_static_node_id": 50000}
IC_DEFAULT_CONFIG = {
- 'start_tcp': True,
+ "start_tcp": True,
}
@@ -77,36 +77,34 @@ class KiKiMRDrive(object):
)
def __hash__(self):
- return hash(
- '\0'.join(map(str, (self.type, self.path, self.shared_with_os, self.expected_slot_count, self.kind)))
- )
+ return hash("\0".join(map(str, (self.type, self.path, self.shared_with_os, self.expected_slot_count, self.kind))))
Domain = collections.namedtuple(
- '_Domain',
+ "_Domain",
[
- 'domain_name',
- 'domain_id',
- 'plan_resolution',
- 'mediators',
- 'coordinators',
- 'allocators',
- 'dynamic_slots',
- 'storage_pool_kinds',
- 'storage_pools',
- 'tenants',
- 'console_initializers',
- 'bind_slots_to_numa_nodes',
- 'config_cookie',
+ "domain_name",
+ "domain_id",
+ "plan_resolution",
+ "mediators",
+ "coordinators",
+ "allocators",
+ "dynamic_slots",
+ "storage_pool_kinds",
+ "storage_pools",
+ "tenants",
+ "console_initializers",
+ "bind_slots_to_numa_nodes",
+ "config_cookie",
],
)
KiKiMRHost = collections.namedtuple(
- '_KiKiMRHost', ['hostname', 'node_id', 'drives', 'ic_port', 'body', 'datacenter', 'rack', 'host_config_id']
+ "_KiKiMRHost", ["hostname", "node_id", "drives", "ic_port", "body", "datacenter", "rack", "host_config_id"]
)
DEFAULT_PLAN_RESOLUTION = 10
-DEFAULT_DOMAIN = {'domain_name': 'Root', 'domain_id': 1, 'plan_resolution': DEFAULT_PLAN_RESOLUTION}
+DEFAULT_DOMAIN = {"domain_name": "Root", "domain_id": 1, "plan_resolution": DEFAULT_PLAN_RESOLUTION}
DEFAULT_RESOURCE_BROKER_CPU_LIMIT = 20
DEFAULT_RESOURCE_BROKER_MEMORY_LIMIT = 16 * (1024**3)
@@ -141,7 +139,7 @@ class StoragePool(object):
def __setattr__(self, key, value):
super(StoragePool, self).__setattr__(key, value)
- if key.startswith('_'):
+ if key.startswith("_"):
return
if key not in self._dict_items or self._dict_items[key] != value:
@@ -165,7 +163,7 @@ class StoragePoolKind(object):
def __setattr__(self, key, value):
super(StoragePoolKind, self).__setattr__(key, value)
- if key.startswith('_'):
+ if key.startswith("_"):
return
if key not in self._dict_items or self._dict_items[key] != value:
@@ -176,32 +174,32 @@ class StoragePoolKind(object):
Subdomain = collections.namedtuple(
- '_Subdomain',
+ "_Subdomain",
[
- 'domain',
- 'name',
- 'plan_resolution',
- 'mediators',
- 'coordinators',
- 'storage_pools',
+ "domain",
+ "name",
+ "plan_resolution",
+ "mediators",
+ "coordinators",
+ "storage_pools",
],
)
DynamicSlot = collections.namedtuple(
- '_DynamicSlot',
+ "_DynamicSlot",
[
- 'domain',
- 'id',
+ "domain",
+ "id",
],
)
Profile = collections.namedtuple(
- '_Profile',
+ "_Profile",
[
- 'channels',
+ "channels",
],
)
-Channel = collections.namedtuple('_Channel', ['erasure', 'pdisk_type', 'vdisk_kind', 'storage_pool_kind'])
+Channel = collections.namedtuple("_Channel", ["erasure", "pdisk_type", "vdisk_kind", "storage_pool_kind"])
class StorageUnit(object):
@@ -218,9 +216,7 @@ class ComputeUnit(object):
class Tenant(object):
- def __init__(
- self, name, storage_units, compute_units=None, overridden_configs=None, shared=False, plan_resolution=None
- ):
+ def __init__(self, name, storage_units, compute_units=None, overridden_configs=None, shared=False, plan_resolution=None):
self.name = name
self.overridden_configs = overridden_configs
self.storage_units = tuple(StorageUnit(**storage_unit_template) for storage_unit_template in storage_units)
@@ -243,16 +239,21 @@ class _ClusterDescription(dict):
def from_template(cls, template):
return cls(**template)
+ def set_validator(self, validator):
+ self.__validator = validator
+
def validate(self):
- return validation.validate(self)
+ if not self.__validator:
+ return
+ return self.__validator.validate(self)
def get_full_tenant_name(domain, tenant_name):
- return os.path.join('/', domain, tenant_name)
+ return os.path.join("/", domain, tenant_name)
def get_tenant_domain(tenant):
- for part in tenant.split('/'):
+ for part in tenant.split("/"):
if part:
return part
raise RuntimeError()
@@ -263,14 +264,20 @@ def normalize_domain(domain_name):
class ClusterDetailsProvider(object):
- def __init__(self, template, walle_provider, database=None):
+ def __init__(self, template, walle_provider, validator=None, database=None):
+ if not validator:
+ validator = validation.Validator()
+
+ self.__validator = validator
+
self.__cluster_description = _ClusterDescription.from_template(template)
+ self.__cluster_description.set_validator(self.__validator)
self.__cluster_description.validate()
if database is not None:
- self.__cluster_description = self.get_subjective_description(self.__cluster_description, database)
+ self.__cluster_description = self.get_subjective_description(self.__cluster_description, database, self.__validator)
- self._use_walle = self.__cluster_description.get('use_walle', True)
+ self._use_walle = self.__cluster_description.get("use_walle", True)
if not walle_provider:
walle_provider = walle.NopHostsFetcher()
self._walle = walle_provider
@@ -279,13 +286,13 @@ class ClusterDetailsProvider(object):
self.__racks = {}
self.__bodies = {}
self.__dcs = {}
- self.use_new_style_kikimr_cfg = self.__cluster_description.get('use_new_style_kikimr_cfg', False)
- self.need_generate_app_config = self.__cluster_description.get('need_generate_app_config', False)
- self.need_txt_files = self.__cluster_description.get('need_txt_files', True)
- self.use_auto_config = self.__cluster_description.get('use_auto_config', False)
- self.static_cpu_count = self.__cluster_description.get('static_cpu_count', 20)
- self.dynamic_cpu_count = self.__cluster_description.get('dynamic_cpu_count', 8)
- self.blob_storage_config = self.__cluster_description.get('blob_storage_config')
+ self.use_new_style_kikimr_cfg = self.__cluster_description.get("use_new_style_kikimr_cfg", False)
+ self.need_generate_app_config = self.__cluster_description.get("need_generate_app_config", False)
+ self.need_txt_files = self.__cluster_description.get("need_txt_files", True)
+ self.use_auto_config = self.__cluster_description.get("use_auto_config", False)
+ self.static_cpu_count = self.__cluster_description.get("static_cpu_count", 20)
+ self.dynamic_cpu_count = self.__cluster_description.get("dynamic_cpu_count", 8)
+ self.blob_storage_config = self.__cluster_description.get("blob_storage_config")
if not self.need_txt_files and not self.use_new_style_kikimr_cfg:
assert "cannot remove txt files without new style kikimr cfg!"
@@ -293,37 +300,38 @@ class ClusterDetailsProvider(object):
self._thread_pool = ThreadPoolExecutor(max_workers=8)
@staticmethod
- def get_subjective_description(objective_description, tenant):
+ def get_subjective_description(objective_description, tenant, validator):
overridden_configurations = {}
domain_of_tenant = get_tenant_domain(tenant)
- for domain_template in objective_description.get('domains', []):
- if normalize_domain(domain_template.get('domain_name')) != domain_of_tenant:
+ for domain_template in objective_description.get("domains", []):
+ if normalize_domain(domain_template.get("domain_name")) != domain_of_tenant:
continue
- all_domain_tenants = domain_template.get('databases', [])
+ all_domain_tenants = domain_template.get("databases", [])
for current_tenant in all_domain_tenants:
- if get_full_tenant_name(domain_of_tenant, current_tenant.get('name')) != tenant:
+ if get_full_tenant_name(domain_of_tenant, current_tenant.get("name")) != tenant:
continue
- overridden_configurations = current_tenant.get('overridden_configs', {})
+ overridden_configurations = current_tenant.get("overridden_configs", {})
for service in (
- 'nfs',
- 'nfs_control',
- 'nbs',
- 'nbs_control',
+ "nfs",
+ "nfs_control",
+ "nbs",
+ "nbs_control",
):
if service in overridden_configurations:
- overridden_configurations[service]['domain'] = domain_template.get('domain_name')
- overridden_configurations[service]['subdomain'] = current_tenant.get('name')
+ overridden_configurations[service]["domain"] = domain_template.get("domain_name")
+ overridden_configurations[service]["subdomain"] = current_tenant.get("name")
subjective_description = _ClusterDescription(dict(objective_description))
subjective_description.update(overridden_configurations)
+ subjective_description.set_validator(validator)
subjective_description.validate()
return subjective_description
@property
def storage_config_generation(self):
- return self.__cluster_description.get('storage_config_generation', 0)
+ return self.__cluster_description.get("storage_config_generation", 0)
@property
def use_walle(self):
@@ -331,30 +339,30 @@ class ClusterDetailsProvider(object):
@property
def security_settings(self):
- return self.__cluster_description.get('security_settings', {})
+ return self.__cluster_description.get("security_settings", {})
@property
def forbid_implicit_storage_pools(self):
- return self.__cluster_description.get('forbid_implicit_storage_pools', False)
+ return self.__cluster_description.get("forbid_implicit_storage_pools", False)
def _get_datacenter(self, host_description):
- if host_description.get('datacenter') is not None:
- return str(host_description.get('datacenter'))
- return str(self._walle.get_datacenter(host_description['name']))
+ if host_description.get("datacenter") is not None:
+ return str(host_description.get("datacenter"))
+ return str(self._walle.get_datacenter(host_description["name"]))
def _get_rack(self, host_description):
- if host_description.get('rack') is not None:
- return str(host_description.get('rack'))
- return str(self._walle.get_rack(host_description['name']))
+ if host_description.get("rack") is not None:
+ return str(host_description.get("rack"))
+ return str(self._walle.get_rack(host_description["name"]))
def _get_body(self, host_description):
- if host_description.get('body') is not None:
- return str(host_description.get('body'))
- return str(self._walle.get_body(host_description['name']))
+ if host_description.get("body") is not None:
+ return str(host_description.get("body"))
+ return str(self._walle.get_body(host_description["name"]))
def _collect_drives_info(self, host_description):
- host_config_id = host_description.get('host_config_id', None)
- drives = host_description.get('drives', [])
+ host_config_id = host_description.get("host_config_id", None)
+ drives = host_description.get("drives", [])
drives = tuple(KiKiMRDrive(**drive) for drive in drives)
if host_config_id is not None:
host_config = None
@@ -368,26 +376,26 @@ class ClusterDetailsProvider(object):
def __collect_host_info(self, node_id, host_description):
return KiKiMRHost(
- hostname=host_description['name'],
+ hostname=host_description["name"],
node_id=host_description.get("node_id", node_id),
drives=self._collect_drives_info(host_description),
- ic_port=host_description.get('ic_port', DEFAULT_INTERCONNECT_PORT),
+ ic_port=host_description.get("ic_port", DEFAULT_INTERCONNECT_PORT),
body=self._get_body(host_description),
datacenter=self._get_datacenter(host_description),
rack=self._get_rack(host_description),
- host_config_id=host_description.get('host_config_id', None),
+ host_config_id=host_description.get("host_config_id", None),
)
@property
def use_fixed_tablet_types(self):
- return self.__cluster_description.get('use_fixed_tablet_types', False)
+ return self.__cluster_description.get("use_fixed_tablet_types", False)
@property
def hosts(self):
if self._hosts is not None:
return self._hosts
futures = []
- for node_id, host_description in enumerate(self.__cluster_description.get('hosts'), 1):
+ for node_id, host_description in enumerate(self.__cluster_description.get("hosts"), 1):
futures.append(self._thread_pool.submit(self.__collect_host_info, node_id, host_description))
r = []
@@ -404,15 +412,15 @@ class ClusterDetailsProvider(object):
@property
def state_storages(self):
- return self.__cluster_description.get('state_storages', [])
+ return self.__cluster_description.get("state_storages", [])
@property
def state_storage_node_ids(self):
- node_ids = self.__cluster_description.get('state_storage', {}).get('node_ids', [])
+ node_ids = self.__cluster_description.get("state_storage", {}).get("node_ids", [])
if node_ids:
return node_ids
- state_storage_node_set = set(self.__cluster_description.get('state_storage', {}).get('node_set', []))
+ state_storage_node_set = set(self.__cluster_description.get("state_storage", {}).get("node_set", []))
if len(state_storage_node_set) < 1:
return [host.node_id for host in self.static_bs_group_hosts]
node_ids = []
@@ -423,11 +431,11 @@ class ClusterDetailsProvider(object):
@property
def allow_incorrect_state_storage(self):
- return self.__cluster_description.get('state_storage', {}).get('allow_incorrect', False)
+ return self.__cluster_description.get("state_storage", {}).get("allow_incorrect", False)
@property
def static_bs_group_hosts(self):
- static_bs_group_filter = self.__cluster_description.get('static_bs_group_hosts', [])
+ static_bs_group_filter = self.__cluster_description.get("static_bs_group_hosts", [])
matched = []
for host in self.hosts:
if host.hostname in static_bs_group_filter or len(static_bs_group_filter) == 0:
@@ -444,29 +452,29 @@ class ClusterDetailsProvider(object):
@property
def monitor_address(self):
- return self.__cluster_description.get('monitoring_address', "")
+ return self.__cluster_description.get("monitoring_address", "")
@property
def use_cluster_uuid(self):
- return self.__cluster_description.get('use_cluster_uuid', True)
+ return self.__cluster_description.get("use_cluster_uuid", True)
@property
def cluster_uuid(self):
- return self.__cluster_description.get('cluster_uuid', None)
+ return self.__cluster_description.get("cluster_uuid", None)
@property
def accepted_cluster_uuids(self):
- return self.__cluster_description.get('accepted_cluster_uuids', [])
+ return self.__cluster_description.get("accepted_cluster_uuids", [])
@property
def host_configs(self):
converted_host_configs = []
- for host_config in self.__cluster_description.get('host_configs', []):
- host_config_drives = host_config.get('drives', [])
+ for host_config in self.__cluster_description.get("host_configs", []):
+ host_config_drives = host_config.get("drives", [])
converted_host_configs.append(
HostConfig(
- host_config_id=host_config['host_config_id'],
- generation=host_config.get('generation', 0),
+ host_config_id=host_config["host_config_id"],
+ generation=host_config.get("generation", 0),
drives=tuple(KiKiMRDrive(**drive) for drive in host_config_drives),
)
)
@@ -480,20 +488,20 @@ class ClusterDetailsProvider(object):
for storage_pool_kind in domain.storage_pool_kinds.values():
storage_pool_kinds.append(storage_pool_kind)
- for profile in self.__cluster_description.get('profiles', []):
+ for profile in self.__cluster_description.get("profiles", []):
profile_channels = []
- for channel in profile.get('channels', []):
- erasure = channel.get('erasure', str(self.static_erasure))
- pdisk_type = channel.get('pdisk_type')
+ for channel in profile.get("channels", []):
+ erasure = channel.get("erasure", str(self.static_erasure))
+ pdisk_type = channel.get("pdisk_type")
pdisk_type = None if pdisk_type is None else types.PDiskCategory.from_string(pdisk_type)
- channel_storage_pool_kind = channel.get('storage_pool_kind', None)
+ channel_storage_pool_kind = channel.get("storage_pool_kind", None)
if channel_storage_pool_kind is not None and pdisk_type is None:
pdisk_type = None
for storage_pool_kind in storage_pool_kinds:
if channel_storage_pool_kind == storage_pool_kind.kind:
f_properties = storage_pool_kind.filter_properties
- pdisk_type = types.PDiskCategory.from_string(f_properties['type'])
+ pdisk_type = types.PDiskCategory.from_string(f_properties["type"])
assert pdisk_type is not None
@@ -501,7 +509,7 @@ class ClusterDetailsProvider(object):
Channel(
erasure=types.Erasure.from_string(erasure),
pdisk_type=pdisk_type,
- vdisk_kind=channel.get('vdisk_kind', "Default"),
+ vdisk_kind=channel.get("vdisk_kind", "Default"),
storage_pool_kind=channel_storage_pool_kind,
)
)
@@ -513,13 +521,13 @@ class ClusterDetailsProvider(object):
@staticmethod
def __storage_pool_kind(storage_description):
return StoragePoolKind(
- kind=storage_description.get('kind'),
+ kind=storage_description.get("kind"),
box_id=storage_description.get("box_id", DEFAULT_BOX_ID),
- erasure=storage_description.get('erasure'),
- filter_properties=storage_description.get('filter_properties', {}),
- fail_domain_type=storage_description.get('fail_domain_type', DEFAULT_FAIL_DOMAIN_TYPE),
- vdisk_kind=storage_description.get('vdisk_kind', 'Default'),
- encryption_mode=storage_description.get('encryption_mode', 0),
+ erasure=storage_description.get("erasure"),
+ filter_properties=storage_description.get("filter_properties", {}),
+ fail_domain_type=storage_description.get("fail_domain_type", DEFAULT_FAIL_DOMAIN_TYPE),
+ vdisk_kind=storage_description.get("vdisk_kind", "Default"),
+ encryption_mode=storage_description.get("encryption_mode", 0),
)
@property
@@ -536,46 +544,44 @@ class ClusterDetailsProvider(object):
@property
def domains(self):
- cl_desc_domains = self.__cluster_description.get('domains', [DEFAULT_DOMAIN])
+ cl_desc_domains = self.__cluster_description.get("domains", [DEFAULT_DOMAIN])
domains = []
for domain_id, domain in enumerate(cl_desc_domains, 1):
- domain_name = domain.get('domain_name')
+ domain_name = domain.get("domain_name")
storage_pool_kinds = {
- pool_kind.get('kind'): self.__storage_pool_kind(pool_kind)
- for pool_kind in domain.get('storage_pool_kinds', [])
+ pool_kind.get("kind"): self.__storage_pool_kind(pool_kind) for pool_kind in domain.get("storage_pool_kinds", [])
}
assert len(set(storage_pool_kinds.keys())) == len(
storage_pool_kinds.keys()
), "required unique kind value in storage_pool_kinds items"
storage_pools = [
- self.__storage_pool(storage_pool_kinds, pool_instance, domain_name)
- for pool_instance in domain.get('storage_pools', [])
+ self.__storage_pool(storage_pool_kinds, pool_instance, domain_name) for pool_instance in domain.get("storage_pools", [])
]
domains.append(
Domain(
domain_name=domain_name,
- domain_id=domain.get('domain_id', domain_id),
- mediators=domain.get('mediators', self.__coordinators_count_optimal),
- coordinators=domain.get('coordinators', self.__mediators_count_optimal),
- allocators=domain.get('allocators', self.__allocators_count_optimal),
- plan_resolution=domain.get('plan_resolution', DEFAULT_PLAN_RESOLUTION),
- dynamic_slots=domain.get('dynamic_slots', 0),
+ domain_id=domain.get("domain_id", domain_id),
+ mediators=domain.get("mediators", self.__coordinators_count_optimal),
+ coordinators=domain.get("coordinators", self.__mediators_count_optimal),
+ allocators=domain.get("allocators", self.__allocators_count_optimal),
+ plan_resolution=domain.get("plan_resolution", DEFAULT_PLAN_RESOLUTION),
+ dynamic_slots=domain.get("dynamic_slots", 0),
storage_pool_kinds=storage_pool_kinds,
storage_pools=storage_pools,
tenants=self._get_domain_tenants(domain),
- console_initializers=domain.get('console_initializers', []),
- bind_slots_to_numa_nodes=domain.get('bind_slots_to_numa_nodes', False),
- config_cookie=domain.get('config_cookie', ''),
+ console_initializers=domain.get("console_initializers", []),
+ bind_slots_to_numa_nodes=domain.get("bind_slots_to_numa_nodes", False),
+ config_cookie=domain.get("config_cookie", ""),
)
)
return domains
@staticmethod
def _get_domain_tenants(domain_description):
- tenants = domain_description.get('databases', [])
+ tenants = domain_description.get("databases", [])
prepared_tenants = []
for tenant in tenants:
prepared_tenants.append(Tenant(**tenant))
@@ -585,17 +591,15 @@ class ClusterDetailsProvider(object):
@property
def static_pdisk_type(self):
- return self.__cluster_description.get('static_pdisk_type', DEFAULT_PDISK_TYPE)
+ return self.__cluster_description.get("static_pdisk_type", DEFAULT_PDISK_TYPE)
@property
def nw_cache_file_path(self):
- return self.__cluster_description.get('nw_cache_file_path', None)
+ return self.__cluster_description.get("nw_cache_file_path", None)
@property
def fail_domain_type(self):
- return types.FailDomainType.from_string(
- str(self.__cluster_description.get('fail_domain_type', DEFAULT_FAIL_DOMAIN_TYPE))
- )
+ return types.FailDomainType.from_string(str(self.__cluster_description.get("fail_domain_type", DEFAULT_FAIL_DOMAIN_TYPE)))
@property
def min_fail_domains(self):
@@ -603,20 +607,20 @@ class ClusterDetailsProvider(object):
@property
def static_erasure(self):
- return types.Erasure.from_string(self.__cluster_description['static_erasure'])
+ return types.Erasure.from_string(self.__cluster_description["static_erasure"])
# Auth txt
@property
def use_auth(self):
- return self.__cluster_description.get('auth', {})
+ return self.__cluster_description.get("auth", {})
# Log Stuff
@property
def log_config(self):
- log_config = copy.deepcopy(self.__cluster_description.get('log', {}))
+ log_config = copy.deepcopy(self.__cluster_description.get("log", {}))
if "entries" in log_config:
- services = log_config.get('entries', [])
+ services = log_config.get("entries", [])
entry_list = []
for service in list(sorted(services, key=lambda x: x["name"])):
service["component"] = service["name"]
@@ -636,86 +640,86 @@ class ClusterDetailsProvider(object):
@property
def default_log_level(self):
- return self.__cluster_description.get('log', {}).get('default', int(DEFAULT_LOG_LEVEL))
+ return self.__cluster_description.get("log", {}).get("default", int(DEFAULT_LOG_LEVEL))
@property
def grpc_config(self):
- return merge_with_default(GRPC_DEFAULT_CONFIG, self.__cluster_description.get('grpc', {}))
+ return merge_with_default(GRPC_DEFAULT_CONFIG, self.__cluster_description.get("grpc", {}))
@property
def dynamicnameservice_config(self):
- return merge_with_default(DYNAMIC_NAME_SERVICE, self.__cluster_description.get('dynamicnameservice', {}))
+ return merge_with_default(DYNAMIC_NAME_SERVICE, self.__cluster_description.get("dynamicnameservice", {}))
@property
def grpc_port(self):
- return self.grpc_config.get('port')
+ return self.grpc_config.get("port")
@property
def vdisk_config(self):
- return merge_with_default(VDISKS_DEFAULT_CONFIG, self.__cluster_description.get('vdisks', {}))
+ return merge_with_default(VDISKS_DEFAULT_CONFIG, self.__cluster_description.get("vdisks", {}))
# KQP Stuff
@property
def kqp_settings(self):
- settings = copy.deepcopy(self.__cluster_description.get('kqp', {}))
- if 'enable' in settings:
- del settings['enable']
+ settings = copy.deepcopy(self.__cluster_description.get("kqp", {}))
+ if "enable" in settings:
+ del settings["enable"]
return settings
@property
def kqp_enable(self):
- return self.__cluster_description.get('kqp', {}).get('enable', DEFAULT_KQP_ENABLE)
+ return self.__cluster_description.get("kqp", {}).get("enable", DEFAULT_KQP_ENABLE)
@property
def kqp_result_rows_limit(self):
- return self.__cluster_description.get('kqp', {}).get('result_rows_limit', DEFAULT_KQP_RESULT_ROWS_LIMIT)
+ return self.__cluster_description.get("kqp", {}).get("result_rows_limit", DEFAULT_KQP_RESULT_ROWS_LIMIT)
@property
def ic_config(self):
- ic_cfg = merge_with_default(IC_DEFAULT_CONFIG, self.__cluster_description.get('ic', {}))
+ ic_cfg = merge_with_default(IC_DEFAULT_CONFIG, self.__cluster_description.get("ic", {}))
# drop if not empty
- ic_cfg.pop('ca_path', '')
- ic_cfg.pop('cert_path', '')
- ic_cfg.pop('key_path', '')
+ ic_cfg.pop("ca_path", "")
+ ic_cfg.pop("cert_path", "")
+ ic_cfg.pop("key_path", "")
return ic_cfg
@property
def ic_cert_params(self):
- return tuple(self.__cluster_description.get('ic', {}).get(k) for k in ['ca_path', 'cert_path', 'key_path'])
+ return tuple(self.__cluster_description.get("ic", {}).get(k) for k in ["ca_path", "cert_path", "key_path"])
# PQ stuff
@property
def pq_config(self):
- cfg = copy.deepcopy(self.__cluster_description.get('pq', {'enabled': False}))
- cfg.pop('shared_cache_size_mb', '')
+ cfg = copy.deepcopy(self.__cluster_description.get("pq", {"enabled": False}))
+ cfg.pop("shared_cache_size_mb", "")
return cfg
# Shared Cache
@property
def shared_cache_memory_limit(self):
- return self.__cluster_description.get('shared_cache', {}).get('memory_limit', None)
+ return self.__cluster_description.get("shared_cache", {}).get("memory_limit", None)
@property
def pq_shared_cache_size(self):
- return self.__cluster_description.get('pq', {}).get('shared_cache_size_mb', None)
+ return self.__cluster_description.get("pq", {}).get("shared_cache_size_mb", None)
# Sys Stuff
@property
def sys(self):
- return self.__cluster_description.get('sys', {})
+ return self.__cluster_description.get("sys", {})
@property
def sys_preset_name(self):
- return self.sys.get('preset_name', None)
+ return self.sys.get("preset_name", None)
@property
def executors(self):
- return self.__cluster_description.get('sys', {}).get('executors', {})
+ return self.__cluster_description.get("sys", {}).get("executors", {})
@property
def schedulers(self):
- return self.__cluster_description.get('sys', {}).get('scheduler', {})
+ return self.__cluster_description.get("sys", {}).get("scheduler", {})
# DynamicBlobStorage Stuff
@@ -727,19 +731,19 @@ class ClusterDetailsProvider(object):
def __storage_pools_deprecated(self):
storage_pools = []
- for storage_pool in self.__cluster_description.get('storage_pools', []):
+ for storage_pool in self.__cluster_description.get("storage_pools", []):
storage_pools.append(
StoragePool(
- name=storage_pool.get('name', None),
+ name=storage_pool.get("name", None),
box_id=DEFAULT_BOX_ID,
- erasure=storage_pool.get('erasure'),
- num_groups=storage_pool.get('num_groups'),
- filter_properties=storage_pool.get('filter_properties', {}),
- fail_domain_type=storage_pool.get('fail_domain_type', DEFAULT_FAIL_DOMAIN_TYPE),
- kind=storage_pool.get('kind', None),
- vdisk_kind=storage_pool.get('vdisk_kind', 'Default'),
- encryption_mode=storage_pool.get('encryption_mode', 0),
- generation=storage_pool.get('generation', 0),
+ erasure=storage_pool.get("erasure"),
+ num_groups=storage_pool.get("num_groups"),
+ filter_properties=storage_pool.get("filter_properties", {}),
+ fail_domain_type=storage_pool.get("fail_domain_type", DEFAULT_FAIL_DOMAIN_TYPE),
+ kind=storage_pool.get("kind", None),
+ vdisk_kind=storage_pool.get("vdisk_kind", "Default"),
+ encryption_mode=storage_pool.get("encryption_mode", 0),
+ generation=storage_pool.get("generation", 0),
)
)
@@ -752,45 +756,43 @@ class ClusterDetailsProvider(object):
return self.__translated_storage_pools_deprecated
def __storage_pool(self, storage_pool_kinds, storage_pool_instance, domain_name):
- kind_name = storage_pool_instance.get('kind')
+ kind_name = storage_pool_instance.get("kind")
- assert (
- kind_name in storage_pool_kinds
- ), "databse storage pools should use pool kinds from storage_pool_kinds section"
+ assert kind_name in storage_pool_kinds, "databse storage pools should use pool kinds from storage_pool_kinds section"
storage_pool_name = "/{domain}:{kind}".format(domain=domain_name, kind=kind_name)
return StoragePool(
name=storage_pool_name,
- num_groups=storage_pool_instance.get('num_groups'),
- generation=storage_pool_instance.get('generation', 0),
+ num_groups=storage_pool_instance.get("num_groups"),
+ generation=storage_pool_instance.get("generation", 0),
**storage_pool_kinds[kind_name].to_dict()
)
@property
def dynamic_slots(self):
slots = []
- for domain_description in self.__cluster_description.get('domains', []):
- for slot_id in range(1, int(domain_description.get('dynamic_slots', 0) + 1)):
- slots.append(DynamicSlot(domain=domain_description.get('domain_name'), id=slot_id))
+ for domain_description in self.__cluster_description.get("domains", []):
+ for slot_id in range(1, int(domain_description.get("dynamic_slots", 0) + 1)):
+ slots.append(DynamicSlot(domain=domain_description.get("domain_name"), id=slot_id))
return slots
@property
def system_tablets_config(self):
- return self.__cluster_description.get('system_tablets', {})
+ return self.__cluster_description.get("system_tablets", {})
# NBS/NFS Options
@property
def nbs_enable(self):
- return self.__cluster_description.get('nbs', {}).get('enable', False)
+ return self.__cluster_description.get("nbs", {}).get("enable", False)
@property
def nfs_enable(self):
- return self.__cluster_description.get('nfs', {}).get('enable', False)
+ return self.__cluster_description.get("nfs", {}).get("enable", False)
def get_service(self, service_name):
return self.__cluster_description.get(service_name, {})
@property
def static_group_hosts_migration(self):
- return self.__cluster_description.get('static_group_hosts_migration', [])
+ return self.__cluster_description.get("static_group_hosts_migration", [])