sbcli-dev 17.3.3__tar.gz → 17.3.5__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-17.3.3 → sbcli_dev-17.3.5}/PKG-INFO +1 -1
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/sbcli_dev.egg-info/PKG-INFO +1 -1
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/sbcli_dev.egg-info/SOURCES.txt +1 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/lvol_controller.py +1 -9
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/snapshot_controller.py +1 -1
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/env_var +1 -1
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/base_model.py +5 -2
- sbcli_dev-17.3.5/simplyblock_core/models/hublvol.py +12 -0
- sbcli_dev-17.3.5/simplyblock_core/models/storage_node.py +211 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/rpc_client.py +33 -17
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/storage_node_ops.py +103 -64
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/utils.py +12 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_snapshot.py +4 -1
- sbcli_dev-17.3.3/simplyblock_core/models/storage_node.py +0 -92
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/README.md +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/pyproject.toml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/requirements.txt +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/sbcli_dev.egg-info/dependency_links.txt +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/sbcli_dev.egg-info/entry_points.txt +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/sbcli_dev.egg-info/requires.txt +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/sbcli_dev.egg-info/top_level.txt +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/setup.cfg +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/setup.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_cli/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_cli/cli.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_cli/clibase.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_cli/main.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/cluster_ops.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/constants.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/device_controller.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/db_controller.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/events.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/iface.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/pool.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/models/stats.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/health_check_service.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/spdk/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/spdk/client.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/spdk_stats_collector.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/snode_client.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/test/test_utils.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/README.md +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/app.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/snode_ops.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/swagger_ui_blueprint.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_metrics.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/node_utils.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/node_utils_k8s.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/requirements.txt +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/delete.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/swagger.yaml +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/static/tst.py +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-17.3.3 → sbcli_dev-17.3.5}/simplyblock_web/utils.py +0 -0
|
@@ -50,6 +50,7 @@ simplyblock_core/models/caching_node.py
|
|
|
50
50
|
simplyblock_core/models/cluster.py
|
|
51
51
|
simplyblock_core/models/deployer.py
|
|
52
52
|
simplyblock_core/models/events.py
|
|
53
|
+
simplyblock_core/models/hublvol.py
|
|
53
54
|
simplyblock_core/models/iface.py
|
|
54
55
|
simplyblock_core/models/job_schedule.py
|
|
55
56
|
simplyblock_core/models/lvol_model.py
|
|
@@ -23,14 +23,6 @@ from simplyblock_core.snode_client import SNodeClient
|
|
|
23
23
|
logger = lg.getLogger()
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def _generate_hex_string(length):
|
|
27
|
-
def _generate_string(length):
|
|
28
|
-
return ''.join(random.SystemRandom().choice(
|
|
29
|
-
string.ascii_letters + string.digits) for _ in range(length))
|
|
30
|
-
|
|
31
|
-
return _generate_string(length).encode('utf-8').hex()
|
|
32
|
-
|
|
33
|
-
|
|
34
26
|
def _create_crypto_lvol(rpc_client, name, base_name, key1, key2):
|
|
35
27
|
key_name = f'key_{name}'
|
|
36
28
|
ret = rpc_client.lvol_crypto_key_create(key_name, key1, key2)
|
|
@@ -427,7 +419,7 @@ def add_lvol_ha(name, size, host_id_or_name, ha_type, pool_id_or_name, use_comp,
|
|
|
427
419
|
lvol.ha_type = ha_type
|
|
428
420
|
lvol.bdev_stack = []
|
|
429
421
|
lvol.uuid = uid or str(uuid.uuid4())
|
|
430
|
-
lvol.guid =
|
|
422
|
+
lvol.guid = utils.generate_hex_string(16)
|
|
431
423
|
lvol.vuid = vuid
|
|
432
424
|
lvol.lvol_bdev = f"LVOL_{vuid}"
|
|
433
425
|
|
|
@@ -439,7 +439,7 @@ def clone(snapshot_id, clone_name, new_size=0):
|
|
|
439
439
|
lvol.pool_uuid = pool.get_id()
|
|
440
440
|
lvol.ha_type = snap.lvol.ha_type
|
|
441
441
|
lvol.lvol_type = 'lvol'
|
|
442
|
-
lvol.guid =
|
|
442
|
+
lvol.guid = utils.generate_hex_string(16)
|
|
443
443
|
lvol.vuid = snap.lvol.vuid
|
|
444
444
|
lvol.snapshot_name = snap.snap_bdev
|
|
445
445
|
lvol.subsys_port = snap.lvol.subsys_port
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# coding=utf-8
|
|
2
2
|
import pprint
|
|
3
|
+
import logging
|
|
3
4
|
|
|
4
5
|
import json
|
|
5
6
|
from inspect import ismethod
|
|
@@ -115,8 +116,10 @@ class BaseModel(object):
|
|
|
115
116
|
for k, v in kv_store.get_range_startswith(prefix.strip().encode('utf-8'), limit=limit, reverse=reverse):
|
|
116
117
|
objects.append(self.__class__().from_dict(json.loads(v)))
|
|
117
118
|
return objects
|
|
118
|
-
except Exception
|
|
119
|
-
|
|
119
|
+
except Exception:
|
|
120
|
+
from simplyblock_core import utils
|
|
121
|
+
logger = utils.get_logger(__name__)
|
|
122
|
+
logger.exception('Error reading from FDB')
|
|
120
123
|
return []
|
|
121
124
|
|
|
122
125
|
def get_last(self, kv_store):
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
from typing import List
|
|
4
|
+
from uuid import uuid4
|
|
5
|
+
|
|
6
|
+
from simplyblock_core import utils
|
|
7
|
+
from simplyblock_core.models.base_model import BaseNodeObject
|
|
8
|
+
from simplyblock_core.models.hublvol import HubLVol
|
|
9
|
+
from simplyblock_core.models.iface import IFace
|
|
10
|
+
from simplyblock_core.models.nvme_device import NVMeDevice, JMDevice
|
|
11
|
+
from simplyblock_core.rpc_client import RPCClient, RPCException
|
|
12
|
+
|
|
13
|
+
logger = utils.get_logger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class StorageNode(BaseNodeObject):
|
|
17
|
+
|
|
18
|
+
alceml_cpu_cores: List[int] = []
|
|
19
|
+
alceml_cpu_index: int = 0
|
|
20
|
+
alceml_worker_cpu_cores: List[int] = []
|
|
21
|
+
alceml_worker_cpu_index: int = 0
|
|
22
|
+
api_endpoint: str = ""
|
|
23
|
+
app_thread_mask: str = ""
|
|
24
|
+
baseboard_sn: str = ""
|
|
25
|
+
cloud_instance_id: str = ""
|
|
26
|
+
cloud_instance_public_ip: str = ""
|
|
27
|
+
cloud_instance_type: str = ""
|
|
28
|
+
cloud_name: str = ""
|
|
29
|
+
cluster_id: str = ""
|
|
30
|
+
cpu: int = 0
|
|
31
|
+
cpu_hz: int = 0
|
|
32
|
+
ctrl_secret: str = ""
|
|
33
|
+
data_nics: List[IFace] = []
|
|
34
|
+
distrib_cpu_cores: List[int] = []
|
|
35
|
+
distrib_cpu_index: int = 0
|
|
36
|
+
distrib_cpu_mask: str = ""
|
|
37
|
+
enable_ha_jm: bool = False
|
|
38
|
+
ha_jm_count: int = 3
|
|
39
|
+
enable_test_device: bool = False
|
|
40
|
+
health_check: bool = True
|
|
41
|
+
host_nqn: str = ""
|
|
42
|
+
host_secret: str = ""
|
|
43
|
+
hostname: str = ""
|
|
44
|
+
hugepages: int = 0
|
|
45
|
+
ib_devices: List[IFace] = []
|
|
46
|
+
id_device_by_nqn: bool = False
|
|
47
|
+
iobuf_large_bufsize: int = 0
|
|
48
|
+
iobuf_large_pool_count: int = 0
|
|
49
|
+
iobuf_small_bufsize: int = 0
|
|
50
|
+
iobuf_small_pool_count: int = 0
|
|
51
|
+
is_secondary_node: bool = False
|
|
52
|
+
jc_singleton_mask: str = ""
|
|
53
|
+
jm_cpu_mask: str = ""
|
|
54
|
+
jm_device: JMDevice = None
|
|
55
|
+
jm_percent: int = 3
|
|
56
|
+
jm_vuid: int = 0
|
|
57
|
+
lvols: int = 0
|
|
58
|
+
lvstore: str = ""
|
|
59
|
+
lvstore_stack: List[dict] = []
|
|
60
|
+
lvstore_stack_secondary_1: List[dict] = []
|
|
61
|
+
lvstore_stack_secondary_2: List[dict] = []
|
|
62
|
+
lvol_subsys_port: int = 9090
|
|
63
|
+
max_lvol: int = 0
|
|
64
|
+
max_prov: int = 0
|
|
65
|
+
max_snap: int = 0
|
|
66
|
+
memory: int = 0
|
|
67
|
+
mgmt_ip: str = ""
|
|
68
|
+
namespace: str = ""
|
|
69
|
+
node_lvs: str = "lvs"
|
|
70
|
+
num_partitions_per_dev: int = 1
|
|
71
|
+
number_of_devices: int = 0
|
|
72
|
+
number_of_distribs: int = 4
|
|
73
|
+
nvme_devices: List[NVMeDevice] = []
|
|
74
|
+
online_since: str = ""
|
|
75
|
+
partitions_count: int = 0 # Unused
|
|
76
|
+
poller_cpu_cores: List[int] = []
|
|
77
|
+
ssd_pcie: List = []
|
|
78
|
+
pollers_mask: str = ""
|
|
79
|
+
primary_ip: str = ""
|
|
80
|
+
raid: str = ""
|
|
81
|
+
remote_devices: List[NVMeDevice] = []
|
|
82
|
+
remote_jm_devices: List[JMDevice] = []
|
|
83
|
+
rpc_password: str = ""
|
|
84
|
+
rpc_port: int = -1
|
|
85
|
+
rpc_username: str = ""
|
|
86
|
+
secondary_node_id: str = ""
|
|
87
|
+
sequential_number: int = 0 # Unused
|
|
88
|
+
jm_ids: List[str] = []
|
|
89
|
+
spdk_cpu_mask: str = ""
|
|
90
|
+
spdk_debug: bool = False
|
|
91
|
+
spdk_image: str = ""
|
|
92
|
+
spdk_mem: int = 0
|
|
93
|
+
partition_size: int = 0
|
|
94
|
+
subsystem: str = ""
|
|
95
|
+
system_uuid: str = ""
|
|
96
|
+
lvstore_status: str = ""
|
|
97
|
+
nvmf_port: int = 4420
|
|
98
|
+
physical_label: int = 0
|
|
99
|
+
hublvol: HubLVol = None
|
|
100
|
+
|
|
101
|
+
def rpc_client(self, **kwargs):
|
|
102
|
+
"""Return rpc client to this node
|
|
103
|
+
"""
|
|
104
|
+
return RPCClient(
|
|
105
|
+
self.mgmt_ip, self.rpc_port,
|
|
106
|
+
self.rpc_username, self.rpc_password, **kwargs)
|
|
107
|
+
|
|
108
|
+
def expose_bdev(self, nqn, bdev_name, model_number, uuid, nguid, port):
|
|
109
|
+
rpc_client = self.rpc_client()
|
|
110
|
+
|
|
111
|
+
try:
|
|
112
|
+
if not rpc_client.subsystem_create(
|
|
113
|
+
nqn=nqn,
|
|
114
|
+
serial_number='sbcli-cn',
|
|
115
|
+
model_number=model_number,
|
|
116
|
+
):
|
|
117
|
+
raise RPCException(f'Failed to create subsystem for {nqn}')
|
|
118
|
+
|
|
119
|
+
for ip in (iface.ip4_address for iface in self.data_nics):
|
|
120
|
+
if not rpc_client.listeners_create(
|
|
121
|
+
nqn=nqn,
|
|
122
|
+
trtype='TCP',
|
|
123
|
+
traddr=ip,
|
|
124
|
+
trsvcid=port,
|
|
125
|
+
):
|
|
126
|
+
raise RPCException(f'Failed to create listener for {nqn}')
|
|
127
|
+
|
|
128
|
+
if not rpc_client.nvmf_subsystem_add_ns(
|
|
129
|
+
nqn=nqn,
|
|
130
|
+
dev_name=bdev_name,
|
|
131
|
+
uuid=uuid,
|
|
132
|
+
nguid=nguid,
|
|
133
|
+
):
|
|
134
|
+
raise RPCException(f'Failed to add namespace to subsytem {nqn}')
|
|
135
|
+
except RPCException:
|
|
136
|
+
if self.hublvol and rpc_client.subsystem_list(self.hublvol.nqn):
|
|
137
|
+
rpc_client.subsystem_delete(self.hublvol.nqn)
|
|
138
|
+
|
|
139
|
+
raise
|
|
140
|
+
|
|
141
|
+
def create_hublvol(self, cluster_nqn):
|
|
142
|
+
"""Create a hublvol for this node's lvstore
|
|
143
|
+
"""
|
|
144
|
+
logger.info(f'Creating hublvol on {self.get_id()}')
|
|
145
|
+
rpc_client = self.rpc_client()
|
|
146
|
+
|
|
147
|
+
hublvol_uuid = None
|
|
148
|
+
try:
|
|
149
|
+
hublvol_uuid = rpc_client.bdev_lvol_create_hublvol(self.lvstore)
|
|
150
|
+
if not hublvol_uuid:
|
|
151
|
+
raise RPCException('Failed to create hublvol')
|
|
152
|
+
self.hublvol = HubLVol({
|
|
153
|
+
'uuid': hublvol_uuid,
|
|
154
|
+
'nqn': f'{cluster_nqn}:lvol:{hublvol_uuid}',
|
|
155
|
+
'name': f'{self.lvstore}/hublvol',
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
self.expose_bdev(
|
|
159
|
+
nqn=self.hublvol.nqn,
|
|
160
|
+
bdev_name=self.hublvol.name,
|
|
161
|
+
model_number=str(uuid4()),
|
|
162
|
+
uuid=self.hublvol.uuid,
|
|
163
|
+
nguid=utils.generate_hex_string(16),
|
|
164
|
+
port=self.hublvol.nvmf_port
|
|
165
|
+
)
|
|
166
|
+
except RPCException:
|
|
167
|
+
if hublvol_uuid is not None and rpc_client.get_bdevs(hublvol_uuid):
|
|
168
|
+
rpc_client.bdev_lvol_delete_hublvol(self.hublvol.nqn)
|
|
169
|
+
|
|
170
|
+
if self.hublvol and rpc_client.subsystem_list(self.hublvol.nqn):
|
|
171
|
+
rpc_client.subsystem_delete(self.hublvol.nqn)
|
|
172
|
+
self.hublvol = None
|
|
173
|
+
|
|
174
|
+
raise
|
|
175
|
+
|
|
176
|
+
self.write_to_db()
|
|
177
|
+
return self.hublvol
|
|
178
|
+
|
|
179
|
+
def connect_to_hublvol(self, primary_node):
|
|
180
|
+
"""Connect to a primary node's hublvol
|
|
181
|
+
"""
|
|
182
|
+
logger.info(f'Connecting node {self.get_id()} to hublvol on {primary_node.get_id()}')
|
|
183
|
+
|
|
184
|
+
if primary_node.hublvol is None:
|
|
185
|
+
raise ValueError(f"HubLVol of primary node {primary_node.get_id()} is not present")
|
|
186
|
+
|
|
187
|
+
rpc_client = self.rpc_client()
|
|
188
|
+
|
|
189
|
+
remote_bdev = None
|
|
190
|
+
for ip in (iface.ip4_address for iface in primary_node.data_nics):
|
|
191
|
+
remote_bdev = rpc_client.bdev_nvme_attach_controller_tcp(
|
|
192
|
+
primary_node.hublvol.name, primary_node.hublvol.nqn,
|
|
193
|
+
ip, primary_node.hublvol.nvmf_port)[0]
|
|
194
|
+
if remote_bdev is not None:
|
|
195
|
+
break
|
|
196
|
+
else:
|
|
197
|
+
logger.warning(f'Failed to connect to hublvol on {ip}')
|
|
198
|
+
|
|
199
|
+
if remote_bdev is None:
|
|
200
|
+
raise RPCException('Failed to connect to hublvol')
|
|
201
|
+
|
|
202
|
+
if not rpc_client.bdev_lvol_set_lvs_opts(
|
|
203
|
+
primary_node.lvstore,
|
|
204
|
+
groupid=primary_node.jm_vuid,
|
|
205
|
+
subsystem_port=self.lvol_subsys_port,
|
|
206
|
+
secondary=True,
|
|
207
|
+
):
|
|
208
|
+
raise RPCException('Failed to set secondary lvstore options')
|
|
209
|
+
|
|
210
|
+
if not rpc_client.bdev_lvol_connect_hublvol(primary_node.lvstore, remote_bdev):
|
|
211
|
+
raise RPCException('Failed to connect secondary lvstore to primary')
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import inspect
|
|
2
3
|
|
|
3
4
|
import requests
|
|
4
5
|
|
|
@@ -913,18 +914,12 @@ class RPCClient:
|
|
|
913
914
|
params = {"jm_vuid": jm_vuid}
|
|
914
915
|
return self._request("bdev_distrib_force_to_non_leader", params)
|
|
915
916
|
|
|
916
|
-
def bdev_lvol_set_leader(self,
|
|
917
|
-
|
|
918
|
-
"
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
elif lvs_name:
|
|
923
|
-
params["lvs_name"] = lvs_name
|
|
924
|
-
|
|
925
|
-
params["bs_nonleadership"] = bs_nonleadership
|
|
926
|
-
|
|
927
|
-
return self._request("bdev_lvol_set_leader_all", params)
|
|
917
|
+
def bdev_lvol_set_leader(self, lvs, *, leader=False, bs_nonleadership=False):
|
|
918
|
+
return self._request("bdev_lvol_set_leader_all", {
|
|
919
|
+
"uuid" if utils.UUID_PATTERN.match(lvs) else "lvs_name": lvs,
|
|
920
|
+
"lvs_leadership": leader,
|
|
921
|
+
"bs_nonleadership": bs_nonleadership,
|
|
922
|
+
})
|
|
928
923
|
|
|
929
924
|
def bdev_lvol_register(self, name, lvs_name, registered_uuid, blobid, priority_class=0):
|
|
930
925
|
params = {
|
|
@@ -982,13 +977,19 @@ class RPCClient:
|
|
|
982
977
|
}
|
|
983
978
|
return self._request("nvmf_set_max_subsystems", params)
|
|
984
979
|
|
|
985
|
-
def
|
|
986
|
-
|
|
980
|
+
def bdev_lvol_set_lvs_opts(self, lvs, *, groupid, subsystem_port=9090, primary=False, secondary=False):
|
|
981
|
+
"""Set lvstore options
|
|
982
|
+
|
|
983
|
+
`lvs` must be either an ID or the lvstore name.
|
|
984
|
+
"""
|
|
985
|
+
|
|
986
|
+
return self._request(inspect.currentframe().f_code.co_name, {
|
|
987
|
+
"uuid" if utils.UUID_PATTERN.match(lvs) else "lvs_name": lvs,
|
|
987
988
|
"groupid": groupid,
|
|
988
|
-
"lvs_name": lvs_name,
|
|
989
989
|
"subsystem_port": subsystem_port,
|
|
990
|
-
|
|
991
|
-
|
|
990
|
+
"primary": primary,
|
|
991
|
+
"secondary": secondary,
|
|
992
|
+
})
|
|
992
993
|
|
|
993
994
|
def bdev_lvol_get_lvol_delete_status(self, name):
|
|
994
995
|
"""
|
|
@@ -1010,3 +1011,18 @@ class RPCClient:
|
|
|
1010
1011
|
}
|
|
1011
1012
|
return self._request("bdev_lvol_set_lvs_read_only", params)
|
|
1012
1013
|
|
|
1014
|
+
def bdev_lvol_create_hublvol(self, lvs):
|
|
1015
|
+
return self._request(inspect.currentframe().f_code.co_name, {
|
|
1016
|
+
"uuid" if utils.UUID_PATTERN.match(lvs) else "lvs_name": lvs,
|
|
1017
|
+
})
|
|
1018
|
+
|
|
1019
|
+
def bdev_lvol_delete_hublvol(self, lvs):
|
|
1020
|
+
return self._request(inspect.currentframe().f_code.co_name, {
|
|
1021
|
+
"uuid" if utils.UUID_PATTERN.match(lvs) else "lvs_name": lvs,
|
|
1022
|
+
})
|
|
1023
|
+
|
|
1024
|
+
def bdev_lvol_connect_hublvol(self, lvs, bdev):
|
|
1025
|
+
return self._request(inspect.currentframe().f_code.co_name, {
|
|
1026
|
+
"uuid" if utils.UUID_PATTERN.match(lvs) else "lvs_name": lvs,
|
|
1027
|
+
"remote_bdev": bdev,
|
|
1028
|
+
})
|