sbcli-pre 1.0.4__zip → 1.0.6__zip
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/PKG-INFO +1 -1
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/env_var +1 -1
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/sbcli_pre.egg-info/PKG-INFO +1 -1
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_cli/cli.py +2 -25
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/cluster_ops.py +1 -179
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/device_controller.py +2 -2
- sbcli_pre-1.0.6/simplyblock_core/mgmt_node_ops.py +205 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/storage_node_ops.py +1 -1
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/web_api_lvol.py +2 -1
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/web_api_pool.py +3 -1
- sbcli_pre-1.0.4/simplyblock_core/mgmt_node_ops.py +0 -80
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/README.md +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/pyproject.toml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/sbcli_pre.egg-info/SOURCES.txt +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/sbcli_pre.egg-info/dependency_links.txt +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/sbcli_pre.egg-info/entry_points.txt +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/sbcli_pre.egg-info/requires.txt +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/sbcli_pre.egg-info/top_level.txt +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/setup.cfg +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/setup.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_cli/main.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/__init__.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/compute_node_ops.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/constants.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/lvol_controller.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/kv_store.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/compute_node.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/events.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/global_settings.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/iface.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/pool.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/stats.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/models/storage_node.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/rpc_client.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/alerting/alert_resources.yaml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/distr_event_collector.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/health_check_service.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/port_stat_collector.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/snode_client.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/utils.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/__init__.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/app.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/snode_ops.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/node_utils.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/snode_app.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/static/delete.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/static/tst.py +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/templates/deploy_spdk.yaml.j2 +0 -0
- {sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_web/utils.py +0 -0
@@ -472,7 +472,7 @@ class CLIWrapper:
|
|
472
472
|
# mgmt-node ops
|
473
473
|
subparser = self.add_command('mgmt', 'Management node commands')
|
474
474
|
|
475
|
-
sub_command = self.add_sub_command(subparser, 'add', 'Add Management node to the cluster')
|
475
|
+
sub_command = self.add_sub_command(subparser, 'add', 'Add Management node to the cluster (local run)')
|
476
476
|
sub_command.add_argument("cluster_ip", help='the cluster IP address')
|
477
477
|
sub_command.add_argument("cluster_id", help='the cluster UUID')
|
478
478
|
sub_command.add_argument("ifname", help='Management interface name')
|
@@ -823,8 +823,6 @@ class CLIWrapper:
|
|
823
823
|
sub_command = args_dict[args.command]
|
824
824
|
if sub_command == 'create':
|
825
825
|
ret = self.cluster_create(args)
|
826
|
-
elif sub_command == 'join':
|
827
|
-
ret = self.cluster_join(args)
|
828
826
|
elif sub_command == 'add':
|
829
827
|
ret = self.cluster_add(args)
|
830
828
|
elif sub_command == 'status':
|
@@ -990,7 +988,7 @@ class CLIWrapper:
|
|
990
988
|
cluster_id = args.cluster_id
|
991
989
|
cluster_ip = args.cluster_ip
|
992
990
|
ifname = args.ifname
|
993
|
-
ret =
|
991
|
+
ret = mgmt_ops.deploy_mgmt_node(cluster_ip, cluster_id, ifname)
|
994
992
|
elif sub_command == "list":
|
995
993
|
ret = mgmt_ops.list_mgmt_nodes(args.json)
|
996
994
|
elif sub_command == "remove":
|
@@ -1174,27 +1172,6 @@ class CLIWrapper:
|
|
1174
1172
|
CLI_PASS, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
|
1175
1173
|
ifname, log_del_interval, metrics_retention_period)
|
1176
1174
|
|
1177
|
-
def cluster_join(self, args):
|
1178
|
-
cluster_id = args.cluster_id
|
1179
|
-
cluster_ip = args.cluster_ip
|
1180
|
-
role = args.role
|
1181
|
-
ifname = args.ifname
|
1182
|
-
data_nics = args.data_nics
|
1183
|
-
spdk_cpu_mask = None
|
1184
|
-
if args.spdk_cpu_mask:
|
1185
|
-
if self.validate_cpu_mask(args.spdk_cpu_mask):
|
1186
|
-
spdk_cpu_mask = args.spdk_cpu_mask
|
1187
|
-
else:
|
1188
|
-
return f"Invalid cpu mask value: {args.spdk_cpu_mask}"
|
1189
|
-
|
1190
|
-
spdk_mem = None
|
1191
|
-
if args.spdk_mem:
|
1192
|
-
spdk_mem = self.parse_size(args.spdk_mem)
|
1193
|
-
if spdk_mem < 1 * 1024 * 1024:
|
1194
|
-
return f"SPDK memory:{args.spdk_mem} must be larger than 1G"
|
1195
|
-
|
1196
|
-
return cluster_ops.join_cluster(cluster_ip, cluster_id, role, ifname, data_nics, spdk_cpu_mask, spdk_mem)
|
1197
|
-
|
1198
1175
|
def query_yes_no(self, question, default="yes"):
|
1199
1176
|
"""Ask a yes/no question via raw_input() and return their answer.
|
1200
1177
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# coding=utf-8
|
2
2
|
import json
|
3
3
|
import logging
|
4
|
-
import math
|
5
4
|
import os
|
6
5
|
import time
|
7
6
|
import uuid
|
@@ -9,7 +8,7 @@ import uuid
|
|
9
8
|
import docker
|
10
9
|
import requests
|
11
10
|
|
12
|
-
from simplyblock_core import utils, scripts, constants, mgmt_node_ops, storage_node_ops
|
11
|
+
from simplyblock_core import utils, scripts, constants, mgmt_node_ops, storage_node_ops
|
13
12
|
from simplyblock_core.controllers import cluster_events, device_controller
|
14
13
|
from simplyblock_core.kv_store import DBController
|
15
14
|
from simplyblock_core.models.cluster import Cluster
|
@@ -199,183 +198,6 @@ def deploy_spdk(node_docker, spdk_cpu_mask, spdk_mem):
|
|
199
198
|
break
|
200
199
|
|
201
200
|
|
202
|
-
def join_cluster(cluster_ip, cluster_id, role, ifname, data_nics, spdk_cpu_mask, spdk_mem): # role: ["management", "storage"]
|
203
|
-
|
204
|
-
if role not in ["management", "storage", "storage-alloc"]:
|
205
|
-
logger.error(f"Unknown role: {role}")
|
206
|
-
return False
|
207
|
-
|
208
|
-
try:
|
209
|
-
resp = requests.get(f"http://{cluster_ip}/cluster/{cluster_id}")
|
210
|
-
resp_json = resp.json()
|
211
|
-
cluster_data = resp_json['results'][0]
|
212
|
-
logger.info(f"Cluster found! NQN:{cluster_data['nqn']}")
|
213
|
-
logger.debug(cluster_data)
|
214
|
-
except Exception as e:
|
215
|
-
logger.error("Error getting cluster data!")
|
216
|
-
logger.error(e)
|
217
|
-
return ""
|
218
|
-
|
219
|
-
logger.info("Installing dependencies...")
|
220
|
-
ret = scripts.install_deps()
|
221
|
-
logger.info("Installing dependencies > Done")
|
222
|
-
|
223
|
-
if not ifname:
|
224
|
-
ifname = "eth0"
|
225
|
-
|
226
|
-
DEV_IP = utils.get_iface_ip(ifname)
|
227
|
-
if not DEV_IP:
|
228
|
-
logger.error(f"Error getting interface ip: {ifname}")
|
229
|
-
return False
|
230
|
-
|
231
|
-
logger.info(f"Node IP: {DEV_IP}")
|
232
|
-
ret = scripts.configure_docker(DEV_IP)
|
233
|
-
|
234
|
-
db_connection = cluster_data['db_connection']
|
235
|
-
ret = scripts.set_db_config(db_connection)
|
236
|
-
|
237
|
-
if role == "storage":
|
238
|
-
logger.info("Deploying SPDK")
|
239
|
-
node_cpu_count = os.cpu_count()
|
240
|
-
if spdk_cpu_mask:
|
241
|
-
requested_cpu_count = len(format(int(spdk_cpu_mask, 16), 'b'))
|
242
|
-
if requested_cpu_count > node_cpu_count:
|
243
|
-
logger.error(f"The requested cpu count: {requested_cpu_count} "
|
244
|
-
f"is larger than the node's cpu count: {node_cpu_count}")
|
245
|
-
return False
|
246
|
-
else:
|
247
|
-
spdk_cpu_mask = hex(int(math.pow(2, node_cpu_count))-1)
|
248
|
-
if spdk_mem:
|
249
|
-
spdk_mem = int(spdk_mem/(1024*1024))
|
250
|
-
else:
|
251
|
-
spdk_mem = 4096
|
252
|
-
node_docker = docker.DockerClient(base_url=f"tcp://{DEV_IP}:2375", version="auto", timeout=60*5)
|
253
|
-
deploy_spdk(node_docker, spdk_cpu_mask, spdk_mem)
|
254
|
-
time.sleep(5)
|
255
|
-
|
256
|
-
logger.info("Joining docker swarm...")
|
257
|
-
db_controller = DBController()
|
258
|
-
nodes = db_controller.get_mgmt_nodes(cluster_id=cluster_id)
|
259
|
-
if not nodes:
|
260
|
-
logger.error("No mgmt nodes was found in the cluster!")
|
261
|
-
exit(1)
|
262
|
-
|
263
|
-
try:
|
264
|
-
cluster_docker = utils.get_docker_client(cluster_id)
|
265
|
-
docker_ip = cluster_docker.info()["Swarm"]["NodeAddr"]
|
266
|
-
|
267
|
-
if role == 'management':
|
268
|
-
join_token = cluster_docker.swarm.attrs['JoinTokens']['Manager']
|
269
|
-
else:
|
270
|
-
join_token = cluster_docker.swarm.attrs['JoinTokens']['Worker']
|
271
|
-
|
272
|
-
node_docker = docker.DockerClient(base_url=f"tcp://{DEV_IP}:2375", version="auto")
|
273
|
-
if node_docker.info()["Swarm"]["LocalNodeState"] == "active":
|
274
|
-
logger.info("Node is part of another swarm, leaving swarm")
|
275
|
-
try:
|
276
|
-
cluster_docker.nodes.get(node_docker.info()["Swarm"]["NodeID"]).remove(force=True)
|
277
|
-
except:
|
278
|
-
pass
|
279
|
-
node_docker.swarm.leave(force=True)
|
280
|
-
time.sleep(5)
|
281
|
-
node_docker.swarm.join([f"{docker_ip}:2377"], join_token)
|
282
|
-
|
283
|
-
retries = 10
|
284
|
-
while retries > 0:
|
285
|
-
if node_docker.info()["Swarm"]["LocalNodeState"] == "active":
|
286
|
-
break
|
287
|
-
logger.info("Waiting for node to be active...")
|
288
|
-
retries -= 1
|
289
|
-
time.sleep(2)
|
290
|
-
logger.info("Joining docker swarm > Done")
|
291
|
-
time.sleep(5)
|
292
|
-
|
293
|
-
except Exception as e:
|
294
|
-
raise e
|
295
|
-
|
296
|
-
if role == 'management':
|
297
|
-
mgmt_node_ops.add_mgmt_node(DEV_IP, cluster_id)
|
298
|
-
cluster_obj = db_controller.get_cluster_by_id(cluster_id)
|
299
|
-
nodes = db_controller.get_mgmt_nodes(cluster_id=cluster_id)
|
300
|
-
if len(nodes) >= 3:
|
301
|
-
logger.info("Waiting for FDB container to be active...")
|
302
|
-
fdb_cont = None
|
303
|
-
retries = 30
|
304
|
-
while retries > 0 and fdb_cont is None:
|
305
|
-
logger.info("Looking for FDB container...")
|
306
|
-
for cont in node_docker.containers.list(all=True):
|
307
|
-
logger.debug(cont.attrs['Name'])
|
308
|
-
if cont.attrs['Name'].startswith("/app_fdb"):
|
309
|
-
fdb_cont = cont
|
310
|
-
break
|
311
|
-
if fdb_cont:
|
312
|
-
logger.info("FDB container found")
|
313
|
-
break
|
314
|
-
else:
|
315
|
-
retries -= 1
|
316
|
-
time.sleep(5)
|
317
|
-
|
318
|
-
if not fdb_cont:
|
319
|
-
logger.warning("FDB container was not found")
|
320
|
-
else:
|
321
|
-
retries = 10
|
322
|
-
while retries > 0:
|
323
|
-
info = node_docker.containers.get(fdb_cont.attrs['Id'])
|
324
|
-
status = info.attrs['State']["Status"]
|
325
|
-
is_running = info.attrs['State']["Running"]
|
326
|
-
if not is_running:
|
327
|
-
logger.info("Container is not running, waiting...")
|
328
|
-
time.sleep(3)
|
329
|
-
retries -= 1
|
330
|
-
else:
|
331
|
-
logger.info(f"Container status: {status}, Is Running: {is_running}")
|
332
|
-
break
|
333
|
-
|
334
|
-
logger.info("Configuring Double DB...")
|
335
|
-
time.sleep(3)
|
336
|
-
out = scripts.set_db_config_double()
|
337
|
-
cluster_obj.ha_type = "ha"
|
338
|
-
cluster_obj.write_to_db(db_controller.kv_store)
|
339
|
-
logger.info("Configuring DB > Done")
|
340
|
-
|
341
|
-
elif role == "storage":
|
342
|
-
# add storage node
|
343
|
-
fdb_cont = None
|
344
|
-
retries = 30
|
345
|
-
while retries > 0 and fdb_cont is None:
|
346
|
-
logger.info("Looking for SpdkAppProxy container...")
|
347
|
-
for cont in node_docker.containers.list(all=True):
|
348
|
-
logger.debug(cont.attrs['Name'])
|
349
|
-
if cont.attrs['Name'].startswith("/app_SpdkAppProxy"):
|
350
|
-
fdb_cont = cont
|
351
|
-
break
|
352
|
-
if fdb_cont:
|
353
|
-
logger.info("SpdkAppProxy container found")
|
354
|
-
break
|
355
|
-
else:
|
356
|
-
retries -= 1
|
357
|
-
time.sleep(5)
|
358
|
-
|
359
|
-
if not fdb_cont:
|
360
|
-
logger.warning("SpdkAppProxy container was not found")
|
361
|
-
else:
|
362
|
-
retries = 10
|
363
|
-
while retries > 0:
|
364
|
-
info = node_docker.containers.get(fdb_cont.attrs['Id'])
|
365
|
-
status = info.attrs['State']["Status"]
|
366
|
-
is_running = info.attrs['State']["Running"]
|
367
|
-
if not is_running:
|
368
|
-
logger.info("Container is not running, waiting...")
|
369
|
-
time.sleep(3)
|
370
|
-
retries -= 1
|
371
|
-
else:
|
372
|
-
logger.info(f"Container status: {status}, Is Running: {is_running}")
|
373
|
-
break
|
374
|
-
storage_node_ops.add_storage_node(cluster_id, ifname, data_nics)
|
375
|
-
|
376
|
-
logger.info("Node joined the cluster")
|
377
|
-
|
378
|
-
|
379
201
|
def add_cluster(blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit):
|
380
202
|
db_controller = DBController()
|
381
203
|
clusters = db_controller.get_clusters()
|
@@ -36,7 +36,7 @@ def device_set_state(device_id, state):
|
|
36
36
|
|
37
37
|
old_status = dev.status
|
38
38
|
device.status = state
|
39
|
-
distr_controller.send_dev_status_event(device
|
39
|
+
distr_controller.send_dev_status_event(device, device.status)
|
40
40
|
snode.write_to_db(db_controller.kv_store)
|
41
41
|
device_events.device_status_change(device, device.status, old_status)
|
42
42
|
return True
|
@@ -268,7 +268,7 @@ def device_remove(device_id, force=True):
|
|
268
268
|
break
|
269
269
|
|
270
270
|
logger.info("Sending device event")
|
271
|
-
distr_controller.send_dev_status_event(device
|
271
|
+
distr_controller.send_dev_status_event(device, NVMeDevice.STATUS_REMOVED)
|
272
272
|
|
273
273
|
logger.info("Disconnecting device from all nodes")
|
274
274
|
distr_controller.disconnect_device(device)
|
@@ -0,0 +1,205 @@
|
|
1
|
+
# coding=utf-8
|
2
|
+
import json
|
3
|
+
import logging
|
4
|
+
import uuid
|
5
|
+
import time
|
6
|
+
import requests
|
7
|
+
|
8
|
+
import docker
|
9
|
+
|
10
|
+
from simplyblock_core import utils, scripts
|
11
|
+
from simplyblock_core.controllers import mgmt_events
|
12
|
+
from simplyblock_core.kv_store import DBController
|
13
|
+
from simplyblock_core.models.mgmt_node import MgmtNode
|
14
|
+
|
15
|
+
|
16
|
+
logger = logging.getLogger()
|
17
|
+
|
18
|
+
|
19
|
+
def deploy_mgmt_node(cluster_ip, cluster_id, ifname):
|
20
|
+
|
21
|
+
try:
|
22
|
+
resp = requests.get(f"http://{cluster_ip}/cluster/{cluster_id}")
|
23
|
+
resp_json = resp.json()
|
24
|
+
cluster_data = resp_json['results'][0]
|
25
|
+
logger.info(f"Cluster found! NQN:{cluster_data['nqn']}")
|
26
|
+
logger.debug(cluster_data)
|
27
|
+
except Exception as e:
|
28
|
+
logger.error("Error getting cluster data!")
|
29
|
+
logger.error(e)
|
30
|
+
return ""
|
31
|
+
|
32
|
+
logger.info("Installing dependencies...")
|
33
|
+
scripts.install_deps()
|
34
|
+
logger.info("Installing dependencies > Done")
|
35
|
+
|
36
|
+
if not ifname:
|
37
|
+
ifname = "eth0"
|
38
|
+
|
39
|
+
DEV_IP = utils.get_iface_ip(ifname)
|
40
|
+
if not DEV_IP:
|
41
|
+
logger.error(f"Error getting interface ip: {ifname}")
|
42
|
+
return False
|
43
|
+
|
44
|
+
logger.info(f"Node IP: {DEV_IP}")
|
45
|
+
ret = scripts.configure_docker(DEV_IP)
|
46
|
+
|
47
|
+
db_connection = cluster_data['db_connection']
|
48
|
+
scripts.set_db_config(db_connection)
|
49
|
+
time.sleep(1)
|
50
|
+
hostname = utils.get_hostname()
|
51
|
+
db_controller = DBController()
|
52
|
+
nodes = db_controller.get_mgmt_nodes(cluster_id=cluster_id)
|
53
|
+
if not nodes:
|
54
|
+
logger.error("No mgmt nodes was found in the cluster!")
|
55
|
+
return False
|
56
|
+
for node in nodes:
|
57
|
+
if node.hostname == hostname:
|
58
|
+
logger.error("Node already exists in the cluster")
|
59
|
+
return False
|
60
|
+
|
61
|
+
logger.info("Joining docker swarm...")
|
62
|
+
try:
|
63
|
+
cluster_docker = utils.get_docker_client(cluster_id)
|
64
|
+
docker_ip = cluster_docker.info()["Swarm"]["NodeAddr"]
|
65
|
+
join_token = cluster_docker.swarm.attrs['JoinTokens']['Manager']
|
66
|
+
node_docker = docker.DockerClient(base_url=f"tcp://{DEV_IP}:2375", version="auto")
|
67
|
+
if node_docker.info()["Swarm"]["LocalNodeState"] == "active":
|
68
|
+
logger.info("Node is part of another swarm, leaving swarm")
|
69
|
+
try:
|
70
|
+
cluster_docker.nodes.get(node_docker.info()["Swarm"]["NodeID"]).remove(force=True)
|
71
|
+
except:
|
72
|
+
pass
|
73
|
+
node_docker.swarm.leave(force=True)
|
74
|
+
time.sleep(5)
|
75
|
+
|
76
|
+
node_docker.swarm.join([f"{docker_ip}:2377"], join_token)
|
77
|
+
|
78
|
+
retries = 10
|
79
|
+
while retries > 0:
|
80
|
+
if node_docker.info()["Swarm"]["LocalNodeState"] == "active":
|
81
|
+
break
|
82
|
+
logger.info("Waiting for node to be active...")
|
83
|
+
retries -= 1
|
84
|
+
time.sleep(2)
|
85
|
+
logger.info("Joining docker swarm > Done")
|
86
|
+
time.sleep(5)
|
87
|
+
|
88
|
+
except Exception as e:
|
89
|
+
raise e
|
90
|
+
|
91
|
+
logger.info("Adding management node object")
|
92
|
+
node_id = add_mgmt_node(DEV_IP, cluster_id)
|
93
|
+
|
94
|
+
# check if ha setting is required
|
95
|
+
nodes = db_controller.get_mgmt_nodes(cluster_id=cluster_id)
|
96
|
+
if len(nodes) >= 3:
|
97
|
+
logger.info("Waiting for FDB container to be active...")
|
98
|
+
fdb_cont = None
|
99
|
+
retries = 30
|
100
|
+
while retries > 0 and fdb_cont is None:
|
101
|
+
logger.info("Looking for FDB container...")
|
102
|
+
for cont in node_docker.containers.list(all=True):
|
103
|
+
logger.debug(cont.attrs['Name'])
|
104
|
+
if cont.attrs['Name'].startswith("/app_fdb"):
|
105
|
+
fdb_cont = cont
|
106
|
+
break
|
107
|
+
if fdb_cont:
|
108
|
+
logger.info("FDB container found")
|
109
|
+
break
|
110
|
+
else:
|
111
|
+
retries -= 1
|
112
|
+
time.sleep(5)
|
113
|
+
|
114
|
+
if not fdb_cont:
|
115
|
+
logger.warning("FDB container was not found")
|
116
|
+
else:
|
117
|
+
retries = 10
|
118
|
+
while retries > 0:
|
119
|
+
info = node_docker.containers.get(fdb_cont.attrs['Id'])
|
120
|
+
status = info.attrs['State']["Status"]
|
121
|
+
is_running = info.attrs['State']["Running"]
|
122
|
+
if not is_running:
|
123
|
+
logger.info("Container is not running, waiting...")
|
124
|
+
time.sleep(3)
|
125
|
+
retries -= 1
|
126
|
+
else:
|
127
|
+
logger.info(f"Container status: {status}, Is Running: {is_running}")
|
128
|
+
break
|
129
|
+
|
130
|
+
logger.info("Configuring Double DB...")
|
131
|
+
time.sleep(3)
|
132
|
+
scripts.set_db_config_double()
|
133
|
+
for cl in db_controller.get_clusters():
|
134
|
+
cl.ha_type = "ha"
|
135
|
+
cl.write_to_db(db_controller.kv_store)
|
136
|
+
|
137
|
+
logger.info("Node joined the cluster")
|
138
|
+
return node_id
|
139
|
+
|
140
|
+
|
141
|
+
def add_mgmt_node(mgmt_ip, cluster_id=None):
|
142
|
+
db_controller = DBController()
|
143
|
+
hostname = utils.get_hostname()
|
144
|
+
node = db_controller.get_mgmt_node_by_hostname(hostname)
|
145
|
+
if node:
|
146
|
+
logger.error("Node already exists in the cluster")
|
147
|
+
return False
|
148
|
+
|
149
|
+
node = MgmtNode()
|
150
|
+
node.uuid = str(uuid.uuid4())
|
151
|
+
node.hostname = hostname
|
152
|
+
node.docker_ip_port = f"{mgmt_ip}:2375"
|
153
|
+
node.cluster_id = cluster_id
|
154
|
+
node.mgmt_ip = mgmt_ip
|
155
|
+
node.status = MgmtNode.STATUS_ONLINE
|
156
|
+
node.write_to_db(db_controller.kv_store)
|
157
|
+
|
158
|
+
mgmt_events.mgmt_add(node)
|
159
|
+
logger.info("Done")
|
160
|
+
return node.uuid
|
161
|
+
|
162
|
+
|
163
|
+
def list_mgmt_nodes(is_json):
|
164
|
+
db_controller = DBController()
|
165
|
+
nodes = db_controller.get_mgmt_nodes()
|
166
|
+
data = []
|
167
|
+
output = ""
|
168
|
+
|
169
|
+
for node in nodes:
|
170
|
+
logging.debug(node)
|
171
|
+
logging.debug("*" * 20)
|
172
|
+
data.append({
|
173
|
+
"UUID": node.get_id(),
|
174
|
+
"Hostname": node.hostname,
|
175
|
+
"IP": node.mgmt_ip,
|
176
|
+
"Status": node.status,
|
177
|
+
})
|
178
|
+
|
179
|
+
if not data:
|
180
|
+
return output
|
181
|
+
|
182
|
+
if is_json:
|
183
|
+
output = json.dumps(data, indent=2)
|
184
|
+
else:
|
185
|
+
output = utils.print_table(data)
|
186
|
+
return output
|
187
|
+
|
188
|
+
|
189
|
+
def remove_mgmt_node(uuid):
|
190
|
+
db_controller = DBController()
|
191
|
+
snode = db_controller.get_mgmt_node_by_id(uuid)
|
192
|
+
if not snode:
|
193
|
+
logger.error("can not find node")
|
194
|
+
return False
|
195
|
+
|
196
|
+
logging.info("Removing mgmt node")
|
197
|
+
snode.remove(db_controller.kv_store)
|
198
|
+
|
199
|
+
logger.info("Leaving swarm...")
|
200
|
+
node_docker = docker.DockerClient(base_url=f"tcp://{snode.docker_ip_port}", version="auto")
|
201
|
+
node_docker.swarm.leave()
|
202
|
+
|
203
|
+
mgmt_events.mgmt_remove(snode)
|
204
|
+
logging.info("done")
|
205
|
+
|
@@ -1112,7 +1112,7 @@ def restart_storage_node(
|
|
1112
1112
|
else:
|
1113
1113
|
logger.info(f"Device not found: {db_dev.get_id()}")
|
1114
1114
|
db_dev.status = NVMeDevice.STATUS_REMOVED
|
1115
|
-
distr_controller.send_dev_status_event(db_dev
|
1115
|
+
distr_controller.send_dev_status_event(db_dev, db_dev.status)
|
1116
1116
|
|
1117
1117
|
# todo: handle new devices
|
1118
1118
|
# for dev in nvme_devs:
|
@@ -32,7 +32,8 @@ def list_lvols(uuid, cluster_id):
|
|
32
32
|
elif cluster_id:
|
33
33
|
lvols = db_controller.get_lvols(cluster_id)
|
34
34
|
else:
|
35
|
-
|
35
|
+
cluster_id = utils.get_cluster_id(request)
|
36
|
+
lvols = db_controller.get_lvols(cluster_id)
|
36
37
|
data = []
|
37
38
|
for lvol in lvols:
|
38
39
|
data.append(lvol.get_clean_dict())
|
@@ -30,7 +30,8 @@ def list_pools(uuid, cluster_id):
|
|
30
30
|
elif cluster_id:
|
31
31
|
pools = db_controller.get_pools(cluster_id)
|
32
32
|
else:
|
33
|
-
|
33
|
+
cluster_id = utils.get_cluster_id(request)
|
34
|
+
pools = db_controller.get_pools(cluster_id)
|
34
35
|
data = []
|
35
36
|
for pool in pools:
|
36
37
|
data.append(pool.get_clean_dict())
|
@@ -42,6 +43,7 @@ def add_pool():
|
|
42
43
|
"""
|
43
44
|
Params:
|
44
45
|
| name (required) | LVol name or id
|
46
|
+
| cluster_id (required) | Cluster uuid
|
45
47
|
| pool_max | Pool maximum size: 10M, 10G, 10(bytes)
|
46
48
|
| lvol_max | LVol maximum size: 10M, 10G, 10(bytes)
|
47
49
|
| no_secret | pool is created with a secret
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# coding=utf-8
|
2
|
-
import json
|
3
|
-
import logging
|
4
|
-
import uuid
|
5
|
-
|
6
|
-
import docker
|
7
|
-
|
8
|
-
from simplyblock_core import utils
|
9
|
-
from simplyblock_core.controllers import mgmt_events
|
10
|
-
from simplyblock_core.kv_store import DBController
|
11
|
-
from simplyblock_core.models.mgmt_node import MgmtNode
|
12
|
-
|
13
|
-
logger = logging.getLogger()
|
14
|
-
|
15
|
-
|
16
|
-
def add_mgmt_node(mgmt_ip, cluster_id=None):
|
17
|
-
db_controller = DBController()
|
18
|
-
hostname = utils.get_hostname()
|
19
|
-
node = db_controller.get_mgmt_node_by_hostname(hostname)
|
20
|
-
if node:
|
21
|
-
logger.error("Node already exists in the cluster")
|
22
|
-
return False
|
23
|
-
|
24
|
-
node = MgmtNode()
|
25
|
-
node.uuid = str(uuid.uuid4())
|
26
|
-
node.hostname = hostname
|
27
|
-
node.docker_ip_port = f"{mgmt_ip}:2375"
|
28
|
-
node.cluster_id = cluster_id
|
29
|
-
node.mgmt_ip = mgmt_ip
|
30
|
-
node.status = MgmtNode.STATUS_ONLINE
|
31
|
-
node.write_to_db(db_controller.kv_store)
|
32
|
-
|
33
|
-
mgmt_events.mgmt_add(node)
|
34
|
-
logger.info("Done")
|
35
|
-
return True
|
36
|
-
|
37
|
-
|
38
|
-
def list_mgmt_nodes(is_json):
|
39
|
-
db_controller = DBController()
|
40
|
-
nodes = db_controller.get_mgmt_nodes()
|
41
|
-
data = []
|
42
|
-
output = ""
|
43
|
-
|
44
|
-
for node in nodes:
|
45
|
-
logging.debug(node)
|
46
|
-
logging.debug("*" * 20)
|
47
|
-
data.append({
|
48
|
-
"UUID": node.get_id(),
|
49
|
-
"Hostname": node.hostname,
|
50
|
-
"IP": node.mgmt_ip,
|
51
|
-
"Status": node.status,
|
52
|
-
})
|
53
|
-
|
54
|
-
if not data:
|
55
|
-
return output
|
56
|
-
|
57
|
-
if is_json:
|
58
|
-
output = json.dumps(data, indent=2)
|
59
|
-
else:
|
60
|
-
output = utils.print_table(data)
|
61
|
-
return output
|
62
|
-
|
63
|
-
|
64
|
-
def remove_mgmt_node(uuid):
|
65
|
-
db_controller = DBController()
|
66
|
-
snode = db_controller.get_mgmt_node_by_id(uuid)
|
67
|
-
if not snode:
|
68
|
-
logger.error("can not find node")
|
69
|
-
return False
|
70
|
-
|
71
|
-
logging.info("Removing mgmt node")
|
72
|
-
snode.remove(db_controller.kv_store)
|
73
|
-
|
74
|
-
logger.info("Leaving swarm...")
|
75
|
-
node_docker = docker.DockerClient(base_url=f"tcp://{snode.docker_ip_port}", version="auto")
|
76
|
-
node_docker.swarm.leave()
|
77
|
-
|
78
|
-
mgmt_events.mgmt_remove(snode)
|
79
|
-
logging.info("done")
|
80
|
-
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli_pre-1.0.4 → sbcli_pre-1.0.6}/simplyblock_core/services/capacity_and_stats_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|