sbcli-pre 25.5.3__tar.gz → 25.5.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-pre-25.5.3 → sbcli-pre-25.5.5}/PKG-INFO +1 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/sbcli_pre.egg-info/PKG-INFO +1 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/sbcli_pre.egg-info/entry_points.txt +1 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/setup.py +1 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_cli/cli.py +1 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_cli/clibase.py +2 -2
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/cluster_ops.py +25 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/tasks_controller.py +6 -2
- sbcli-pre-25.5.5/simplyblock_core/env_var +6 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/mgmt_node_ops.py +1 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/storage_node.py +9 -2
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/rpc_client.py +2 -2
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/health_check_service.py +1 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/tasks_runner_failed_migration.py +2 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/tasks_runner_migration.py +2 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/tasks_runner_new_dev_migration.py +2 -1
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/storage_node_ops.py +38 -20
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_storage_node.py +6 -6
- sbcli-pre-25.5.3/simplyblock_core/env_var +0 -6
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/README.md +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/pyproject.toml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/requirements.txt +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/sbcli_pre.egg-info/SOURCES.txt +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/sbcli_pre.egg-info/dependency_links.txt +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/sbcli_pre.egg-info/requires.txt +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/sbcli_pre.egg-info/top_level.txt +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/setup.cfg +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_cli/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_cli/main.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/cnode_client.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/constants.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/device_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/lvol_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/db_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/distr_controller.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/base_model.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/cluster.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/deployer.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/events.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/hublvol.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/iface.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/pool.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/models/stats.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/pci_utils.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/helpers/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/service_template.service +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/spdk/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/spdk/client.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/tasks_cluster_status.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/shell_utils.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/snode_client.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/test/test_models.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/test/test_utils.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/utils.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/README.md +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/app.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/snode_ops.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/swagger_ui_blueprint.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_metrics.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/node_configure.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/node_utils.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/node_utils_k8s.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/node_webapp.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/delete.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/deploy.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/is_up.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/swagger.yaml +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/tst.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/test/api/test_lvol.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/test/api/test_pool.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/test/api/test_snapshot.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/test/api/test_storage_node.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/test/conftest.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/test/pytest.ini +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/test/requirements.txt +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/test/util.py +0 -0
- {sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/utils.py +0 -0
@@ -100,7 +100,7 @@ class CLIWrapper(CLIWrapperBase):
|
|
100
100
|
def init_storage_node__add_node(self, subparser):
|
101
101
|
subcommand = self.add_sub_command(subparser, 'add-node', 'Adds a storage node by its IP address')
|
102
102
|
subcommand.add_argument('cluster_id', help='Cluster id', type=str)
|
103
|
-
subcommand.add_argument('
|
103
|
+
subcommand.add_argument('node_addr', help='Address of storage node api to add, like <node-ip>:5000', type=str)
|
104
104
|
subcommand.add_argument('ifname', help='Management interface name', type=str)
|
105
105
|
argument = subcommand.add_argument('--journal-partition', help='1: auto-create small partitions for journal on nvme devices. 0: use a separate (the smallest) nvme device of the node for journal. The journal needs a maximum of 3 percent of total available raw disk space.', type=int, default=1, dest='partitions')
|
106
106
|
if self.developer_mode:
|
@@ -115,7 +115,7 @@ class CLIWrapperBase:
|
|
115
115
|
|
116
116
|
def storage_node__add_node(self, sub_command, args):
|
117
117
|
cluster_id = args.cluster_id
|
118
|
-
|
118
|
+
node_addr = args.node_addr
|
119
119
|
ifname = args.ifname
|
120
120
|
data_nics = args.data_nics
|
121
121
|
spdk_image = args.spdk_image
|
@@ -134,7 +134,7 @@ class CLIWrapperBase:
|
|
134
134
|
|
135
135
|
out = storage_ops.add_node(
|
136
136
|
cluster_id=cluster_id,
|
137
|
-
|
137
|
+
node_addr=node_addr,
|
138
138
|
iface_name=ifname,
|
139
139
|
data_nics_list=data_nics,
|
140
140
|
max_snap=max_snap,
|
@@ -683,6 +683,31 @@ def cluster_activate(cl_id, force=False, force_lvstore_create=False):
|
|
683
683
|
set_cluster_status(cl_id, ols_status)
|
684
684
|
return False
|
685
685
|
|
686
|
+
snodes = db_controller.get_storage_nodes_by_cluster_id(cl_id)
|
687
|
+
for snode in snodes:
|
688
|
+
if snode.status != StorageNode.STATUS_ONLINE:
|
689
|
+
continue
|
690
|
+
|
691
|
+
if not snode.is_secondary_node:
|
692
|
+
continue
|
693
|
+
|
694
|
+
logger.info(f"recreating secondary node {snode.get_id()}")
|
695
|
+
ret = storage_node_ops.recreate_lvstore_on_sec(snode)
|
696
|
+
|
697
|
+
snode = db_controller.get_storage_node_by_id(snode.get_id())
|
698
|
+
if ret:
|
699
|
+
snode.lvstore_status = "ready"
|
700
|
+
snode.write_to_db()
|
701
|
+
|
702
|
+
else:
|
703
|
+
snode.lvstore_status = "failed"
|
704
|
+
snode.write_to_db()
|
705
|
+
logger.error(f"Failed to restore lvstore on node {snode.get_id()}")
|
706
|
+
if not force:
|
707
|
+
logger.error("Failed to activate cluster")
|
708
|
+
set_cluster_status(cl_id, ols_status)
|
709
|
+
return False
|
710
|
+
|
686
711
|
|
687
712
|
if not cluster.cluster_max_size:
|
688
713
|
cluster = db_controller.get_cluster_by_id(cl_id)
|
@@ -179,13 +179,17 @@ def get_active_dev_restart_task(cluster_id, device_id):
|
|
179
179
|
return False
|
180
180
|
|
181
181
|
|
182
|
-
def get_active_node_mig_task(cluster_id, node_id):
|
182
|
+
def get_active_node_mig_task(cluster_id, node_id, distr_name=None):
|
183
183
|
tasks = db.get_job_tasks(cluster_id)
|
184
184
|
for task in tasks:
|
185
185
|
if task.function_name in [JobSchedule.FN_FAILED_DEV_MIG, JobSchedule.FN_DEV_MIG,
|
186
186
|
JobSchedule.FN_NEW_DEV_MIG] and task.node_id == node_id:
|
187
187
|
if task.status == JobSchedule.STATUS_RUNNING and task.canceled is False:
|
188
|
-
|
188
|
+
if distr_name:
|
189
|
+
if "distr_name" in task.function_params and task.function_params["distr_name"] == distr_name:
|
190
|
+
return task.uuid
|
191
|
+
else:
|
192
|
+
return task.uuid
|
189
193
|
return False
|
190
194
|
|
191
195
|
|
@@ -199,7 +199,7 @@ def remove_mgmt_node(uuid):
|
|
199
199
|
|
200
200
|
logger.info("Leaving swarm...")
|
201
201
|
node_docker = docker.DockerClient(base_url=f"tcp://{snode.docker_ip_port}", version="auto")
|
202
|
-
node_docker.swarm.leave()
|
202
|
+
node_docker.swarm.leave(force=True)
|
203
203
|
|
204
204
|
mgmt_events.mgmt_remove(snode)
|
205
205
|
logging.info("done")
|
@@ -146,7 +146,7 @@ class StorageNode(BaseNodeObject):
|
|
146
146
|
#
|
147
147
|
# raise
|
148
148
|
|
149
|
-
def create_hublvol(self
|
149
|
+
def create_hublvol(self):
|
150
150
|
"""Create a hublvol for this node's lvstore
|
151
151
|
"""
|
152
152
|
logger.info(f'Creating hublvol on {self.get_id()}')
|
@@ -159,7 +159,7 @@ class StorageNode(BaseNodeObject):
|
|
159
159
|
raise RPCException('Failed to create hublvol')
|
160
160
|
self.hublvol = HubLVol({
|
161
161
|
'uuid': hublvol_uuid,
|
162
|
-
'nqn': f'{
|
162
|
+
'nqn': f'{self.host_nqn}:lvol:{hublvol_uuid}',
|
163
163
|
'bdev_name': f'{self.lvstore}/hublvol',
|
164
164
|
'model_number': str(uuid4()),
|
165
165
|
'nguid': utils.generate_hex_string(16),
|
@@ -212,6 +212,13 @@ class StorageNode(BaseNodeObject):
|
|
212
212
|
return True
|
213
213
|
except RPCException:
|
214
214
|
pass
|
215
|
+
else:
|
216
|
+
try:
|
217
|
+
self.create_hublvol()
|
218
|
+
return True
|
219
|
+
except RPCException as e:
|
220
|
+
logger.error("Error establishing hublvol: %s", e.message)
|
221
|
+
# return False
|
215
222
|
|
216
223
|
return self.hublvol
|
217
224
|
|
@@ -148,8 +148,8 @@ class RPCClient:
|
|
148
148
|
"max_io_size": 131072,
|
149
149
|
"io_unit_size": 8192,
|
150
150
|
"max_aq_depth": 128,
|
151
|
-
"num_shared_buffers":
|
152
|
-
"buf_cache_size":
|
151
|
+
"num_shared_buffers": 24576,
|
152
|
+
"buf_cache_size": 512,
|
153
153
|
"dif_insert_or_strip": False,
|
154
154
|
"c2h_success": True,
|
155
155
|
"sock_priority": 0
|
@@ -197,7 +197,7 @@ while True:
|
|
197
197
|
connected_jms.append(remote_device.get_id())
|
198
198
|
|
199
199
|
for jm_id in snode.jm_ids:
|
200
|
-
if jm_id not in connected_jms:
|
200
|
+
if jm_id and jm_id not in connected_jms:
|
201
201
|
for nd in db.get_storage_nodes():
|
202
202
|
if nd.jm_device and nd.jm_device.get_id() == jm_id:
|
203
203
|
if nd.status == StorageNode.STATUS_ONLINE:
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/tasks_runner_failed_migration.py
RENAMED
@@ -138,7 +138,8 @@ while True:
|
|
138
138
|
for task in tasks:
|
139
139
|
if task.function_name == JobSchedule.FN_FAILED_DEV_MIG:
|
140
140
|
if task.status in [JobSchedule.STATUS_NEW, JobSchedule.STATUS_SUSPENDED]:
|
141
|
-
active_task = tasks_controller.get_active_node_mig_task(
|
141
|
+
active_task = tasks_controller.get_active_node_mig_task(
|
142
|
+
task.cluster_id, task.node_id, task.function_params["distr_name"])
|
142
143
|
if active_task:
|
143
144
|
logger.info("task found on same node, retry")
|
144
145
|
continue
|
@@ -134,7 +134,8 @@ while True:
|
|
134
134
|
if task.function_name == JobSchedule.FN_DEV_MIG and task.status != JobSchedule.STATUS_DONE:
|
135
135
|
task = db.get_task_by_id(task.uuid)
|
136
136
|
if task.status in [JobSchedule.STATUS_NEW, JobSchedule.STATUS_SUSPENDED]:
|
137
|
-
active_task = tasks_controller.get_active_node_mig_task(
|
137
|
+
active_task = tasks_controller.get_active_node_mig_task(
|
138
|
+
task.cluster_id, task.node_id, task.function_params["distr_name"])
|
138
139
|
if active_task:
|
139
140
|
logger.info("task found on same node, retry")
|
140
141
|
continue
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/tasks_runner_new_dev_migration.py
RENAMED
@@ -149,7 +149,8 @@ while True:
|
|
149
149
|
for task in tasks:
|
150
150
|
if task.function_name == JobSchedule.FN_NEW_DEV_MIG:
|
151
151
|
if task.status in [JobSchedule.STATUS_NEW, JobSchedule.STATUS_SUSPENDED]:
|
152
|
-
active_task = tasks_controller.get_active_node_mig_task(
|
152
|
+
active_task = tasks_controller.get_active_node_mig_task(
|
153
|
+
task.cluster_id, task.node_id, task.function_params["distr_name"])
|
153
154
|
if active_task:
|
154
155
|
logger.info("task found on same node, retry")
|
155
156
|
continue
|
@@ -778,13 +778,13 @@ def _connect_to_remote_jm_devs(this_node, jm_ids=None):
|
|
778
778
|
return new_devs
|
779
779
|
|
780
780
|
|
781
|
-
def add_node(cluster_id,
|
781
|
+
def add_node(cluster_id, node_addr, iface_name, data_nics_list,
|
782
782
|
max_snap, spdk_image=None, spdk_debug=False,
|
783
783
|
small_bufsize=0, large_bufsize=0,
|
784
784
|
num_partitions_per_dev=0, jm_percent=0, enable_test_device=False,
|
785
785
|
namespace=None, enable_ha_jm=False, id_device_by_nqn=False,
|
786
786
|
partition_size="", ha_jm_count=3, full_page_unmap=False):
|
787
|
-
snode_api = SNodeClient(
|
787
|
+
snode_api = SNodeClient(node_addr)
|
788
788
|
node_info, _ = snode_api.info()
|
789
789
|
if node_info.get("nodes_config") and node_info["nodes_config"].get("nodes"):
|
790
790
|
nodes = node_info["nodes_config"]["nodes"]
|
@@ -804,7 +804,7 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
804
804
|
logger.error("Cluster not found: %s", cluster_id)
|
805
805
|
return False
|
806
806
|
|
807
|
-
logger.info(f"Adding Storage node: {
|
807
|
+
logger.info(f"Adding Storage node: {node_addr}")
|
808
808
|
|
809
809
|
if not node_info:
|
810
810
|
logger.error("SNode API is not reachable")
|
@@ -908,7 +908,7 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
908
908
|
if ssd_pcie:
|
909
909
|
for ssd in ssd_pcie:
|
910
910
|
for node in db_controller.get_storage_nodes_by_cluster_id(cluster_id):
|
911
|
-
if node.api_endpoint ==
|
911
|
+
if node.api_endpoint == node_addr:
|
912
912
|
if ssd in node.ssd_pcie:
|
913
913
|
logger.error(f"SSD is being used by other node, ssd: {ssd}, node: {node.get_id()}")
|
914
914
|
return False
|
@@ -935,7 +935,7 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
935
935
|
|
936
936
|
total_mem = minimum_hp_memory
|
937
937
|
for n in db_controller.get_storage_nodes_by_cluster_id(cluster_id):
|
938
|
-
if n.api_endpoint ==
|
938
|
+
if n.api_endpoint == node_addr:
|
939
939
|
total_mem += n.spdk_mem
|
940
940
|
total_mem += utils.parse_size("500m")
|
941
941
|
logger.info("Deploying SPDK")
|
@@ -999,7 +999,7 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list,
|
|
999
999
|
snode.rpc_username = rpc_user
|
1000
1000
|
snode.rpc_password = rpc_pass
|
1001
1001
|
snode.cluster_id = cluster_id
|
1002
|
-
snode.api_endpoint =
|
1002
|
+
snode.api_endpoint = node_addr
|
1003
1003
|
snode.host_secret = utils.generate_string(20)
|
1004
1004
|
snode.ctrl_secret = utils.generate_string(20)
|
1005
1005
|
snode.number_of_distribs = number_of_distribs
|
@@ -1761,6 +1761,15 @@ def restart_storage_node(
|
|
1761
1761
|
if devs:
|
1762
1762
|
dev = db_controller.get_jm_device_by_id(devs[0])
|
1763
1763
|
snode.remote_jm_devices.append(dev)
|
1764
|
+
if not snode.jm_ids:
|
1765
|
+
snode.jm_ids = []
|
1766
|
+
for rem_jm in snode.remote_jm_devices:
|
1767
|
+
if rem_jm.get_id():
|
1768
|
+
snode.jm_ids.append(rem_jm.get_id())
|
1769
|
+
|
1770
|
+
snode.jm_ids = snode.jm_ids[:constants.HA_JM_COUNT-1]
|
1771
|
+
snode.write_to_db(db_controller.kv_store)
|
1772
|
+
|
1764
1773
|
snode.remote_jm_devices = _connect_to_remote_jm_devs(snode)
|
1765
1774
|
snode.health_check = True
|
1766
1775
|
snode.lvstore_status = ""
|
@@ -3088,30 +3097,37 @@ def add_lvol_thread(lvol, snode, lvol_ana_state="optimized"):
|
|
3088
3097
|
def get_sorted_ha_jms(current_node):
|
3089
3098
|
db_controller = DBController()
|
3090
3099
|
jm_count = {}
|
3091
|
-
|
3100
|
+
jm_dev_to_mgmt_ip = {}
|
3101
|
+
|
3092
3102
|
for node in db_controller.get_storage_nodes_by_cluster_id(current_node.cluster_id):
|
3093
|
-
if
|
3094
|
-
continue
|
3095
|
-
if node.mgmt_ip == current_node.mgmt_ip:
|
3096
|
-
continue
|
3097
|
-
if node.mgmt_ip in mgmt_ips:
|
3103
|
+
if node.get_id() == current_node.get_id(): # pass
|
3098
3104
|
continue
|
3099
3105
|
|
3100
|
-
if node.jm_device and node.jm_device.status == JMDevice.STATUS_ONLINE:
|
3101
|
-
jm_count[node.jm_device.get_id()] =
|
3102
|
-
|
3106
|
+
if node.jm_device and node.jm_device.status == JMDevice.STATUS_ONLINE and node.jm_device.get_id():
|
3107
|
+
jm_count[node.jm_device.get_id()] = 0
|
3108
|
+
jm_dev_to_mgmt_ip[node.jm_device.get_id()] = node.mgmt_ip
|
3103
3109
|
|
3104
3110
|
for node in db_controller.get_storage_nodes_by_cluster_id(current_node.cluster_id):
|
3105
|
-
if
|
3111
|
+
if node.get_id() == current_node.get_id(): # pass
|
3106
3112
|
continue
|
3107
|
-
if
|
3113
|
+
if not node.jm_ids:
|
3108
3114
|
continue
|
3109
3115
|
for rem_jm_id in node.jm_ids:
|
3110
3116
|
if rem_jm_id in jm_count:
|
3111
3117
|
jm_count[rem_jm_id] += 1
|
3112
3118
|
|
3119
|
+
mgmt_ips = []
|
3113
3120
|
jm_count = dict(sorted(jm_count.items(), key=lambda x: x[1]))
|
3114
|
-
|
3121
|
+
out = []
|
3122
|
+
for jm_id in jm_count.keys():
|
3123
|
+
if jm_id:
|
3124
|
+
if jm_dev_to_mgmt_ip[jm_id] in mgmt_ips:
|
3125
|
+
continue
|
3126
|
+
if jm_dev_to_mgmt_ip[jm_id] == current_node.mgmt_ip:
|
3127
|
+
continue
|
3128
|
+
mgmt_ips.append(jm_dev_to_mgmt_ip[jm_id])
|
3129
|
+
out.append(jm_count)
|
3130
|
+
return out[:constants.HA_JM_COUNT-1]
|
3115
3131
|
|
3116
3132
|
|
3117
3133
|
def get_node_jm_names(current_node, remote_node=None):
|
@@ -3126,6 +3142,9 @@ def get_node_jm_names(current_node, remote_node=None):
|
|
3126
3142
|
|
3127
3143
|
if current_node.enable_ha_jm:
|
3128
3144
|
for jm_id in current_node.jm_ids:
|
3145
|
+
if not jm_id:
|
3146
|
+
continue
|
3147
|
+
|
3129
3148
|
if remote_node:
|
3130
3149
|
if remote_node.jm_device.get_id() == jm_id:
|
3131
3150
|
jm_list.append(remote_node.jm_device.jm_bdev)
|
@@ -3298,9 +3317,8 @@ def create_lvstore(snode, ndcs, npcs, distr_bs, distr_chunk_bs, page_size_in_blo
|
|
3298
3317
|
sec_rpc_client.bdev_examine(snode.raid)
|
3299
3318
|
sec_rpc_client.bdev_wait_for_examine()
|
3300
3319
|
|
3301
|
-
cluster_nqn = db_controller.get_cluster_by_id(snode.cluster_id).nqn
|
3302
3320
|
try:
|
3303
|
-
snode.create_hublvol(
|
3321
|
+
snode.create_hublvol()
|
3304
3322
|
|
3305
3323
|
except RPCException as e:
|
3306
3324
|
logger.error("Error establishing hublvol: %s", e.message)
|
@@ -182,14 +182,14 @@ def storage_node_add():
|
|
182
182
|
if 'cluster_id' not in req_data:
|
183
183
|
return utils.get_response_error("missing required param: cluster_id", 400)
|
184
184
|
|
185
|
-
if '
|
186
|
-
return utils.get_response_error("missing required param:
|
185
|
+
if 'node_addr' not in req_data:
|
186
|
+
return utils.get_response_error("missing required param: node_addr", 400)
|
187
187
|
|
188
188
|
if 'ifname' not in req_data:
|
189
189
|
return utils.get_response_error("missing required param: ifname", 400)
|
190
190
|
|
191
191
|
cluster_id = req_data['cluster_id']
|
192
|
-
|
192
|
+
node_addr = req_data['node_addr']
|
193
193
|
ifname = req_data['ifname']
|
194
194
|
max_snap = int(req_data.get('max_snap', 500))
|
195
195
|
|
@@ -201,9 +201,9 @@ def storage_node_add():
|
|
201
201
|
enable_test_device = False
|
202
202
|
param = req_data.get('enable_test_device')
|
203
203
|
if param:
|
204
|
-
if
|
204
|
+
if isinstance(param, bool):
|
205
205
|
enable_test_device = param
|
206
|
-
elif
|
206
|
+
elif isinstance(param, str):
|
207
207
|
enable_test_device = param == "true"
|
208
208
|
|
209
209
|
spdk_image = None
|
@@ -245,7 +245,7 @@ def storage_node_add():
|
|
245
245
|
|
246
246
|
tasks_controller.add_node_add_task(cluster_id, {
|
247
247
|
"cluster_id": cluster_id,
|
248
|
-
"
|
248
|
+
"node_addr": node_addr,
|
249
249
|
"iface_name": ifname,
|
250
250
|
"data_nics_list": data_nics,
|
251
251
|
"max_snap": max_snap,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/controllers/caching_node_controller.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2
RENAMED
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/dashboards/node-exporter.json
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/cached_lvol_stat_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/capacity_and_stats_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_core/services/main_distr_event_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.3 → sbcli-pre-25.5.5}/simplyblock_web/static/SimplyBlock-API.postman_collection.json
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|