sbcli-pre 25.5.0__tar.gz → 25.5.2__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.0 → sbcli-pre-25.5.2}/PKG-INFO +1 -1
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/PKG-INFO +1 -1
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_cli/cli.py +12 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_cli/clibase.py +1 -1
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/cluster_ops.py +18 -1
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/env_var +1 -1
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +11 -5
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/health_check_service.py +1 -1
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/mgmt_node_monitor.py +10 -14
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/storage_node_monitor.py +2 -7
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_failed_migration.py +18 -14
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_migration.py +13 -8
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_new_dev_migration.py +14 -11
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/storage_node_ops.py +9 -1
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/utils.py +1 -1
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/README.md +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/pyproject.toml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/requirements.txt +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/SOURCES.txt +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/dependency_links.txt +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/entry_points.txt +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/requires.txt +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/top_level.txt +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/setup.cfg +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/setup.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_cli/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_cli/main.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/cnode_client.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/constants.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/caching_node_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/device_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/lvol_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/db_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/distr_controller.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/base_model.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/cluster.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/deployer.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/events.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/hublvol.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/iface.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/pool.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/stats.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/models/storage_node.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/pci_utils.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/rpc_client.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/helpers/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/service_template.service +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/spdk/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/spdk/client.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_cluster_status.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/shell_utils.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/snode_client.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/test/test_models.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/test/test_utils.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/README.md +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/app.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/snode_ops.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/swagger_ui_blueprint.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_metrics.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/node_configure.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/node_utils.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/node_utils_k8s.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/node_webapp.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/delete.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/deploy.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/is_up.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/swagger.yaml +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/static/tst.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/test/api/test_lvol.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/test/api/test_pool.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/test/api/test_snapshot.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/test/api/test_storage_node.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/test/conftest.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/test/pytest.ini +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/test/requirements.txt +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/test/util.py +0 -0
- {sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_web/utils.py +0 -0
@@ -310,6 +310,8 @@ class CLIWrapper(CLIWrapperBase):
|
|
310
310
|
self.init_cluster__complete_expand(subparser)
|
311
311
|
self.init_cluster__show(subparser)
|
312
312
|
self.init_cluster__get(subparser)
|
313
|
+
if self.developer_mode:
|
314
|
+
self.init_cluster__suspend(subparser)
|
313
315
|
self.init_cluster__get_capacity(subparser)
|
314
316
|
self.init_cluster__get_io_stats(subparser)
|
315
317
|
self.init_cluster__get_logs(subparser)
|
@@ -490,6 +492,10 @@ class CLIWrapper(CLIWrapperBase):
|
|
490
492
|
subcommand = self.add_sub_command(subparser, 'get', 'Gets a cluster\'s information')
|
491
493
|
subcommand.add_argument('cluster_id', help='Cluster id', type=str).completer = self._completer_get_cluster_list
|
492
494
|
|
495
|
+
def init_cluster__suspend(self, subparser):
|
496
|
+
subcommand = self.add_sub_command(subparser, 'suspend', 'Put the cluster status to be suspended')
|
497
|
+
subcommand.add_argument('cluster_id', help='Cluster id', type=str).completer = self._completer_get_cluster_list
|
498
|
+
|
493
499
|
def init_cluster__get_capacity(self, subparser):
|
494
500
|
subcommand = self.add_sub_command(subparser, 'get-capacity', 'Gets a cluster\'s capacity')
|
495
501
|
subcommand.add_argument('cluster_id', help='Cluster id', type=str).completer = self._completer_get_cluster_list
|
@@ -1067,6 +1073,12 @@ class CLIWrapper(CLIWrapperBase):
|
|
1067
1073
|
ret = self.cluster__show(sub_command, args)
|
1068
1074
|
elif sub_command in ['get']:
|
1069
1075
|
ret = self.cluster__get(sub_command, args)
|
1076
|
+
elif sub_command in ['suspend']:
|
1077
|
+
if not self.developer_mode:
|
1078
|
+
print("This command is private.")
|
1079
|
+
ret = False
|
1080
|
+
else:
|
1081
|
+
ret = self.cluster__suspend(sub_command, args)
|
1070
1082
|
elif sub_command in ['get-capacity']:
|
1071
1083
|
ret = self.cluster__get_capacity(sub_command, args)
|
1072
1084
|
elif sub_command in ['get-io-stats']:
|
@@ -389,7 +389,7 @@ class CLIWrapperBase:
|
|
389
389
|
def cluster__delete(self, sub_command, args):
|
390
390
|
return cluster_ops.delete_cluster(args.cluster_id)
|
391
391
|
|
392
|
-
def
|
392
|
+
def cluster__suspend(self, sub_command, args):
|
393
393
|
cluster_id = args.cluster_id
|
394
394
|
return cluster_ops.suspend_cluster(cluster_id)
|
395
395
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
import datetime
|
3
3
|
import json
|
4
4
|
import os
|
5
|
+
import socket
|
5
6
|
import re
|
6
7
|
import tempfile
|
7
8
|
import shutil
|
@@ -176,6 +177,21 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
|
|
176
177
|
time.sleep(3)
|
177
178
|
|
178
179
|
c.swarm.init(DEV_IP)
|
180
|
+
|
181
|
+
hostname = socket.gethostname()
|
182
|
+
current_node = next((node for node in c.nodes.list() if node.attrs["Description"]["Hostname"] == hostname), None)
|
183
|
+
if current_node:
|
184
|
+
current_spec = current_node.attrs["Spec"]
|
185
|
+
current_labels = current_spec.get("Labels", {})
|
186
|
+
current_labels["app"] = "graylog"
|
187
|
+
current_spec["Labels"] = current_labels
|
188
|
+
|
189
|
+
current_node.update(current_spec)
|
190
|
+
|
191
|
+
logger.info(f"Labeled node '{hostname}' with app=graylog")
|
192
|
+
else:
|
193
|
+
logger.warning("Could not find current node for labeling")
|
194
|
+
|
179
195
|
logger.info("Configuring docker swarm > Done")
|
180
196
|
except Exception as e:
|
181
197
|
print(e)
|
@@ -1339,7 +1355,8 @@ def update_cluster(cluster_id, mgmt_only=False, restart=False, spdk_image=None,
|
|
1339
1355
|
if mgmt_image:
|
1340
1356
|
service_image = mgmt_image
|
1341
1357
|
for service in cluster_docker.services.list():
|
1342
|
-
if image_parts in service.attrs['Spec']['Labels']['com.docker.stack.image']
|
1358
|
+
if image_parts in service.attrs['Spec']['Labels']['com.docker.stack.image'] or \
|
1359
|
+
"simplyblock" in service.attrs['Spec']['Labels']['com.docker.stack.image']:
|
1343
1360
|
logger.info(f"Updating service {service.name}")
|
1344
1361
|
service.update(image=service_image, force_update=True)
|
1345
1362
|
logger.info("Done updating mgmt cluster")
|
{sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml
RENAMED
@@ -3,12 +3,14 @@ version: '3.8'
|
|
3
3
|
services:
|
4
4
|
### monitoring ###
|
5
5
|
mongodb:
|
6
|
-
image: "mongo:
|
6
|
+
image: "mongo:5.0"
|
7
7
|
volumes:
|
8
8
|
- "mongodb_data:/data/db"
|
9
9
|
deploy:
|
10
10
|
placement:
|
11
|
-
constraints:
|
11
|
+
constraints:
|
12
|
+
- node.role == manager
|
13
|
+
- node.labels.app == graylog
|
12
14
|
networks:
|
13
15
|
- monitoring-net
|
14
16
|
|
@@ -25,13 +27,15 @@ services:
|
|
25
27
|
- "os_data:/usr/share/opensearch/data"
|
26
28
|
deploy:
|
27
29
|
placement:
|
28
|
-
constraints:
|
30
|
+
constraints:
|
31
|
+
- node.role == manager
|
32
|
+
- node.labels.app == graylog
|
29
33
|
networks:
|
30
34
|
- monitoring-net
|
31
35
|
|
32
36
|
graylog:
|
33
37
|
hostname: "server"
|
34
|
-
image: "graylog/graylog:
|
38
|
+
image: "graylog/graylog:5.0"
|
35
39
|
entrypoint: "/usr/bin/tini -- wait-for-it opensearch:9200 -- /docker-entrypoint.sh"
|
36
40
|
environment:
|
37
41
|
GRAYLOG_NODE_ID_FILE: "/usr/share/graylog/data/config/node-id"
|
@@ -64,7 +68,9 @@ services:
|
|
64
68
|
- "graylog_journal:/usr/share/graylog/data/journal"
|
65
69
|
deploy:
|
66
70
|
placement:
|
67
|
-
constraints:
|
71
|
+
constraints:
|
72
|
+
- node.role == manager
|
73
|
+
- node.labels.app == graylog
|
68
74
|
networks:
|
69
75
|
- monitoring-net
|
70
76
|
|
@@ -227,7 +227,7 @@ while True:
|
|
227
227
|
if snode.secondary_node_id:
|
228
228
|
|
229
229
|
lvstore_check &= health_controller._check_node_hublvol(
|
230
|
-
snode, node_bdev_names=node_bdev_names, node_lvols_nqns=
|
230
|
+
snode, node_bdev_names=node_bdev_names, node_lvols_nqns=subsystems)
|
231
231
|
|
232
232
|
second_node_1 = db.get_storage_node_by_id(snode.secondary_node_id)
|
233
233
|
if second_node_1 and second_node_1.status == StorageNode.STATUS_ONLINE:
|
@@ -6,7 +6,7 @@ from datetime import datetime
|
|
6
6
|
|
7
7
|
|
8
8
|
from simplyblock_core import constants, db_controller, utils
|
9
|
-
from simplyblock_core.controllers import mgmt_events
|
9
|
+
from simplyblock_core.controllers import mgmt_events, health_controller
|
10
10
|
from simplyblock_core.models.mgmt_node import MgmtNode
|
11
11
|
|
12
12
|
|
@@ -37,17 +37,6 @@ def set_node_offline(node):
|
|
37
37
|
mgmt_events.status_change(snode, snode.status, old_status, caused_by="monitor")
|
38
38
|
|
39
39
|
|
40
|
-
def ping_host(ip):
|
41
|
-
logger.info(f"Pinging ip {ip}")
|
42
|
-
response = os.system(f"ping -c 1 {ip}")
|
43
|
-
if response == 0:
|
44
|
-
logger.info(f"{ip} is UP")
|
45
|
-
return True
|
46
|
-
else:
|
47
|
-
logger.info(f"{ip} is DOWN")
|
48
|
-
return False
|
49
|
-
|
50
|
-
|
51
40
|
logger.info("Starting Mgmt node monitor")
|
52
41
|
|
53
42
|
|
@@ -59,8 +48,15 @@ while True:
|
|
59
48
|
logger.info(f"Node status is: {node.status}, skipping")
|
60
49
|
continue
|
61
50
|
|
62
|
-
|
63
|
-
|
51
|
+
# 1- check node ping
|
52
|
+
ping_check = health_controller._check_node_ping(node.mgmt_ip)
|
53
|
+
logger.info(f"Check: ping mgmt ip {node.mgmt_ip} ... {ping_check}")
|
54
|
+
if not ping_check:
|
55
|
+
time.sleep(1)
|
56
|
+
ping_check = health_controller._check_node_ping(node.mgmt_ip)
|
57
|
+
logger.info(f"Check 2: ping mgmt ip {node.mgmt_ip} ... {ping_check}")
|
58
|
+
|
59
|
+
if not ping_check:
|
64
60
|
logger.info(f"Node {node.hostname} is offline")
|
65
61
|
set_node_offline(node)
|
66
62
|
continue
|
@@ -254,8 +254,8 @@ while True:
|
|
254
254
|
ping_check = health_controller._check_node_ping(snode.mgmt_ip)
|
255
255
|
logger.info(f"Check: ping mgmt ip {snode.mgmt_ip} ... {ping_check}")
|
256
256
|
if not ping_check:
|
257
|
-
|
258
|
-
|
257
|
+
time.sleep(1)
|
258
|
+
ping_check = health_controller._check_node_ping(snode.mgmt_ip)
|
259
259
|
logger.info(f"Check 2: ping mgmt ip {snode.mgmt_ip} ... {ping_check}")
|
260
260
|
|
261
261
|
# 2- check node API
|
@@ -278,7 +278,6 @@ while True:
|
|
278
278
|
|
279
279
|
node_port_check = True
|
280
280
|
|
281
|
-
down_ports = []
|
282
281
|
if spdk_process and node_rpc_check and snode.lvstore_status == "ready":
|
283
282
|
ports = [snode.nvmf_port]
|
284
283
|
if snode.lvstore_stack_secondary_1:
|
@@ -292,8 +291,6 @@ while True:
|
|
292
291
|
ret = health_controller._check_port_on_node(snode, port)
|
293
292
|
logger.info(f"Check: node port {snode.mgmt_ip}, {port} ... {ret}")
|
294
293
|
node_port_check &= ret
|
295
|
-
if not ret and port == snode.nvmf_port:
|
296
|
-
down_ports |= True
|
297
294
|
|
298
295
|
for data_nic in snode.data_nics:
|
299
296
|
if data_nic.ip4_address:
|
@@ -301,8 +298,6 @@ while True:
|
|
301
298
|
logger.info(f"Check: ping data nic {data_nic.ip4_address} ... {data_ping_check}")
|
302
299
|
if not data_ping_check:
|
303
300
|
node_port_check = False
|
304
|
-
down_ports |= True
|
305
|
-
|
306
301
|
|
307
302
|
cluster = db.get_cluster_by_id(cluster.get_id())
|
308
303
|
|
{sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_failed_migration.py
RENAMED
@@ -102,20 +102,24 @@ def task_runner(task):
|
|
102
102
|
task.write_to_db(db.kv_store)
|
103
103
|
time.sleep(3)
|
104
104
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
105
|
+
try:
|
106
|
+
if "migration" in task.function_params:
|
107
|
+
mig_info = task.function_params["migration"]
|
108
|
+
res = rpc_client.distr_migration_status(**mig_info)
|
109
|
+
out = utils.handle_task_result(task, res)
|
110
|
+
dev_failed_task = tasks_controller.get_failed_device_mig_task(task.cluster_id, task.device_id)
|
111
|
+
if not dev_failed_task:
|
112
|
+
device_controller.device_set_failed_and_migrated(task.device_id)
|
113
|
+
|
114
|
+
return out
|
115
|
+
except Exception as e:
|
116
|
+
logger.error(f"Failed to get migration task status")
|
117
|
+
logger.exception(e)
|
118
|
+
task.function_result = "Failed to get migration status"
|
119
|
+
|
120
|
+
task.retry += 1
|
121
|
+
task.write_to_db(db.kv_store)
|
122
|
+
return False
|
119
123
|
|
120
124
|
|
121
125
|
logger = utils.get_logger(__name__)
|
@@ -104,14 +104,19 @@ def task_runner(task):
|
|
104
104
|
task.write_to_db(db.kv_store)
|
105
105
|
# time.sleep(1)
|
106
106
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
107
|
+
try:
|
108
|
+
if "migration" in task.function_params:
|
109
|
+
mig_info = task.function_params["migration"]
|
110
|
+
res = rpc_client.distr_migration_status(**mig_info)
|
111
|
+
return utils.handle_task_result(task, res)
|
112
|
+
except Exception as e:
|
113
|
+
logger.error(f"Failed to get migration task status")
|
114
|
+
logger.exception(e)
|
115
|
+
task.function_result = "Failed to get migration status"
|
116
|
+
|
117
|
+
task.retry += 1
|
118
|
+
task.write_to_db(db.kv_store)
|
119
|
+
return False
|
115
120
|
|
116
121
|
|
117
122
|
# get DB controller
|
{sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_new_dev_migration.py
RENAMED
@@ -117,17 +117,20 @@ def task_runner(task):
|
|
117
117
|
task.write_to_db(db.kv_store)
|
118
118
|
time.sleep(3)
|
119
119
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
120
|
+
try:
|
121
|
+
if "migration" in task.function_params:
|
122
|
+
allowed_error_codes = list(range(1, 8)) if not all_devs_online else [0]
|
123
|
+
mig_info = task.function_params["migration"]
|
124
|
+
res = rpc_client.distr_migration_status(**mig_info)
|
125
|
+
return utils.handle_task_result(task, res, allowed_error_codes=allowed_error_codes)
|
126
|
+
except Exception as e:
|
127
|
+
logger.error(f"Failed to get migration task status")
|
128
|
+
logger.exception(e)
|
129
|
+
task.function_result = "Failed to get migration status"
|
130
|
+
|
131
|
+
task.retry += 1
|
132
|
+
task.write_to_db(db.kv_store)
|
133
|
+
return False
|
131
134
|
|
132
135
|
logger = utils.get_logger(__name__)
|
133
136
|
|
@@ -1488,6 +1488,14 @@ def restart_storage_node(
|
|
1488
1488
|
if max_snap:
|
1489
1489
|
snode.max_snap = max_snap
|
1490
1490
|
|
1491
|
+
if not snode.l_cores:
|
1492
|
+
if node_info.get("nodes_config") and node_info["nodes_config"].get("nodes"):
|
1493
|
+
nodes = node_info["nodes_config"]["nodes"]
|
1494
|
+
for node in nodes:
|
1495
|
+
if node['cpu_mask'] == snode.spdk_cpu_mask:
|
1496
|
+
snode.l_cores = node['l-cores']
|
1497
|
+
break
|
1498
|
+
|
1491
1499
|
if max_prov:
|
1492
1500
|
if not isinstance(max_prov, int):
|
1493
1501
|
try:
|
@@ -3190,7 +3198,7 @@ def create_lvstore(snode, ndcs, npcs, distr_bs, distr_chunk_bs, page_size_in_blo
|
|
3190
3198
|
write_protection = True
|
3191
3199
|
for _ in range(snode.number_of_distribs):
|
3192
3200
|
distrib_vuid = utils.get_random_vuid()
|
3193
|
-
while distrib_vuid in
|
3201
|
+
while distrib_vuid in distrib_vuids:
|
3194
3202
|
distrib_vuid = utils.get_random_vuid()
|
3195
3203
|
|
3196
3204
|
distrib_name = f"distrib_{distrib_vuid}"
|
@@ -309,7 +309,7 @@ def process_records(records, records_count, keys=None):
|
|
309
309
|
|
310
310
|
def ping_host(ip):
|
311
311
|
logger.debug(f"Pinging ip ... {ip}")
|
312
|
-
response = os.system(f"ping -c
|
312
|
+
response = os.system(f"ping -c 3 -W 3 {ip} > /dev/null")
|
313
313
|
if response == 0:
|
314
314
|
logger.debug(f"{ip} is UP")
|
315
315
|
return True
|
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.0 → sbcli-pre-25.5.2}/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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2
RENAMED
File without changes
|
File without changes
|
{sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/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.0 → sbcli-pre-25.5.2}/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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/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.0 → sbcli-pre-25.5.2}/simplyblock_core/services/cached_lvol_stat_collector.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/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.0 → sbcli-pre-25.5.2}/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
|
{sbcli-pre-25.5.0 → sbcli-pre-25.5.2}/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
|