sbcli-dev 6.2.2__tar.gz → 6.2.3__tar.gz
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_dev-6.2.2 → sbcli_dev-6.2.3}/PKG-INFO +1 -1
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/env_var +1 -1
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/PKG-INFO +1 -1
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/tasks_controller.py +1 -3
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/kv_store.py +5 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/base_model.py +15 -62
- sbcli_dev-6.2.3/simplyblock_core/models/caching_node.py +109 -0
- sbcli_dev-6.2.3/simplyblock_core/models/cluster.py +107 -0
- sbcli_dev-6.2.3/simplyblock_core/models/events.py +60 -0
- sbcli_dev-6.2.3/simplyblock_core/models/iface.py +30 -0
- sbcli_dev-6.2.3/simplyblock_core/models/job_schedule.py +52 -0
- sbcli_dev-6.2.3/simplyblock_core/models/lvol_model.py +97 -0
- sbcli_dev-6.2.3/simplyblock_core/models/mgmt_node.py +54 -0
- sbcli_dev-6.2.3/simplyblock_core/models/nvme_device.py +132 -0
- sbcli_dev-6.2.3/simplyblock_core/models/pool.py +59 -0
- sbcli_dev-6.2.3/simplyblock_core/models/snapshot.py +29 -0
- sbcli_dev-6.2.3/simplyblock_core/models/stats.py +134 -0
- sbcli_dev-6.2.3/simplyblock_core/models/storage_node.py +147 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/storage_node_ops.py +105 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/app.py +0 -6
- sbcli_dev-6.2.2/simplyblock_core/models/caching_node.py +0 -52
- sbcli_dev-6.2.2/simplyblock_core/models/cluster.py +0 -96
- sbcli_dev-6.2.2/simplyblock_core/models/events.py +0 -45
- sbcli_dev-6.2.2/simplyblock_core/models/iface.py +0 -20
- sbcli_dev-6.2.2/simplyblock_core/models/job_schedule.py +0 -35
- sbcli_dev-6.2.2/simplyblock_core/models/lvol_model.py +0 -63
- sbcli_dev-6.2.2/simplyblock_core/models/mgmt_node.py +0 -14
- sbcli_dev-6.2.2/simplyblock_core/models/nvme_device.py +0 -82
- sbcli_dev-6.2.2/simplyblock_core/models/pool.py +0 -47
- sbcli_dev-6.2.2/simplyblock_core/models/snapshot.py +0 -19
- sbcli_dev-6.2.2/simplyblock_core/models/stats.py +0 -115
- sbcli_dev-6.2.2/simplyblock_core/models/storage_node.py +0 -83
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/README.md +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/pyproject.toml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/SOURCES.txt +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/dependency_links.txt +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/entry_points.txt +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/requires.txt +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/top_level.txt +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/setup.cfg +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/setup.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_cli/cli.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_cli/main.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/__init__.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/cluster_ops.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/compute_node_ops.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/constants.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/device_controller.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/lvol_controller.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/compute_node.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/global_settings.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/rpc_client.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/health_check_service.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/port_stat_collector.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/snode_client.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/utils.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/__init__.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/snode_ops.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/node_utils.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/snode_app.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/snode_app_k8s.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/delete.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/tst.py +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/utils.py +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# coding=utf-8
|
|
2
|
-
import datetime
|
|
3
2
|
import json
|
|
4
3
|
import logging
|
|
5
4
|
import time
|
|
@@ -123,8 +122,7 @@ def list_tasks(cluster_id, is_json=False):
|
|
|
123
122
|
"Retry": retry,
|
|
124
123
|
"Status": task.status,
|
|
125
124
|
"Result": task.function_result,
|
|
126
|
-
"Updated
|
|
127
|
-
"%H:%M:%S, %d/%m/%Y"),
|
|
125
|
+
"Updated at": time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(task.updated_at)),
|
|
128
126
|
})
|
|
129
127
|
return utils.print_table(data)
|
|
130
128
|
|
|
@@ -6,6 +6,7 @@ import time
|
|
|
6
6
|
|
|
7
7
|
from simplyblock_core import constants
|
|
8
8
|
from simplyblock_core.models.caching_node import CachingNode
|
|
9
|
+
from simplyblock_core.models.cluster import ClusterMap
|
|
9
10
|
|
|
10
11
|
from simplyblock_core.models.cluster import Cluster
|
|
11
12
|
from simplyblock_core.models.deployer import Deployer
|
|
@@ -80,6 +81,10 @@ class DBController:
|
|
|
80
81
|
def clear_prefix(self, prefix):
|
|
81
82
|
self.kv_store.db.clear_range_startswith(prefix)
|
|
82
83
|
|
|
84
|
+
def get_cluster_map(self):
|
|
85
|
+
cmap = ClusterMap().read_from_db(self.kv_store)
|
|
86
|
+
return cmap[0] if cmap else None
|
|
87
|
+
|
|
83
88
|
def get_storage_nodes(self):
|
|
84
89
|
ret = StorageNode().read_from_db(self.kv_store)
|
|
85
90
|
ret = sorted(ret, key=lambda x: x.create_dt)
|
|
@@ -6,30 +6,23 @@ from typing import Mapping
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class BaseModel(object):
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def __init__(self, data=None):
|
|
22
|
-
self.name = self.__class__.__name__
|
|
23
|
-
self.set_attrs(data)
|
|
9
|
+
def __init__(self):
|
|
10
|
+
self._attribute_map = {
|
|
11
|
+
"id": {"type": str, "default": ""},
|
|
12
|
+
"name": {"type": str, "default": self.__class__.__name__},
|
|
13
|
+
"object_type": {"type": str, "default": ""},
|
|
14
|
+
"deleted": {"type": bool, 'default': False},
|
|
15
|
+
"updated_at": {"type": str, 'default': ""},
|
|
16
|
+
"create_dt": {"type": str, 'default': ""},
|
|
17
|
+
"remove_dt": {"type": str, 'default': ""},
|
|
18
|
+
}
|
|
19
|
+
self.set_attrs({}, {})
|
|
24
20
|
|
|
25
21
|
def get_id(self):
|
|
26
|
-
return self.
|
|
22
|
+
return self.id
|
|
27
23
|
|
|
28
|
-
def set_attrs(self, data):
|
|
29
|
-
self._attribute_map
|
|
30
|
-
for s in self.__dir__():
|
|
31
|
-
if not s.startswith("_"):
|
|
32
|
-
self._attribute_map[s]= {"type": getattr(self, s).__class__, "default": getattr(self, s)}
|
|
24
|
+
def set_attrs(self, attributes, data):
|
|
25
|
+
self._attribute_map.update(attributes)
|
|
33
26
|
self.from_dict(data)
|
|
34
27
|
|
|
35
28
|
def from_dict(self, data):
|
|
@@ -96,7 +89,7 @@ class BaseModel(object):
|
|
|
96
89
|
def read_from_db(self, kv_store, id="", limit=0, reverse=False):
|
|
97
90
|
try:
|
|
98
91
|
objects = []
|
|
99
|
-
prefix = "%s/%s/%s" % (self.
|
|
92
|
+
prefix = "%s/%s/%s" % (self.object_type, self.name, id)
|
|
100
93
|
for k, v in kv_store.db.get_range_startswith(prefix.encode('utf-8'), limit=limit, reverse=reverse):
|
|
101
94
|
objects.append(self.__class__().from_dict(json.loads(v)))
|
|
102
95
|
return objects
|
|
@@ -143,43 +136,3 @@ class BaseModel(object):
|
|
|
143
136
|
if isinstance(item, str) and item in self._attribute_map:
|
|
144
137
|
return getattr(self, item)
|
|
145
138
|
return False
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
class BaseNodeObject(BaseModel):
|
|
149
|
-
|
|
150
|
-
STATUS_ONLINE = 'online'
|
|
151
|
-
STATUS_OFFLINE = 'offline'
|
|
152
|
-
STATUS_SUSPENDED = 'suspended'
|
|
153
|
-
STATUS_IN_SHUTDOWN = 'in_shutdown'
|
|
154
|
-
STATUS_REMOVED = 'removed'
|
|
155
|
-
STATUS_RESTARTING = 'in_restart'
|
|
156
|
-
|
|
157
|
-
STATUS_IN_CREATION = 'in_creation'
|
|
158
|
-
STATUS_UNREACHABLE = 'unreachable'
|
|
159
|
-
STATUS_SCHEDULABLE = 'schedulable'
|
|
160
|
-
|
|
161
|
-
STATUS_CODE_MAP = {
|
|
162
|
-
STATUS_ONLINE: 0,
|
|
163
|
-
STATUS_OFFLINE: 1,
|
|
164
|
-
STATUS_SUSPENDED: 2,
|
|
165
|
-
STATUS_REMOVED: 3,
|
|
166
|
-
|
|
167
|
-
STATUS_IN_CREATION: 10,
|
|
168
|
-
STATUS_IN_SHUTDOWN: 11,
|
|
169
|
-
STATUS_RESTARTING: 12,
|
|
170
|
-
|
|
171
|
-
STATUS_UNREACHABLE: 20,
|
|
172
|
-
|
|
173
|
-
STATUS_SCHEDULABLE: 30,
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
def get_status_code(self):
|
|
177
|
-
if self.status in self.STATUS_CODE_MAP:
|
|
178
|
-
return self.STATUS_CODE_MAP[self.status]
|
|
179
|
-
else:
|
|
180
|
-
return -1
|
|
181
|
-
|
|
182
|
-
def get_clean_dict(self):
|
|
183
|
-
data = super(BaseNodeObject, self).get_clean_dict()
|
|
184
|
-
data['status_code'] = self.get_status_code()
|
|
185
|
-
return data
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing import List
|
|
5
|
+
|
|
6
|
+
from simplyblock_core.models.base_model import BaseModel
|
|
7
|
+
from simplyblock_core.models.iface import IFace
|
|
8
|
+
from simplyblock_core.models.lvol_model import LVol
|
|
9
|
+
from simplyblock_core.models.nvme_device import NVMeDevice
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CachedLVol(BaseModel):
|
|
13
|
+
|
|
14
|
+
attributes = {
|
|
15
|
+
"uuid": {"type": str, 'default': ""},
|
|
16
|
+
"lvol_id": {"type": str, 'default': ""},
|
|
17
|
+
"lvol": {"type": LVol, 'default': None},
|
|
18
|
+
"hostname": {"type": str, 'default': ""},
|
|
19
|
+
"local_nqn": {"type": str, 'default': ""},
|
|
20
|
+
"ocf_bdev": {"type": str, 'default': ""},
|
|
21
|
+
"device_path": {"type": str, 'default': ""},
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
def __init__(self, data=None):
|
|
25
|
+
super(CachedLVol, self).__init__()
|
|
26
|
+
self.set_attrs(self.attributes, data)
|
|
27
|
+
self.object_type = "object"
|
|
28
|
+
|
|
29
|
+
def get_id(self):
|
|
30
|
+
return self.uuid
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class CachingNode(BaseModel):
|
|
34
|
+
|
|
35
|
+
STATUS_ONLINE = 'online'
|
|
36
|
+
STATUS_OFFLINE = 'offline'
|
|
37
|
+
STATUS_SUSPENDED = 'suspended'
|
|
38
|
+
STATUS_IN_CREATION = 'in_creation'
|
|
39
|
+
STATUS_IN_SHUTDOWN = 'in_shutdown'
|
|
40
|
+
STATUS_RESTARTING = 'restarting'
|
|
41
|
+
STATUS_UNREACHABLE = 'unreachable'
|
|
42
|
+
STATUS_REMOVED = 'removed'
|
|
43
|
+
|
|
44
|
+
STATUS_CODE_MAP = {
|
|
45
|
+
STATUS_ONLINE: 0,
|
|
46
|
+
STATUS_OFFLINE: 1,
|
|
47
|
+
STATUS_SUSPENDED: 2,
|
|
48
|
+
STATUS_REMOVED: 3,
|
|
49
|
+
|
|
50
|
+
STATUS_IN_CREATION: 10,
|
|
51
|
+
STATUS_IN_SHUTDOWN: 11,
|
|
52
|
+
STATUS_RESTARTING: 12,
|
|
53
|
+
|
|
54
|
+
STATUS_UNREACHABLE: 20,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
attributes = {
|
|
58
|
+
"uuid": {"type": str, 'default': ""},
|
|
59
|
+
"baseboard_sn": {"type": str, 'default': ""},
|
|
60
|
+
"system_uuid": {"type": str, 'default': ""},
|
|
61
|
+
"hostname": {"type": str, 'default': ""},
|
|
62
|
+
"host_nqn": {"type": str, 'default': ""},
|
|
63
|
+
"subsystem": {"type": str, 'default': ""},
|
|
64
|
+
"nvme_devices": {"type": List[NVMeDevice], 'default': []},
|
|
65
|
+
"sequential_number": {"type": int, 'default': 0},
|
|
66
|
+
"partitions_count": {"type": int, 'default': 0},
|
|
67
|
+
"ib_devices": {"type": List[IFace], 'default': []},
|
|
68
|
+
"status": {"type": str, 'default': "in_creation"},
|
|
69
|
+
"updated_at": {"type": str, 'default': str(datetime.now())},
|
|
70
|
+
"create_dt": {"type": str, 'default': str(datetime.now())},
|
|
71
|
+
"remove_dt": {"type": str, 'default': str(datetime.now())},
|
|
72
|
+
"mgmt_ip": {"type": str, 'default': ""},
|
|
73
|
+
"rpc_port": {"type": int, 'default': -1},
|
|
74
|
+
"rpc_username": {"type": str, 'default': ""},
|
|
75
|
+
"rpc_password": {"type": str, 'default': ""},
|
|
76
|
+
"data_nics": {"type": List[IFace], 'default': []},
|
|
77
|
+
"lvols": {"type": List[CachedLVol], 'default': []},
|
|
78
|
+
"node_lvs": {"type": str, 'default': "lvs"},
|
|
79
|
+
"services": {"type": List[str], 'default': []},
|
|
80
|
+
"cluster_id": {"type": str, 'default': ""},
|
|
81
|
+
"api_endpoint": {"type": str, 'default': ""},
|
|
82
|
+
"remote_devices": {"type": List[NVMeDevice], 'default': []},
|
|
83
|
+
"host_secret": {"type": str, "default": ""},
|
|
84
|
+
"ctrl_secret": {"type": str, "default": ""},
|
|
85
|
+
|
|
86
|
+
"cache_bdev": {"type": str, "default": ""},
|
|
87
|
+
"cache_size": {"type": int, "default": 0},
|
|
88
|
+
"cache_split_factor": {"type": int, "default": 0},
|
|
89
|
+
"cpu": {"type": int, "default": 0},
|
|
90
|
+
"cpu_hz": {"type": int, "default": 0},
|
|
91
|
+
"memory": {"type": int, "default": 0},
|
|
92
|
+
"hugepages": {"type": int, "default": 0},
|
|
93
|
+
"multipathing": {"type": bool, "default": True},
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
def __init__(self, data=None):
|
|
98
|
+
super(CachingNode, self).__init__()
|
|
99
|
+
self.set_attrs(self.attributes, data)
|
|
100
|
+
self.object_type = "object"
|
|
101
|
+
|
|
102
|
+
def get_id(self):
|
|
103
|
+
return self.uuid
|
|
104
|
+
|
|
105
|
+
def get_status_code(self):
|
|
106
|
+
if self.status in self.STATUS_CODE_MAP:
|
|
107
|
+
return self.STATUS_CODE_MAP[self.status]
|
|
108
|
+
else:
|
|
109
|
+
return -1
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
from typing import Mapping, List
|
|
4
|
+
|
|
5
|
+
from simplyblock_core.models.base_model import BaseModel
|
|
6
|
+
from simplyblock_core.models.storage_node import StorageNode
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Cluster(BaseModel):
|
|
10
|
+
|
|
11
|
+
STATUS_ACTIVE = "active"
|
|
12
|
+
STATUS_READONLY = 'read_only'
|
|
13
|
+
STATUS_INACTIVE = "inactive"
|
|
14
|
+
STATUS_SUSPENDED = "suspended"
|
|
15
|
+
STATUS_DEGRADED = "degraded"
|
|
16
|
+
STATUS_UNREADY = "unready"
|
|
17
|
+
STATUS_IN_ACTIVATION = "in_activation"
|
|
18
|
+
|
|
19
|
+
STATUS_CODE_MAP = {
|
|
20
|
+
STATUS_ACTIVE: 1,
|
|
21
|
+
STATUS_INACTIVE: 2,
|
|
22
|
+
STATUS_READONLY: 3,
|
|
23
|
+
|
|
24
|
+
STATUS_SUSPENDED: 10,
|
|
25
|
+
STATUS_DEGRADED: 11,
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
attributes = {
|
|
29
|
+
"uuid": {"type": str, 'default': ""},
|
|
30
|
+
"blk_size": {"type": int, 'default': 0},
|
|
31
|
+
"page_size_in_blocks": {"type": int, 'default': 2097152},
|
|
32
|
+
"model_ids": {"type": List[str], "default": []},
|
|
33
|
+
"ha_type": {"type": str, 'default': "single"},
|
|
34
|
+
"tls": {"type": bool, 'default': False},
|
|
35
|
+
"auth_hosts_only": {"type": bool, 'default': False},
|
|
36
|
+
"nqn": {"type": str, 'default': ""},
|
|
37
|
+
"iscsi": {"type": str, 'default': ""},
|
|
38
|
+
"dhchap": {"type": str, "default": ""},
|
|
39
|
+
"cli_pass": {"type": str, "default": ""},
|
|
40
|
+
"db_connection": {"type": str, "default": ""},
|
|
41
|
+
"distr_ndcs": {"type": int, 'default': 0},
|
|
42
|
+
"distr_npcs": {"type": int, 'default': 0},
|
|
43
|
+
"distr_bs": {"type": int, 'default': 0},
|
|
44
|
+
"distr_chunk_bs": {"type": int, 'default': 0},
|
|
45
|
+
"cluster_max_size": {"type": int, 'default': 0},
|
|
46
|
+
"cluster_max_devices": {"type": int, 'default': 0},
|
|
47
|
+
"cluster_max_nodes": {"type": int, 'default': 0},
|
|
48
|
+
|
|
49
|
+
## cluster-level: cap-warn ( % ), cap-crit ( % ), prov-cap-warn ( % ), prov-cap-crit. ( % )
|
|
50
|
+
"cap_warn": {"type": int, "default": 80},
|
|
51
|
+
"cap_crit": {"type": int, "default": 90},
|
|
52
|
+
"prov_cap_warn": {"type": int, "default": 180},
|
|
53
|
+
"prov_cap_crit": {"type": int, "default": 190},
|
|
54
|
+
|
|
55
|
+
"qpair_count": {"type": int, "default": 6},
|
|
56
|
+
|
|
57
|
+
"secret": {"type": str, "default": ""},
|
|
58
|
+
"grafana_secret": {"type": str, "default": ""},
|
|
59
|
+
"status": {"type": str, "default": ""},
|
|
60
|
+
"updated_at": {"type": str, "default": ""},
|
|
61
|
+
"grafana_endpoint": {"type": str, "default": ""},
|
|
62
|
+
"enable_node_affinity": {"type": bool, 'default': False},
|
|
63
|
+
"max_queue_size": {"type": int, "default": 128},
|
|
64
|
+
"inflight_io_threshold": {"type": int, "default": 4},
|
|
65
|
+
"enable_qos": {"type": bool, 'default': False},
|
|
66
|
+
"strict_node_anti_affinity": {"type": bool, 'default': False},
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
def __init__(self, data=None):
|
|
70
|
+
super(Cluster, self).__init__()
|
|
71
|
+
self.set_attrs(self.attributes, data)
|
|
72
|
+
self.object_type = "object"
|
|
73
|
+
|
|
74
|
+
def get_id(self):
|
|
75
|
+
return self.uuid
|
|
76
|
+
|
|
77
|
+
def get_status_code(self):
|
|
78
|
+
if self.status in self.STATUS_CODE_MAP:
|
|
79
|
+
return self.STATUS_CODE_MAP[self.status]
|
|
80
|
+
else:
|
|
81
|
+
return -1
|
|
82
|
+
|
|
83
|
+
def get_clean_dict(self):
|
|
84
|
+
data = super(Cluster, self).get_clean_dict()
|
|
85
|
+
data['status_code'] = self.get_status_code()
|
|
86
|
+
return data
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class ClusterMap(BaseModel):
|
|
90
|
+
|
|
91
|
+
attributes = {
|
|
92
|
+
"partitions_count": {"type": int, 'default': 0},
|
|
93
|
+
"nodes": {"type": Mapping[str, StorageNode], 'default': {}},
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
def __init__(self, data=None):
|
|
97
|
+
super(ClusterMap, self).__init__()
|
|
98
|
+
self.set_attrs(self.attributes, data)
|
|
99
|
+
self.object_type = "object"
|
|
100
|
+
|
|
101
|
+
def get_id(self):
|
|
102
|
+
return "0"
|
|
103
|
+
|
|
104
|
+
def recalculate_partitions(self):
|
|
105
|
+
self.partitions_count = 0
|
|
106
|
+
for node_id in self.nodes:
|
|
107
|
+
self.partitions_count += self.nodes[node_id].partitions_count
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
|
|
4
|
+
from simplyblock_core.models.base_model import BaseModel
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class EventObj(BaseModel):
|
|
8
|
+
LEVEL_DEBUG = "Debug"
|
|
9
|
+
LEVEL_INFO = "Info"
|
|
10
|
+
LEVEL_WARN = "Warning"
|
|
11
|
+
LEVEL_CRITICAL = "Critical"
|
|
12
|
+
LEVEL_ERROR = "Error"
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
uuid:
|
|
16
|
+
cluster_uuid: 1234
|
|
17
|
+
event: STATUS_CHANGE
|
|
18
|
+
domain: Cluster, Management, Storage
|
|
19
|
+
object_name: cluster,
|
|
20
|
+
object_dict:
|
|
21
|
+
caused_by: CLI, API, MONITOR
|
|
22
|
+
message:
|
|
23
|
+
meta_data:
|
|
24
|
+
date:
|
|
25
|
+
"""
|
|
26
|
+
attributes = {
|
|
27
|
+
"uuid": {"type": str, 'default': ""},
|
|
28
|
+
"cluster_uuid": {"type": str, 'default': ""},
|
|
29
|
+
"node_id": {"type": str, 'default': ""},
|
|
30
|
+
"date": {"type": int, 'default': 0}, # in milliseconds
|
|
31
|
+
|
|
32
|
+
"event_level": {"type": str, 'default': LEVEL_INFO},
|
|
33
|
+
|
|
34
|
+
"event": {"type": str, 'default': ""},
|
|
35
|
+
"domain": {"type": str, 'default': ""},
|
|
36
|
+
"object_name": {"type": str, 'default': ""},
|
|
37
|
+
"object_dict": {"type": dict, 'default': {}},
|
|
38
|
+
"caused_by": {"type": str, 'default': ""},
|
|
39
|
+
"message": {"type": str, 'default': ""},
|
|
40
|
+
"storage_id": {"type": int, 'default': -1},
|
|
41
|
+
"vuid": {"type": int, 'default': -1},
|
|
42
|
+
"meta_data": {"type": str, 'default': ""},
|
|
43
|
+
"status": {"type": str, 'default': ""},
|
|
44
|
+
"count": {"type": int, 'default': 1},
|
|
45
|
+
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
def __init__(self, data=None):
|
|
49
|
+
super(EventObj, self).__init__()
|
|
50
|
+
self.set_attrs(self.attributes, data)
|
|
51
|
+
self.object_type = "object"
|
|
52
|
+
|
|
53
|
+
def get_id(self):
|
|
54
|
+
return "%s/%s/%s" % (self.cluster_uuid, self.date, self.uuid)
|
|
55
|
+
|
|
56
|
+
def get_date_string(self):
|
|
57
|
+
if self.date > 1e10:
|
|
58
|
+
return str(datetime.fromtimestamp(self.date/1000))[:23]
|
|
59
|
+
else:
|
|
60
|
+
return str(datetime.fromtimestamp(self.date))[:23]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
from simplyblock_core.models.base_model import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class IFace(BaseModel):
|
|
7
|
+
|
|
8
|
+
attributes = {
|
|
9
|
+
"uuid": {"type": str, 'default': ""},
|
|
10
|
+
"if_name": {"type": str, 'default': ""},
|
|
11
|
+
"ip4_address": {"type": str, 'default': ""},
|
|
12
|
+
"port_number": {"type": int, 'default': -1},
|
|
13
|
+
"net_type": {"type": str, 'default': ""},
|
|
14
|
+
"status": {"type": str, 'default': ""},
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
def __init__(self, data=None):
|
|
18
|
+
super(IFace, self).__init__()
|
|
19
|
+
self.set_attrs(self.attributes, data)
|
|
20
|
+
self.object_type = "object"
|
|
21
|
+
|
|
22
|
+
def get_id(self):
|
|
23
|
+
return self.uuid
|
|
24
|
+
|
|
25
|
+
def get_transport_type(self):
|
|
26
|
+
if self.net_type == 'ether':
|
|
27
|
+
return "TCP"
|
|
28
|
+
if self.net_type == 'ib':
|
|
29
|
+
return "RDMA"
|
|
30
|
+
return "TCP"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
import datetime
|
|
3
|
+
import time
|
|
4
|
+
|
|
5
|
+
from simplyblock_core.models.base_model import BaseModel
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class JobSchedule(BaseModel):
|
|
9
|
+
|
|
10
|
+
STATUS_NEW = 'new'
|
|
11
|
+
STATUS_RUNNING = 'running'
|
|
12
|
+
STATUS_SUSPENDED = 'suspended'
|
|
13
|
+
STATUS_DONE = 'done'
|
|
14
|
+
|
|
15
|
+
FN_DEV_RESTART = "device_restart"
|
|
16
|
+
FN_NODE_RESTART = "node_restart"
|
|
17
|
+
FN_DEV_MIG = "device_migration"
|
|
18
|
+
FN_FAILED_DEV_MIG = "failed_device_migration"
|
|
19
|
+
FN_NEW_DEV_MIG = "new_device_migration"
|
|
20
|
+
FN_NODE_ADD = "node_add"
|
|
21
|
+
|
|
22
|
+
attributes = {
|
|
23
|
+
"uuid": {"type": str, 'default': ""},
|
|
24
|
+
"cluster_id": {"type": str, 'default': ""},
|
|
25
|
+
"node_id": {"type": str, 'default': ""},
|
|
26
|
+
"device_id": {"type": str, 'default': ""},
|
|
27
|
+
"date": {"type": int, 'default': 0},
|
|
28
|
+
|
|
29
|
+
"canceled": {"type": bool, 'default': False},
|
|
30
|
+
|
|
31
|
+
"function_name": {"type": str, 'default': ""},
|
|
32
|
+
"function_params": {"type": dict, 'default': {}},
|
|
33
|
+
"function_result": {"type": str, 'default': ""},
|
|
34
|
+
|
|
35
|
+
"retry": {"type": int, 'default': 0},
|
|
36
|
+
"max_retry": {"type": int, 'default': -1},
|
|
37
|
+
"status": {"type": str, 'default': ""},
|
|
38
|
+
"updated_at": {"type": int, 'default': 0},
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
def __init__(self, data=None):
|
|
43
|
+
super(JobSchedule, self).__init__()
|
|
44
|
+
self.set_attrs(self.attributes, data)
|
|
45
|
+
self.object_type = "object"
|
|
46
|
+
|
|
47
|
+
def get_id(self):
|
|
48
|
+
return "%s/%s/%s" % (self.cluster_id, self.date, self.uuid)
|
|
49
|
+
|
|
50
|
+
def write_to_db(self, kv_store=None):
|
|
51
|
+
self.updated_at = int(time.time())
|
|
52
|
+
super().write_to_db(kv_store)
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
from typing import List
|
|
4
|
+
|
|
5
|
+
from simplyblock_core.models.base_model import BaseModel
|
|
6
|
+
from simplyblock_core.models.nvme_device import NVMeDevice
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class LVol(BaseModel):
|
|
10
|
+
|
|
11
|
+
STATUS_ONLINE = 'online'
|
|
12
|
+
STATUS_OFFLINE = 'offline'
|
|
13
|
+
STATUS_IN_DELETION = 'in_deletion'
|
|
14
|
+
|
|
15
|
+
STATUS_CODE_MAP = {
|
|
16
|
+
STATUS_ONLINE: 1,
|
|
17
|
+
STATUS_OFFLINE: 2,
|
|
18
|
+
STATUS_IN_DELETION: 3,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
attributes = {
|
|
22
|
+
"lvol_name": {"type": str, 'default': ""},
|
|
23
|
+
"size": {"type": int, 'default': 0},
|
|
24
|
+
"max_size": {"type": int, 'default': 0},
|
|
25
|
+
"uuid": {"type": str, 'default': ""},
|
|
26
|
+
"guid": {"type": str, 'default': ""},
|
|
27
|
+
"ha_type": {"type": str, 'default': ""},
|
|
28
|
+
"status": {"type": str, 'default': ""},
|
|
29
|
+
|
|
30
|
+
"base_bdev": {"type": str, 'default': ""},
|
|
31
|
+
"lvol_bdev": {"type": str, 'default': ""},
|
|
32
|
+
"lvs_name": {"type": str, 'default': ""},
|
|
33
|
+
"comp_bdev": {"type": str, 'default': ""},
|
|
34
|
+
"crypto_bdev": {"type": str, 'default': ""},
|
|
35
|
+
"top_bdev": {"type": str, 'default': ""},
|
|
36
|
+
|
|
37
|
+
"nvme_dev": {"type": NVMeDevice, 'default': None},
|
|
38
|
+
"pool_uuid": {"type": str, 'default': ""},
|
|
39
|
+
"hostname": {"type": str, 'default': ""},
|
|
40
|
+
"node_id": {"type": str, 'default': ""},
|
|
41
|
+
"nodes": {"type": List[str], 'default': []},
|
|
42
|
+
|
|
43
|
+
"mode": {"type": str, 'default': "read-write"},
|
|
44
|
+
"lvol_type": {"type": str, 'default': "lvol"}, # lvol, compressed, crypto, dedup
|
|
45
|
+
"bdev_stack": {"type": List, 'default': []},
|
|
46
|
+
|
|
47
|
+
"crypto_key_name": {"type": str, 'default': ""},
|
|
48
|
+
"crypto_key1": {"type": str, 'default': ""},
|
|
49
|
+
"crypto_key2": {"type": str, 'default': ""},
|
|
50
|
+
|
|
51
|
+
"rw_ios_per_sec": {"type": int, 'default': 0},
|
|
52
|
+
"rw_mbytes_per_sec": {"type": int, 'default': 0},
|
|
53
|
+
"r_mbytes_per_sec": {"type": int, 'default': 0},
|
|
54
|
+
"w_mbytes_per_sec": {"type": int, 'default': 0},
|
|
55
|
+
|
|
56
|
+
"cloned_from_snap": {"type": str, 'default': ""},
|
|
57
|
+
|
|
58
|
+
"nqn": {"type": str, 'default': ""},
|
|
59
|
+
"vuid": {"type": int, 'default': 0},
|
|
60
|
+
"ndcs": {"type": int, 'default': 0},
|
|
61
|
+
"npcs": {"type": int, 'default': 0},
|
|
62
|
+
"distr_bs": {"type": int, 'default': 0},
|
|
63
|
+
"distr_chunk_bs": {"type": int, 'default': 0},
|
|
64
|
+
"distr_page_size": {"type": int, 'default': 0},
|
|
65
|
+
|
|
66
|
+
"health_check": {"type": bool, "default": True},
|
|
67
|
+
|
|
68
|
+
"snapshot_name": {"type": str, 'default': ""},
|
|
69
|
+
"mem_diff": {"type": dict, 'default': {}},
|
|
70
|
+
"io_error": {"type": bool, 'default': False},
|
|
71
|
+
|
|
72
|
+
"deletion_status": {"type": str, 'default': ""},
|
|
73
|
+
"lvol_priority_class": {"type": int, 'default': 0},
|
|
74
|
+
"blobid": {"type": int, 'default': 0},
|
|
75
|
+
"lvol_uuid": {"type": str, 'default': ""},
|
|
76
|
+
"cluster_size": {"type": int, 'default': 0},
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
def __init__(self, data=None):
|
|
81
|
+
super(LVol, self).__init__()
|
|
82
|
+
self.set_attrs(self.attributes, data)
|
|
83
|
+
self.object_type = "object"
|
|
84
|
+
|
|
85
|
+
def get_id(self):
|
|
86
|
+
return self.uuid
|
|
87
|
+
|
|
88
|
+
def get_status_code(self):
|
|
89
|
+
if self.status in self.STATUS_CODE_MAP:
|
|
90
|
+
return self.STATUS_CODE_MAP[self.status]
|
|
91
|
+
else:
|
|
92
|
+
return -1
|
|
93
|
+
|
|
94
|
+
def get_clean_dict(self):
|
|
95
|
+
data = super(LVol, self).get_clean_dict()
|
|
96
|
+
data['status_code'] = self.get_status_code()
|
|
97
|
+
return data
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
|
|
5
|
+
from simplyblock_core.models.base_model import BaseModel
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class MgmtNode(BaseModel):
|
|
9
|
+
|
|
10
|
+
STATUS_ONLINE = 'online'
|
|
11
|
+
STATUS_OFFLINE = 'offline'
|
|
12
|
+
STATUS_SUSPENDED = 'suspended'
|
|
13
|
+
STATUS_IN_CREATION = 'in_creation'
|
|
14
|
+
STATUS_IN_SHUTDOWN = 'in_shutdown'
|
|
15
|
+
STATUS_RESTARTING = 'restarting'
|
|
16
|
+
STATUS_UNREACHABLE = 'unreachable'
|
|
17
|
+
|
|
18
|
+
STATUS_CODE_MAP = {
|
|
19
|
+
STATUS_ONLINE: 0,
|
|
20
|
+
STATUS_OFFLINE: 1,
|
|
21
|
+
STATUS_SUSPENDED: 2,
|
|
22
|
+
|
|
23
|
+
STATUS_IN_CREATION: 10,
|
|
24
|
+
STATUS_IN_SHUTDOWN: 11,
|
|
25
|
+
STATUS_RESTARTING: 12,
|
|
26
|
+
|
|
27
|
+
STATUS_UNREACHABLE: 20,
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
attributes = {
|
|
31
|
+
"baseboard_sn": {"type": str, 'default': ""},
|
|
32
|
+
"uuid": {"type": str, 'default': ""},
|
|
33
|
+
"hostname": {"type": str, 'default': ""},
|
|
34
|
+
"status": {"type": str, 'default': ""},
|
|
35
|
+
"docker_ip_port": {"type": str, 'default': ""},
|
|
36
|
+
"cluster_id": {"type": str, 'default': ""},
|
|
37
|
+
"mgmt_ip": {"type": str, 'default': ""},
|
|
38
|
+
"updated_at": {"type": str, 'default': str(datetime.now())},
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
def __init__(self, data=None):
|
|
43
|
+
super(MgmtNode, self).__init__()
|
|
44
|
+
self.set_attrs(self.attributes, data)
|
|
45
|
+
self.object_type = "object"
|
|
46
|
+
|
|
47
|
+
def get_id(self):
|
|
48
|
+
return self.uuid
|
|
49
|
+
|
|
50
|
+
def get_status_code(self):
|
|
51
|
+
if self.status in self.STATUS_CODE_MAP:
|
|
52
|
+
return self.STATUS_CODE_MAP[self.status]
|
|
53
|
+
else:
|
|
54
|
+
return -1
|