sbcli-pre 1.4.4__zip → 1.4.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.4.4 → sbcli_pre-1.4.6}/PKG-INFO +11 -1
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/env_var +1 -1
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/sbcli_pre.egg-info/PKG-INFO +11 -1
- sbcli_pre-1.4.6/sbcli_pre.egg-info/requires.txt +18 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/setup.py +10 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/cnode_client.py +11 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/constants.py +1 -1
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/caching_node_controller.py +48 -15
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/storage_node.py +3 -4
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/deploy_stack.sh +9 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +5 -14
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/caching_node_monitor.py +2 -14
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/cap_monitor.py +2 -15
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/capacity_and_stats_collector.py +3 -13
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/device_monitor.py +2 -14
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/distr_event_collector.py +3 -14
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/health_check_service.py +4 -15
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/lvol_monitor.py +5 -17
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/lvol_stat_collector.py +3 -15
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/mgmt_node_monitor.py +2 -12
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/port_stat_collector.py +3 -16
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/storage_node_monitor.py +3 -17
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/tasks_runner_migration.py +2 -14
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/tasks_runner_restart.py +2 -15
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/storage_node_ops.py +91 -87
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/utils.py +15 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/app.py +1 -2
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/caching_node_ops.py +72 -1
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/caching_node_ops_k8s.py +76 -1
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/snode_ops.py +42 -42
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/templates/deploy_spdk.yaml.j2 +8 -3
- sbcli_pre-1.4.4/sbcli_pre.egg-info/requires.txt +0 -8
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/README.md +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/pyproject.toml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/sbcli_pre.egg-info/SOURCES.txt +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/sbcli_pre.egg-info/dependency_links.txt +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/sbcli_pre.egg-info/entry_points.txt +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/sbcli_pre.egg-info/top_level.txt +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/setup.cfg +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_cli/cli.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_cli/main.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/__init__.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/cluster_ops.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/compute_node_ops.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/device_controller.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/lvol_controller.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/kv_store.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/compute_node.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/events.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/global_settings.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/iface.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/pool.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/models/stats.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/rpc_client.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_core/snode_client.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/__init__.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/node_utils.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/snode_app.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/static/delete.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/static/tst.py +0 -0
- {sbcli_pre-1.4.4 → sbcli_pre-1.4.6}/simplyblock_web/utils.py +0 -0
@@ -1,18 +1,14 @@
|
|
1
1
|
# coding=utf-8
|
2
|
-
import logging
|
3
|
-
import os
|
4
|
-
|
5
2
|
import time
|
6
|
-
import sys
|
7
|
-
|
8
3
|
import psutil
|
9
4
|
|
10
5
|
|
11
6
|
from simplyblock_core import constants, kv_store, utils
|
12
7
|
from simplyblock_core.models.port_stat import PortStat
|
13
8
|
|
14
|
-
|
15
|
-
|
9
|
+
|
10
|
+
logger = utils.get_logger(__name__)
|
11
|
+
|
16
12
|
|
17
13
|
def update_port_stats(snode, nic, stats):
|
18
14
|
now = int(time.time())
|
@@ -40,15 +36,6 @@ def update_port_stats(snode, nic, stats):
|
|
40
36
|
return
|
41
37
|
|
42
38
|
|
43
|
-
# configure logging
|
44
|
-
logger_handler = logging.StreamHandler(stream=sys.stdout)
|
45
|
-
logger_handler.setFormatter(logging.Formatter('%(asctime)s: %(levelname)s: %(message)s'))
|
46
|
-
gelf_handler = GELFUDPHandler('0.0.0.0', constants.GELF_PORT)
|
47
|
-
logger = logging.getLogger()
|
48
|
-
logger.addHandler(gelf_handler)
|
49
|
-
logger.addHandler(logger_handler)
|
50
|
-
logger.setLevel(logging.DEBUG)
|
51
|
-
|
52
39
|
# get DB controller
|
53
40
|
db_controller = kv_store.DBController()
|
54
41
|
|
@@ -1,29 +1,15 @@
|
|
1
1
|
# coding=utf-8
|
2
|
-
import logging
|
3
|
-
import os
|
4
|
-
|
5
2
|
import time
|
6
|
-
import sys
|
7
|
-
from datetime import datetime
|
8
3
|
|
9
4
|
|
10
|
-
from simplyblock_core import constants, kv_store, cluster_ops, storage_node_ops,
|
5
|
+
from simplyblock_core import constants, kv_store, cluster_ops, storage_node_ops, utils
|
11
6
|
from simplyblock_core.controllers import health_controller, device_controller, tasks_controller
|
12
7
|
from simplyblock_core.models.cluster import Cluster
|
13
8
|
from simplyblock_core.models.nvme_device import NVMeDevice
|
14
9
|
from simplyblock_core.models.storage_node import StorageNode
|
15
10
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
# configure logging
|
20
|
-
logger_handler = logging.StreamHandler(stream=sys.stdout)
|
21
|
-
logger_handler.setFormatter(logging.Formatter('%(asctime)s: %(levelname)s: %(message)s'))
|
22
|
-
gelf_handler = GELFUDPHandler('0.0.0.0', constants.GELF_PORT)
|
23
|
-
logger = logging.getLogger()
|
24
|
-
logger.addHandler(gelf_handler)
|
25
|
-
logger.addHandler(logger_handler)
|
26
|
-
logger.setLevel(logging.DEBUG)
|
11
|
+
|
12
|
+
logger = utils.get_logger(__name__)
|
27
13
|
|
28
14
|
|
29
15
|
# get DB controller
|
@@ -1,16 +1,13 @@
|
|
1
1
|
# coding=utf-8
|
2
|
-
import logging
|
3
2
|
import time
|
4
|
-
import sys
|
5
3
|
|
6
4
|
|
7
|
-
from simplyblock_core import constants, kv_store
|
5
|
+
from simplyblock_core import constants, kv_store, utils
|
8
6
|
from simplyblock_core.controllers import tasks_events
|
9
7
|
from simplyblock_core.models.job_schedule import JobSchedule
|
10
8
|
|
11
9
|
|
12
|
-
|
13
|
-
from graypy import GELFUDPHandler
|
10
|
+
logger = utils.get_logger(__name__)
|
14
11
|
|
15
12
|
|
16
13
|
def task_runner(task):
|
@@ -28,15 +25,6 @@ def task_runner(task):
|
|
28
25
|
return True
|
29
26
|
|
30
27
|
|
31
|
-
# configure logging
|
32
|
-
logger_handler = logging.StreamHandler(stream=sys.stdout)
|
33
|
-
logger_handler.setFormatter(logging.Formatter('%(asctime)s: %(levelname)s: %(message)s'))
|
34
|
-
gelf_handler = GELFUDPHandler('0.0.0.0', constants.GELF_PORT)
|
35
|
-
logger = logging.getLogger()
|
36
|
-
logger.addHandler(gelf_handler)
|
37
|
-
logger.addHandler(logger_handler)
|
38
|
-
logger.setLevel(logging.DEBUG)
|
39
|
-
|
40
28
|
# get DB controller
|
41
29
|
db_controller = kv_store.DBController()
|
42
30
|
|
@@ -1,28 +1,15 @@
|
|
1
1
|
# coding=utf-8
|
2
|
-
import logging
|
3
2
|
import time
|
4
|
-
import sys
|
5
3
|
|
6
4
|
|
7
|
-
from simplyblock_core import constants, kv_store, storage_node_ops
|
5
|
+
from simplyblock_core import constants, kv_store, storage_node_ops, utils
|
8
6
|
from simplyblock_core.controllers import device_controller, tasks_events, health_controller
|
9
7
|
from simplyblock_core.models.job_schedule import JobSchedule
|
10
8
|
from simplyblock_core.models.nvme_device import NVMeDevice
|
11
|
-
|
12
|
-
# Import the GELF logger
|
13
|
-
from graypy import GELFUDPHandler
|
14
|
-
|
15
9
|
from simplyblock_core.models.storage_node import StorageNode
|
16
10
|
|
17
11
|
|
18
|
-
|
19
|
-
logger_handler = logging.StreamHandler(stream=sys.stdout)
|
20
|
-
logger_handler.setFormatter(logging.Formatter('%(asctime)s: %(levelname)s: %(message)s'))
|
21
|
-
gelf_handler = GELFUDPHandler('0.0.0.0', constants.GELF_PORT)
|
22
|
-
logger = logging.getLogger()
|
23
|
-
logger.addHandler(gelf_handler)
|
24
|
-
logger.addHandler(logger_handler)
|
25
|
-
logger.setLevel(logging.DEBUG)
|
12
|
+
logger = utils.get_logger(__name__)
|
26
13
|
|
27
14
|
# get DB controller
|
28
15
|
db_controller = kv_store.DBController()
|
@@ -95,35 +95,40 @@ def addNvmeDevices(cluster, rpc_client, devs, snode):
|
|
95
95
|
|
96
96
|
if pcie in ctr_map:
|
97
97
|
nvme_controller = ctr_map[pcie]
|
98
|
+
nvme_bdevs = []
|
99
|
+
for bdev in rpc_client.get_bdevs():
|
100
|
+
if bdev['name'].startswith(nvme_controller):
|
101
|
+
nvme_bdevs.append(bdev['name'])
|
98
102
|
else:
|
99
|
-
|
100
|
-
|
103
|
+
pci_st = str(pcie).replace("0", "").replace(":", "").replace(".", "")
|
104
|
+
nvme_controller = "nvme_%s" % pci_st
|
105
|
+
nvme_bdevs, err = rpc_client.bdev_nvme_controller_attach(nvme_controller, pcie)
|
101
106
|
time.sleep(2)
|
102
107
|
|
103
|
-
nvme_bdev
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
108
|
+
for nvme_bdev in nvme_bdevs:
|
109
|
+
rpc_client.bdev_examine(nvme_bdev)
|
110
|
+
time.sleep(3)
|
111
|
+
ret = rpc_client.get_bdevs(nvme_bdev)
|
112
|
+
nvme_dict = ret[0]
|
113
|
+
nvme_driver_data = nvme_dict['driver_specific']['nvme'][0]
|
114
|
+
model_number = nvme_driver_data['ctrlr_data']['model_number']
|
115
|
+
total_size = nvme_dict['block_size'] * nvme_dict['num_blocks']
|
116
|
+
|
117
|
+
devices.append(
|
118
|
+
NVMeDevice({
|
119
|
+
'uuid': str(uuid.uuid4()),
|
120
|
+
'device_name': nvme_dict['name'],
|
121
|
+
'size': total_size,
|
122
|
+
'physical_label': next_physical_label,
|
123
|
+
'pcie_address': nvme_driver_data['pci_address'],
|
124
|
+
'model_id': model_number,
|
125
|
+
'serial_number': nvme_driver_data['ctrlr_data']['serial_number'],
|
126
|
+
'nvme_bdev': nvme_bdev,
|
127
|
+
'nvme_controller': nvme_controller,
|
128
|
+
'node_id': snode.get_id(),
|
129
|
+
'cluster_id': snode.cluster_id,
|
130
|
+
'status': NVMeDevice.STATUS_ONLINE
|
131
|
+
}))
|
127
132
|
next_physical_label += 1
|
128
133
|
return devices
|
129
134
|
|
@@ -601,40 +606,27 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
601
606
|
logger.error(f"This node is part of another cluster: {node_info['cluster_id']}")
|
602
607
|
return False
|
603
608
|
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
"version": "2017-09-30"
|
626
|
-
}
|
627
|
-
"""""
|
628
|
-
logger.debug(json.dumps(ec2_metadata,indent=2))
|
629
|
-
logger.info(f"EC2 Instance found: {ec2_metadata['instanceId']}")
|
630
|
-
logger.info(f"EC2 Instance type: {ec2_metadata['instanceType']}")
|
631
|
-
logger.info(f"EC2 Instance privateIp: {ec2_metadata['privateIp']}")
|
632
|
-
logger.info(f"EC2 Instance region: {ec2_metadata['region']}")
|
633
|
-
|
634
|
-
for node in db_controller.get_storage_nodes():
|
635
|
-
if node.ec2_instance_id and node.ec2_instance_id == ec2_metadata['instanceId']:
|
636
|
-
logger.error(f"Node already exists, try remove it first: {ec2_metadata['instanceId']}")
|
637
|
-
return False
|
609
|
+
cloud_instance = node_info['cloud_instance']
|
610
|
+
""""
|
611
|
+
"cloud_instance": {
|
612
|
+
"id": "565979732541",
|
613
|
+
"type": "m6id.large",
|
614
|
+
"cloud": "google",
|
615
|
+
"ip": "10.10.10.10",
|
616
|
+
"public_ip": "20.20.20.20",
|
617
|
+
}
|
618
|
+
"""""
|
619
|
+
logger.debug(json.dumps(cloud_instance, indent=2))
|
620
|
+
logger.info(f"Instance id: {cloud_instance['id']}")
|
621
|
+
logger.info(f"Instance cloud: {cloud_instance['cloud']}")
|
622
|
+
logger.info(f"Instance type: {cloud_instance['type']}")
|
623
|
+
logger.info(f"Instance privateIp: {cloud_instance['ip']}")
|
624
|
+
logger.info(f"Instance public_ip: {cloud_instance['public_ip']}")
|
625
|
+
|
626
|
+
for node in db_controller.get_storage_nodes():
|
627
|
+
if node.cloud_instance_id and node.cloud_instance_id == cloud_instance['id']:
|
628
|
+
logger.error(f"Node already exists, try remove it first: {cloud_instance['id']}")
|
629
|
+
return False
|
638
630
|
|
639
631
|
# Tune cpu maks parameters
|
640
632
|
cpu_count = node_info["cpu_count"]
|
@@ -662,18 +654,19 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
662
654
|
distrib_cpu_mask = utils.generate_mask(distrib_cpu_cores)
|
663
655
|
|
664
656
|
# Calculate pool count
|
665
|
-
if
|
666
|
-
|
657
|
+
if cloud_instance['type']:
|
658
|
+
ins_type = cloud_instance['type']
|
659
|
+
supported_type, storage_devices, device_size = utils.get_total_size_per_instance_type(ins_type)
|
667
660
|
if not supported_type:
|
668
|
-
logger.warning(f"Unsupported
|
661
|
+
logger.warning(f"Unsupported instance-type {ins_type} for deployment")
|
669
662
|
if not number_of_devices:
|
670
|
-
logger.error(f"Unsupported
|
663
|
+
logger.error(f"Unsupported instance-type {ins_type} "
|
671
664
|
"for deployment, please specify --number-of-devices")
|
672
665
|
return False
|
673
666
|
else:
|
674
667
|
number_of_devices = storage_devices
|
675
668
|
else:
|
676
|
-
logger.warning("Can not get
|
669
|
+
logger.warning("Can not get instance type for this instance.")
|
677
670
|
if not number_of_devices:
|
678
671
|
logger.error("Unsupported instance type please specify --number-of-devices.")
|
679
672
|
return False
|
@@ -696,7 +689,7 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
696
689
|
logger.info(f"Total: {utils.humanbytes(memory_details['total'])}")
|
697
690
|
logger.info(f"Free: {utils.humanbytes(memory_details['free'])}")
|
698
691
|
else:
|
699
|
-
logger.error(f"Cannot get memory info from the
|
692
|
+
logger.error(f"Cannot get memory info from the instance.. Exiting")
|
700
693
|
return False
|
701
694
|
|
702
695
|
satisfied, spdk_mem = utils.calculate_spdk_memory(minimum_hp_memory,
|
@@ -750,12 +743,9 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
750
743
|
snode.baseboard_sn = node_info['system_id']
|
751
744
|
snode.system_uuid = node_info['system_id']
|
752
745
|
|
753
|
-
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
if "ec2_public_ip" in node_info and node_info['ec2_public_ip']:
|
758
|
-
snode.ec2_public_ip = node_info['ec2_public_ip']
|
746
|
+
snode.cloud_instance_id = cloud_instance['id']
|
747
|
+
snode.cloud_instance_type = cloud_instance['type']
|
748
|
+
snode.cloud_instance_public_ip = cloud_instance['public_ip']
|
759
749
|
|
760
750
|
snode.hostname = hostname
|
761
751
|
snode.host_nqn = subsystem_nqn
|
@@ -904,7 +894,7 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
904
894
|
ret = rpc_client.bdev_nvme_attach_controller_tcp(name, dev.nvmf_nqn, dev.nvmf_ip, dev.nvmf_port)
|
905
895
|
if not ret:
|
906
896
|
logger.error(f"Failed to connect to device: {name}")
|
907
|
-
|
897
|
+
return False
|
908
898
|
|
909
899
|
dev.remote_bdev = f"{name}n1"
|
910
900
|
idx = -1
|
@@ -979,6 +969,12 @@ def remove_storage_node(node_id, force_remove=False, force_migrate=False):
|
|
979
969
|
if force_remove is False:
|
980
970
|
return False
|
981
971
|
|
972
|
+
task_id = tasks_controller.get_active_node_restart_task(snode.cluster_id, snode.get_id())
|
973
|
+
if task_id:
|
974
|
+
logger.error(f"Restart task found: {task_id}, can not remove storage node")
|
975
|
+
if force_remove is False:
|
976
|
+
return False
|
977
|
+
|
982
978
|
if snode.lvols:
|
983
979
|
if force_migrate:
|
984
980
|
for lvol_id in snode.lvols:
|
@@ -1076,6 +1072,12 @@ def restart_storage_node(
|
|
1076
1072
|
if force is False:
|
1077
1073
|
return False
|
1078
1074
|
|
1075
|
+
task_id = tasks_controller.get_active_node_restart_task(snode.cluster_id, snode.get_id())
|
1076
|
+
if task_id:
|
1077
|
+
logger.error(f"Restart task found: {task_id}, can not restart storage node")
|
1078
|
+
if force is False:
|
1079
|
+
return False
|
1080
|
+
|
1079
1081
|
logger.info("Setting node state to restarting")
|
1080
1082
|
old_status = snode.status
|
1081
1083
|
snode.status = StorageNode.STATUS_RESTARTING
|
@@ -1088,7 +1090,7 @@ def restart_storage_node(
|
|
1088
1090
|
|
1089
1091
|
snode_api = SNodeClient(snode.api_endpoint)
|
1090
1092
|
node_info, _ = snode_api.info()
|
1091
|
-
logger.
|
1093
|
+
logger.debug(f"Node info: {node_info}")
|
1092
1094
|
|
1093
1095
|
logger.info("Restarting SPDK")
|
1094
1096
|
|
@@ -1104,20 +1106,20 @@ def restart_storage_node(
|
|
1104
1106
|
snode.spdk_image = img
|
1105
1107
|
|
1106
1108
|
# Calculate pool count
|
1107
|
-
if snode.
|
1108
|
-
supported_type, storage_devices, device_size = utils.get_total_size_per_instance_type(snode.
|
1109
|
+
if snode.cloud_instance_type:
|
1110
|
+
supported_type, storage_devices, device_size = utils.get_total_size_per_instance_type(snode.cloud_instance_type)
|
1109
1111
|
if not supported_type:
|
1110
|
-
logger.warning(f"Unsupported
|
1112
|
+
logger.warning(f"Unsupported instance-type {snode.cloud_instance_type} for deployment")
|
1111
1113
|
if not number_of_devices:
|
1112
1114
|
if not snode.number_of_devices:
|
1113
|
-
logger.error(f"Unsupported
|
1115
|
+
logger.error(f"Unsupported instance-type {snode.cloud_instance_type} "
|
1114
1116
|
"for deployment, please specify --number-of-devices")
|
1115
1117
|
return False
|
1116
1118
|
number_of_devices = snode.number_of_devices
|
1117
1119
|
else:
|
1118
1120
|
number_of_devices = storage_devices
|
1119
1121
|
else:
|
1120
|
-
logger.warning("Can not get
|
1122
|
+
logger.warning("Can not get instance type for this instance..")
|
1121
1123
|
if not number_of_devices:
|
1122
1124
|
if snode.number_of_devices:
|
1123
1125
|
number_of_devices = snode.number_of_devices
|
@@ -1144,7 +1146,7 @@ def restart_storage_node(
|
|
1144
1146
|
logger.info(f"Total: {utils.humanbytes(memory_details['total'])}")
|
1145
1147
|
logger.info(f"Free: {utils.humanbytes(memory_details['free'])}")
|
1146
1148
|
else:
|
1147
|
-
logger.error(f"Cannot get memory info from the
|
1149
|
+
logger.error(f"Cannot get memory info from the instance.. Exiting")
|
1148
1150
|
|
1149
1151
|
satisfied, spdk_mem = utils.calculate_spdk_memory(minimum_hp_memory,
|
1150
1152
|
minimum_sys_memory,
|
@@ -1297,10 +1299,15 @@ def restart_storage_node(
|
|
1297
1299
|
if dev.status != 'online':
|
1298
1300
|
continue
|
1299
1301
|
name = f"remote_{dev.alceml_bdev}"
|
1302
|
+
ret = rpc_client.bdev_nvme_controller_list(name)
|
1303
|
+
if ret:
|
1304
|
+
logger.debug(f"controller found, removing")
|
1305
|
+
rpc_client.bdev_nvme_detach_controller(name)
|
1306
|
+
time.sleep(1)
|
1300
1307
|
ret = rpc_client.bdev_nvme_attach_controller_tcp(name, dev.nvmf_nqn, dev.nvmf_ip, dev.nvmf_port)
|
1301
1308
|
if not ret:
|
1302
1309
|
logger.warning(f"Failed to connect to device: {name}")
|
1303
|
-
|
1310
|
+
return False
|
1304
1311
|
|
1305
1312
|
dev.remote_bdev = f"{name}n1"
|
1306
1313
|
idx = -1
|
@@ -1378,16 +1385,13 @@ def list_storage_nodes(is_json, cluster_id=None):
|
|
1378
1385
|
"Management IP": node.mgmt_ip,
|
1379
1386
|
"Devices": f"{total_devices}/{online_devices}",
|
1380
1387
|
"LVols": f"{len(node.lvols)}",
|
1381
|
-
# "Data NICs": "\n".join([d.if_name for d in node.data_nics]),
|
1382
1388
|
"Status": node.status,
|
1383
1389
|
"Health": node.health_check,
|
1384
1390
|
|
1385
|
-
"
|
1386
|
-
"
|
1387
|
-
"
|
1391
|
+
"Cloud ID": node.cloud_instance_id,
|
1392
|
+
"Cloud Type": node.cloud_instance_type,
|
1393
|
+
"Ext IP": node.cloud_instance_public_ip,
|
1388
1394
|
|
1389
|
-
# "Updated At": datetime.datetime.strptime(node.updated_at, "%Y-%m-%d %H:%M:%S.%f").strftime(
|
1390
|
-
# "%H:%M:%S, %d/%m/%Y"),
|
1391
1395
|
})
|
1392
1396
|
|
1393
1397
|
if not data:
|
@@ -5,9 +5,11 @@ import os
|
|
5
5
|
import random
|
6
6
|
import re
|
7
7
|
import string
|
8
|
+
import sys
|
8
9
|
|
9
10
|
import docker
|
10
11
|
from prettytable import PrettyTable
|
12
|
+
from graypy import GELFUDPHandler
|
11
13
|
|
12
14
|
from simplyblock_core import constants
|
13
15
|
from simplyblock_core import shell_utils
|
@@ -408,7 +410,20 @@ def get_host_arch():
|
|
408
410
|
out, _, _ = shell_utils.run_command("uname -m")
|
409
411
|
return out
|
410
412
|
|
413
|
+
|
411
414
|
def decimal_to_hex_power_of_2(decimal_number):
|
412
415
|
power_result = 2 ** decimal_number
|
413
416
|
hex_result = hex(power_result)
|
414
417
|
return hex_result
|
418
|
+
|
419
|
+
|
420
|
+
def get_logger(name):
|
421
|
+
logger = logging.getLogger(name)
|
422
|
+
logger.setLevel(constants.LOG_LEVEL)
|
423
|
+
logger_handler = logging.StreamHandler(stream=sys.stdout)
|
424
|
+
logger_handler.setFormatter(logging.Formatter('%(asctime)s: %(levelname)s: %(message)s'))
|
425
|
+
logger.addHandler(logger_handler)
|
426
|
+
|
427
|
+
gelf_handler = GELFUDPHandler('0.0.0.0', constants.GELF_PORT)
|
428
|
+
logger.addHandler(gelf_handler)
|
429
|
+
return logger
|
@@ -7,7 +7,7 @@ from flask import Flask
|
|
7
7
|
|
8
8
|
import utils
|
9
9
|
from blueprints import web_api_cluster, web_api_mgmt_node, web_api_device, \
|
10
|
-
web_api_lvol, web_api_storage_node, web_api_pool, web_api_caching_node, web_api_snapshot
|
10
|
+
web_api_lvol, web_api_storage_node, web_api_pool, web_api_caching_node, web_api_snapshot
|
11
11
|
from auth_middleware import token_required
|
12
12
|
from simplyblock_core import constants
|
13
13
|
|
@@ -31,7 +31,6 @@ app.register_blueprint(web_api_snapshot.bp)
|
|
31
31
|
app.register_blueprint(web_api_storage_node.bp)
|
32
32
|
app.register_blueprint(web_api_pool.bp)
|
33
33
|
app.register_blueprint(web_api_caching_node.bp)
|
34
|
-
app.register_blueprint(web_api_deployer.bp)
|
35
34
|
|
36
35
|
|
37
36
|
@app.before_request
|
@@ -14,7 +14,7 @@ from flask import Blueprint
|
|
14
14
|
from flask import request
|
15
15
|
|
16
16
|
from simplyblock_web import utils, node_utils
|
17
|
-
from simplyblock_core import scripts, constants
|
17
|
+
from simplyblock_core import scripts, constants, shell_utils
|
18
18
|
|
19
19
|
logger = logging.getLogger(__name__)
|
20
20
|
logger.setLevel(logging.DEBUG)
|
@@ -392,3 +392,74 @@ def disconnect_all():
|
|
392
392
|
logger.debug(out)
|
393
393
|
logger.debug(err)
|
394
394
|
return utils.get_response(ret_code)
|
395
|
+
|
396
|
+
|
397
|
+
|
398
|
+
@bp.route('/make_gpt_partitions', methods=['POST'])
|
399
|
+
def make_gpt_partitions_for_nbd():
|
400
|
+
nbd_device = '/dev/nbd0'
|
401
|
+
jm_percent = 10
|
402
|
+
|
403
|
+
try:
|
404
|
+
data = request.get_json()
|
405
|
+
nbd_device = data['nbd_device']
|
406
|
+
jm_percent = data['jm_percent']
|
407
|
+
except:
|
408
|
+
pass
|
409
|
+
|
410
|
+
cmd_list = [
|
411
|
+
f"parted -fs {nbd_device} mklabel gpt",
|
412
|
+
f"parted -f {nbd_device} mkpart journal \"0%\" \"{jm_percent}%\""
|
413
|
+
]
|
414
|
+
sg_cmd_list = [
|
415
|
+
f"sgdisk -t 1:6527994e-2c5a-4eec-9613-8f5944074e8b {nbd_device}",
|
416
|
+
]
|
417
|
+
|
418
|
+
for cmd in cmd_list+sg_cmd_list:
|
419
|
+
logger.debug(cmd)
|
420
|
+
out, err, ret_code = shell_utils.run_command(cmd)
|
421
|
+
logger.debug(out)
|
422
|
+
logger.debug(ret_code)
|
423
|
+
if ret_code != 0:
|
424
|
+
logger.error(err)
|
425
|
+
return utils.get_response(False, f"Error running cmd: {cmd}, returncode: {ret_code}, output: {out}, err: {err}")
|
426
|
+
time.sleep(1)
|
427
|
+
|
428
|
+
return utils.get_response(True)
|
429
|
+
|
430
|
+
|
431
|
+
|
432
|
+
@bp.route('/delete_dev_gpt_partitions', methods=['POST'])
|
433
|
+
def delete_gpt_partitions_for_dev():
|
434
|
+
|
435
|
+
data = request.get_json()
|
436
|
+
|
437
|
+
if "device_pci" not in data:
|
438
|
+
return utils.get_response(False, "Required parameter is missing: device_pci")
|
439
|
+
|
440
|
+
device_pci = data['device_pci']
|
441
|
+
|
442
|
+
cmd_list = [
|
443
|
+
f"echo -n \"{device_pci}\" > /sys/bus/pci/drivers/uio_pci_generic/unbind",
|
444
|
+
f"echo -n \"{device_pci}\" > /sys/bus/pci/drivers/nvme/bind",
|
445
|
+
]
|
446
|
+
|
447
|
+
for cmd in cmd_list:
|
448
|
+
logger.debug(cmd)
|
449
|
+
ret = os.popen(cmd).read().strip()
|
450
|
+
logger.debug(ret)
|
451
|
+
time.sleep(1)
|
452
|
+
|
453
|
+
device_name = os.popen(f"ls /sys/devices/pci0000:00/{device_pci}/nvme/nvme*/ | grep nvme").read().strip()
|
454
|
+
cmd_list = [
|
455
|
+
f"parted -fs /dev/{device_name} mklabel gpt",
|
456
|
+
f"echo -n \"{device_pci}\" > /sys/bus/pci/drivers/nvme/unbind",
|
457
|
+
]
|
458
|
+
|
459
|
+
for cmd in cmd_list:
|
460
|
+
logger.debug(cmd)
|
461
|
+
ret = os.popen(cmd).read().strip()
|
462
|
+
logger.debug(ret)
|
463
|
+
time.sleep(1)
|
464
|
+
|
465
|
+
return utils.get_response(True)
|
@@ -14,7 +14,7 @@ from flask import request
|
|
14
14
|
from kubernetes.client import ApiException
|
15
15
|
from jinja2 import Environment, FileSystemLoader
|
16
16
|
|
17
|
-
from simplyblock_core import constants
|
17
|
+
from simplyblock_core import constants, shell_utils
|
18
18
|
|
19
19
|
from simplyblock_web import utils, node_utils
|
20
20
|
|
@@ -111,6 +111,8 @@ def spdk_process_start():
|
|
111
111
|
else:
|
112
112
|
spdk_mem = 64096
|
113
113
|
|
114
|
+
spdk_mem_gega = int(spdk_mem / 1024)
|
115
|
+
|
114
116
|
spdk_image = constants.SIMPLY_BLOCK_SPDK_CORE_IMAGE
|
115
117
|
if node_utils.get_host_arch() == "aarch64":
|
116
118
|
spdk_image = constants.SIMPLY_BLOCK_SPDK_CORE_IMAGE_ARM64
|
@@ -132,6 +134,7 @@ def spdk_process_start():
|
|
132
134
|
'SPDK_IMAGE': spdk_image,
|
133
135
|
'SPDK_CPU_MASK': spdk_cpu_mask,
|
134
136
|
'SPDK_MEM': spdk_mem,
|
137
|
+
'MEM_GEGA': spdk_mem_gega,
|
135
138
|
'SERVER_IP': data['server_ip'],
|
136
139
|
'RPC_PORT': data['rpc_port'],
|
137
140
|
'RPC_USERNAME': data['rpc_username'],
|
@@ -277,3 +280,75 @@ def disconnect_all():
|
|
277
280
|
logger.debug(out)
|
278
281
|
logger.debug(err)
|
279
282
|
return utils.get_response(ret_code)
|
283
|
+
|
284
|
+
|
285
|
+
|
286
|
+
|
287
|
+
@bp.route('/make_gpt_partitions', methods=['POST'])
|
288
|
+
def make_gpt_partitions_for_nbd():
|
289
|
+
nbd_device = '/dev/nbd0'
|
290
|
+
jm_percent = 10
|
291
|
+
|
292
|
+
try:
|
293
|
+
data = request.get_json()
|
294
|
+
nbd_device = data['nbd_device']
|
295
|
+
jm_percent = data['jm_percent']
|
296
|
+
except:
|
297
|
+
pass
|
298
|
+
|
299
|
+
cmd_list = [
|
300
|
+
f"parted -fs {nbd_device} mklabel gpt",
|
301
|
+
f"parted -f {nbd_device} mkpart journal \"0%\" \"{jm_percent}%\""
|
302
|
+
]
|
303
|
+
sg_cmd_list = [
|
304
|
+
f"sgdisk -t 1:6527994e-2c5a-4eec-9613-8f5944074e8b {nbd_device}",
|
305
|
+
]
|
306
|
+
|
307
|
+
for cmd in cmd_list+sg_cmd_list:
|
308
|
+
logger.debug(cmd)
|
309
|
+
out, err, ret_code = shell_utils.run_command(cmd)
|
310
|
+
logger.debug(out)
|
311
|
+
logger.debug(ret_code)
|
312
|
+
if ret_code != 0:
|
313
|
+
logger.error(err)
|
314
|
+
return utils.get_response(False, f"Error running cmd: {cmd}, returncode: {ret_code}, output: {out}, err: {err}")
|
315
|
+
time.sleep(1)
|
316
|
+
|
317
|
+
return utils.get_response(True)
|
318
|
+
|
319
|
+
|
320
|
+
|
321
|
+
@bp.route('/delete_dev_gpt_partitions', methods=['POST'])
|
322
|
+
def delete_gpt_partitions_for_dev():
|
323
|
+
|
324
|
+
data = request.get_json()
|
325
|
+
|
326
|
+
if "device_pci" not in data:
|
327
|
+
return utils.get_response(False, "Required parameter is missing: device_pci")
|
328
|
+
|
329
|
+
device_pci = data['device_pci']
|
330
|
+
|
331
|
+
cmd_list = [
|
332
|
+
f"echo -n \"{device_pci}\" > /sys/bus/pci/drivers/uio_pci_generic/unbind",
|
333
|
+
f"echo -n \"{device_pci}\" > /sys/bus/pci/drivers/nvme/bind",
|
334
|
+
]
|
335
|
+
|
336
|
+
for cmd in cmd_list:
|
337
|
+
logger.debug(cmd)
|
338
|
+
ret = os.popen(cmd).read().strip()
|
339
|
+
logger.debug(ret)
|
340
|
+
time.sleep(1)
|
341
|
+
|
342
|
+
device_name = os.popen(f"ls /sys/devices/pci0000:00/{device_pci}/nvme/nvme*/ | grep nvme").read().strip()
|
343
|
+
cmd_list = [
|
344
|
+
f"parted -fs /dev/{device_name} mklabel gpt",
|
345
|
+
f"echo -n \"{device_pci}\" > /sys/bus/pci/drivers/nvme/unbind",
|
346
|
+
]
|
347
|
+
|
348
|
+
for cmd in cmd_list:
|
349
|
+
logger.debug(cmd)
|
350
|
+
ret = os.popen(cmd).read().strip()
|
351
|
+
logger.debug(ret)
|
352
|
+
time.sleep(1)
|
353
|
+
|
354
|
+
return utils.get_response(True)
|