sbcli-dev 15.0.2__tar.gz → 16.0.0__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-15.0.2 → sbcli_dev-16.0.0}/PKG-INFO +1 -1
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/sbcli_dev.egg-info/PKG-INFO +1 -1
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/sbcli_dev.egg-info/SOURCES.txt +5 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_cli/cli.py +21 -12
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_cli/clibase.py +24 -51
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/cluster_ops.py +28 -71
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/constants.py +6 -8
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/caching_node_controller.py +8 -9
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/cluster_events.py +6 -6
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/device_controller.py +2 -3
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/events_controller.py +1 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/lvol_controller.py +3 -5
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/distr_controller.py +8 -7
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/env_var +1 -1
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/nvme_device.py +3 -1
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/cap_monitor.py +14 -3
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/capacity_and_stats_collector.py +2 -2
- sbcli_dev-16.0.0/simplyblock_core/services/device_monitor.py +47 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/main_distr_event_collector.py +12 -5
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/storage_node_monitor.py +6 -3
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/tasks_runner_migration.py +2 -4
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/storage_node_ops.py +19 -20
- sbcli_dev-16.0.0/simplyblock_core/test/test_utils.py +109 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/utils.py +87 -63
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/app.py +3 -1
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/auth_middleware.py +13 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/caching_node_ops.py +6 -40
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/caching_node_ops_k8s.py +4 -12
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/node_api_caching_docker.py +4 -9
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/node_api_caching_ks.py +3 -9
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/snode_ops.py +4 -10
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/snode_ops_k8s.py +13 -89
- sbcli_dev-16.0.0/simplyblock_web/blueprints/swagger_ui_blueprint.py +27 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_caching_node.py +4 -7
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_cluster.py +24 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_lvol.py +3 -3
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_pool.py +8 -8
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_snapshot.py +2 -2
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_storage_node.py +2 -3
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/node_utils.py +28 -101
- sbcli_dev-16.0.0/simplyblock_web/node_utils_k8s.py +104 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/requirements.txt +4 -0
- sbcli_dev-16.0.0/simplyblock_web/static/SimplyBlock-API.postman_collection.json +4581 -0
- sbcli_dev-16.0.0/simplyblock_web/static/swagger.yaml +57873 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/utils.py +0 -5
- sbcli_dev-15.0.2/simplyblock_core/services/device_monitor.py +0 -43
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/README.md +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/pyproject.toml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/requirements.txt +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/sbcli_dev.egg-info/dependency_links.txt +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/sbcli_dev.egg-info/entry_points.txt +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/sbcli_dev.egg-info/requires.txt +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/sbcli_dev.egg-info/top_level.txt +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/setup.cfg +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/setup.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_cli/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_cli/main.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/db_controller.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/events.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/iface.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/pool.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/stats.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/models/storage_node.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/rpc_client.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/health_check_service.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/spdk/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/spdk/client.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/spdk_stats_collector.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/snode_client.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/README.md +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/snode_app.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/snode_app_k8s.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/static/delete.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/static/tst.py +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
|
@@ -113,6 +113,7 @@ simplyblock_core/services/tasks_runner_node_add.py
|
|
|
113
113
|
simplyblock_core/services/tasks_runner_restart.py
|
|
114
114
|
simplyblock_core/services/spdk/__init__.py
|
|
115
115
|
simplyblock_core/services/spdk/client.py
|
|
116
|
+
simplyblock_core/test/test_utils.py
|
|
116
117
|
simplyblock_core/workers/cleanup_foundationdb.py
|
|
117
118
|
simplyblock_web/README.md
|
|
118
119
|
simplyblock_web/__init__.py
|
|
@@ -121,6 +122,7 @@ simplyblock_web/auth_middleware.py
|
|
|
121
122
|
simplyblock_web/caching_node_app.py
|
|
122
123
|
simplyblock_web/caching_node_app_k8s.py
|
|
123
124
|
simplyblock_web/node_utils.py
|
|
125
|
+
simplyblock_web/node_utils_k8s.py
|
|
124
126
|
simplyblock_web/node_webapp.py
|
|
125
127
|
simplyblock_web/requirements.txt
|
|
126
128
|
simplyblock_web/snode_app.py
|
|
@@ -134,6 +136,7 @@ simplyblock_web/blueprints/node_api_caching_docker.py
|
|
|
134
136
|
simplyblock_web/blueprints/node_api_caching_ks.py
|
|
135
137
|
simplyblock_web/blueprints/snode_ops.py
|
|
136
138
|
simplyblock_web/blueprints/snode_ops_k8s.py
|
|
139
|
+
simplyblock_web/blueprints/swagger_ui_blueprint.py
|
|
137
140
|
simplyblock_web/blueprints/web_api_caching_node.py
|
|
138
141
|
simplyblock_web/blueprints/web_api_cluster.py
|
|
139
142
|
simplyblock_web/blueprints/web_api_deployer.py
|
|
@@ -143,6 +146,7 @@ simplyblock_web/blueprints/web_api_mgmt_node.py
|
|
|
143
146
|
simplyblock_web/blueprints/web_api_pool.py
|
|
144
147
|
simplyblock_web/blueprints/web_api_snapshot.py
|
|
145
148
|
simplyblock_web/blueprints/web_api_storage_node.py
|
|
149
|
+
simplyblock_web/static/SimplyBlock-API.postman_collection.json
|
|
146
150
|
simplyblock_web/static/delete.py
|
|
147
151
|
simplyblock_web/static/deploy.py
|
|
148
152
|
simplyblock_web/static/deploy_cnode.yaml
|
|
@@ -150,6 +154,7 @@ simplyblock_web/static/deploy_spdk.yaml
|
|
|
150
154
|
simplyblock_web/static/is_up.py
|
|
151
155
|
simplyblock_web/static/list_deps.py
|
|
152
156
|
simplyblock_web/static/rpac.yaml
|
|
157
|
+
simplyblock_web/static/swagger.yaml
|
|
153
158
|
simplyblock_web/static/tst.py
|
|
154
159
|
simplyblock_web/templates/caching_deploy_spdk.yaml.j2
|
|
155
160
|
simplyblock_web/templates/storage_deploy_spdk.yaml.j2
|
|
@@ -68,8 +68,7 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
68
68
|
self.init_storage_node__send_cluster_map(subparser)
|
|
69
69
|
if self.developer_mode:
|
|
70
70
|
self.init_storage_node__get_cluster_map(subparser)
|
|
71
|
-
|
|
72
|
-
self.init_storage_node__make_primary(subparser)
|
|
71
|
+
self.init_storage_node__make_primary(subparser)
|
|
73
72
|
if self.developer_mode:
|
|
74
73
|
self.init_storage_node__dump_lvstore(subparser)
|
|
75
74
|
if self.developer_mode:
|
|
@@ -149,8 +148,8 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
149
148
|
if self.developer_mode:
|
|
150
149
|
argument = subcommand.add_argument('--max-snap', help='Max snapshot per storage node', type=int, default=5000, dest='max_snap', required=False)
|
|
151
150
|
if self.developer_mode:
|
|
152
|
-
argument = subcommand.add_argument('--max-size', help='Maximum amount of GB to be utilized on this storage node', type=str, default='', dest='max_prov', required=False)
|
|
153
|
-
argument = subcommand.add_argument('--node-ip', help='Restart Node on new node', type=str, dest='node_ip', required=False)
|
|
151
|
+
argument = subcommand.add_argument('--max-size', help='Maximum amount of GB to be utilized on this storage node', type=str, default='0', dest='max_prov', required=False)
|
|
152
|
+
argument = subcommand.add_argument('--node-addr', '--node-ip', help='Restart Node on new node', type=str, dest='node_ip', required=False)
|
|
154
153
|
argument = subcommand.add_argument('--number-of-devices', help='Number of devices per storage node if it\'s not supported EC2 instance', type=int, dest='number_of_devices', required=False)
|
|
155
154
|
if self.developer_mode:
|
|
156
155
|
argument = subcommand.add_argument('--spdk-image', help='SPDK image uri', type=str, dest='spdk_image', required=False)
|
|
@@ -277,7 +276,7 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
277
276
|
subcommand.add_argument('node_id', help='Storage node id', type=str).completer = self._completer_get_sn_list
|
|
278
277
|
|
|
279
278
|
def init_storage_node__make_primary(self, subparser):
|
|
280
|
-
subcommand = self.add_sub_command(subparser, 'make-primary', '
|
|
279
|
+
subcommand = self.add_sub_command(subparser, 'make-primary', 'Forces to make the provided node id primary')
|
|
281
280
|
subcommand.add_argument('node_id', help='Storage node id', type=str).completer = self._completer_get_sn_list
|
|
282
281
|
|
|
283
282
|
def init_storage_node__dump_lvstore(self, subparser):
|
|
@@ -315,6 +314,8 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
315
314
|
self.init_cluster__list_tasks(subparser)
|
|
316
315
|
self.init_cluster__cancel_task(subparser)
|
|
317
316
|
self.init_cluster__delete(subparser)
|
|
317
|
+
if self.developer_mode:
|
|
318
|
+
self.init_cluster__set(subparser)
|
|
318
319
|
|
|
319
320
|
|
|
320
321
|
def init_cluster__deploy(self, subparser):
|
|
@@ -556,6 +557,12 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
556
557
|
subcommand = self.add_sub_command(subparser, 'delete', 'Deletes a cluster')
|
|
557
558
|
subcommand.add_argument('cluster_id', help='Cluster id', type=str).completer = self._completer_get_cluster_list
|
|
558
559
|
|
|
560
|
+
def init_cluster__set(self, subparser):
|
|
561
|
+
subcommand = self.add_sub_command(subparser, 'set', 'set cluster db value')
|
|
562
|
+
subcommand.add_argument('cluster_id', help='cluster id', type=str)
|
|
563
|
+
subcommand.add_argument('attr_name', help='attr_name', type=str)
|
|
564
|
+
subcommand.add_argument('attr_value', help='attr_value', type=str)
|
|
565
|
+
|
|
559
566
|
|
|
560
567
|
def init_volume(self):
|
|
561
568
|
subparser = self.add_command('volume', 'Logical volume commands', aliases=['lvol',])
|
|
@@ -600,7 +607,7 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
600
607
|
argument = subcommand.add_argument('--namespace', help='Set logical volume namespace for k8s clients', type=str, dest='namespace', required=False)
|
|
601
608
|
if self.developer_mode:
|
|
602
609
|
argument = subcommand.add_argument('--uid', help='Set logical volume id', type=str, dest='uid', required=False)
|
|
603
|
-
argument = subcommand.add_argument('--pvc_name', help='Set logical volume PVC name for k8s clients', type=str, dest='pvc_name', required=False)
|
|
610
|
+
argument = subcommand.add_argument('--pvc-name', '--pvc_name', help='Set logical volume PVC name for k8s clients', type=str, dest='pvc_name', required=False)
|
|
604
611
|
|
|
605
612
|
def init_volume__qos_set(self, subparser):
|
|
606
613
|
subcommand = self.add_sub_command(subparser, 'qos-set', 'Changes QoS settings for an active logical volume')
|
|
@@ -906,7 +913,7 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
906
913
|
elif sub_command in ['restart']:
|
|
907
914
|
if not self.developer_mode:
|
|
908
915
|
args.max_snap = 5000
|
|
909
|
-
args.max_prov = ''
|
|
916
|
+
args.max_prov = '0'
|
|
910
917
|
args.spdk_image = None
|
|
911
918
|
args.spdk_debug = None
|
|
912
919
|
args.small_bufsize = 0
|
|
@@ -983,11 +990,7 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
983
990
|
else:
|
|
984
991
|
ret = self.storage_node__get_cluster_map(sub_command, args)
|
|
985
992
|
elif sub_command in ['make-primary']:
|
|
986
|
-
|
|
987
|
-
print("This command is private.")
|
|
988
|
-
ret = False
|
|
989
|
-
else:
|
|
990
|
-
ret = self.storage_node__make_primary(sub_command, args)
|
|
993
|
+
ret = self.storage_node__make_primary(sub_command, args)
|
|
991
994
|
elif sub_command in ['dump-lvstore']:
|
|
992
995
|
if not self.developer_mode:
|
|
993
996
|
print("This command is private.")
|
|
@@ -1105,6 +1108,12 @@ class CLIWrapper(CLIWrapperBase):
|
|
|
1105
1108
|
ret = self.cluster__cancel_task(sub_command, args)
|
|
1106
1109
|
elif sub_command in ['delete']:
|
|
1107
1110
|
ret = self.cluster__delete(sub_command, args)
|
|
1111
|
+
elif sub_command in ['set']:
|
|
1112
|
+
if not self.developer_mode:
|
|
1113
|
+
print("This command is private.")
|
|
1114
|
+
ret = False
|
|
1115
|
+
else:
|
|
1116
|
+
ret = self.cluster__set(sub_command, args)
|
|
1108
1117
|
else:
|
|
1109
1118
|
self.parser.print_help()
|
|
1110
1119
|
|
|
@@ -76,7 +76,7 @@ class CLIWrapperBase:
|
|
|
76
76
|
|
|
77
77
|
max_lvol = args.max_lvol
|
|
78
78
|
max_snap = args.max_snap
|
|
79
|
-
max_prov = args.max_prov
|
|
79
|
+
max_prov = utils.parse_size(args.max_prov, unit='G')
|
|
80
80
|
number_of_devices = args.number_of_devices
|
|
81
81
|
enable_test_device = args.enable_test_device
|
|
82
82
|
enable_ha_jm = args.enable_ha_jm
|
|
@@ -132,7 +132,7 @@ class CLIWrapperBase:
|
|
|
132
132
|
|
|
133
133
|
max_lvol = args.max_lvol
|
|
134
134
|
max_snap = args.max_snap
|
|
135
|
-
max_prov =
|
|
135
|
+
max_prov = utils.parse_size(args.max_prov, unit='G')
|
|
136
136
|
number_of_devices = args.number_of_devices
|
|
137
137
|
|
|
138
138
|
small_bufsize = args.small_bufsize
|
|
@@ -357,10 +357,14 @@ class CLIWrapperBase:
|
|
|
357
357
|
cluster_id = args.cluster_id
|
|
358
358
|
return cluster_ops.get_ssh_pass(cluster_id)
|
|
359
359
|
|
|
360
|
+
def cluster__set(self, sub_command, args):
|
|
361
|
+
cluster_id = args.cluster_id
|
|
362
|
+
return cluster_ops.set(cluster_id, args.attr_name, args.attr_value)
|
|
363
|
+
|
|
360
364
|
def volume__add(self, sub_command, args):
|
|
361
365
|
name = args.name
|
|
362
|
-
size =
|
|
363
|
-
max_size =
|
|
366
|
+
size = utils.parse_size(args.size)
|
|
367
|
+
max_size = utils.parse_size(args.max_size)
|
|
364
368
|
host_id = args.host_id
|
|
365
369
|
ha_type = args.ha_type
|
|
366
370
|
pool = args.pool
|
|
@@ -414,7 +418,7 @@ class CLIWrapperBase:
|
|
|
414
418
|
|
|
415
419
|
def volume__resize(self, sub_command, args):
|
|
416
420
|
volume_id = args.volume_id
|
|
417
|
-
size =
|
|
421
|
+
size = utils.parse_size(args.size)
|
|
418
422
|
return lvol_controller.resize_lvol(volume_id, size)
|
|
419
423
|
|
|
420
424
|
def volume__create_snapshot(self, sub_command, args):
|
|
@@ -426,7 +430,7 @@ class CLIWrapperBase:
|
|
|
426
430
|
def volume__clone(self, sub_command, args):
|
|
427
431
|
new_size = 0
|
|
428
432
|
if args.resize:
|
|
429
|
-
new_size =
|
|
433
|
+
new_size = utils.parse_size(args.resize)
|
|
430
434
|
|
|
431
435
|
clone_id, error = snapshot_controller.clone(args.snapshot_id, args.clone_name, new_size)
|
|
432
436
|
return clone_id if not error else error
|
|
@@ -479,8 +483,8 @@ class CLIWrapperBase:
|
|
|
479
483
|
has_secret = False
|
|
480
484
|
return pool_controller.add_pool(
|
|
481
485
|
args.name,
|
|
482
|
-
|
|
483
|
-
|
|
486
|
+
utils.parse_size(args.pool_max),
|
|
487
|
+
utils.parse_size(args.lvol_max),
|
|
484
488
|
args.max_rw_iops,
|
|
485
489
|
args.max_rw_mbytes,
|
|
486
490
|
args.max_r_mbytes,
|
|
@@ -493,9 +497,9 @@ class CLIWrapperBase:
|
|
|
493
497
|
pool_max = None
|
|
494
498
|
lvol_max = None
|
|
495
499
|
if args.pool_max:
|
|
496
|
-
pool_max =
|
|
500
|
+
pool_max = utils.parse_size(args.pool_max)
|
|
497
501
|
if args.lvol_max:
|
|
498
|
-
lvol_max =
|
|
502
|
+
lvol_max = utils.parse_size(args.lvol_max)
|
|
499
503
|
return pool_controller.set_pool(
|
|
500
504
|
args.pool_id,
|
|
501
505
|
pool_max,
|
|
@@ -545,7 +549,7 @@ class CLIWrapperBase:
|
|
|
545
549
|
def snapshot__clone(self, sub_command, args):
|
|
546
550
|
new_size = 0
|
|
547
551
|
if args.resize:
|
|
548
|
-
new_size =
|
|
552
|
+
new_size = utils.parse_size(args.resize)
|
|
549
553
|
|
|
550
554
|
success, details = snapshot_controller.clone(args.snapshot_id, args.lvol_name, new_size)
|
|
551
555
|
return details
|
|
@@ -571,9 +575,9 @@ class CLIWrapperBase:
|
|
|
571
575
|
|
|
572
576
|
spdk_mem = None
|
|
573
577
|
if args.spdk_mem:
|
|
574
|
-
spdk_mem =
|
|
575
|
-
if spdk_mem <
|
|
576
|
-
return f"SPDK memory:{args.spdk_mem} must be larger than
|
|
578
|
+
spdk_mem = utils.parse_size(args.spdk_mem)
|
|
579
|
+
if spdk_mem < utils.parse_size('1GiB'):
|
|
580
|
+
return f"SPDK memory:{args.spdk_mem} must be larger than 1GiB"
|
|
577
581
|
|
|
578
582
|
return caching_node_controller.add_node(
|
|
579
583
|
cluster_id, node_ip, ifname, data_nics, spdk_cpu_mask, spdk_mem, spdk_image, namespace, multipathing)
|
|
@@ -681,9 +685,11 @@ class CLIWrapperBase:
|
|
|
681
685
|
else:
|
|
682
686
|
return f"Invalid cpu mask value: {args.spdk_cpu_mask}"
|
|
683
687
|
|
|
688
|
+
|
|
689
|
+
|
|
684
690
|
max_lvol = args.max_lvol
|
|
685
691
|
max_snap = args.max_snap
|
|
686
|
-
max_prov = args.max_prov
|
|
692
|
+
max_prov = utils.parse_size(args.max_prov, unit='G')
|
|
687
693
|
number_of_devices = args.number_of_devices
|
|
688
694
|
enable_test_device = args.enable_test_device
|
|
689
695
|
enable_ha_jm = args.enable_ha_jm
|
|
@@ -692,11 +698,11 @@ class CLIWrapperBase:
|
|
|
692
698
|
secondary_nodes = args.secondary_nodes
|
|
693
699
|
|
|
694
700
|
lvol_name = args.lvol_name
|
|
695
|
-
lvol_size =
|
|
696
|
-
max_size =
|
|
701
|
+
lvol_size = utils.parse_size(args.lvol_size)
|
|
702
|
+
max_size = utils.parse_size(args.max_size)
|
|
697
703
|
lvol_ha_type = args.lvol_ha_type
|
|
698
704
|
pool_name = args.pool_name
|
|
699
|
-
pool_max =
|
|
705
|
+
pool_max = utils.parse_size(args.pool_max)
|
|
700
706
|
host_id = args.host_id
|
|
701
707
|
comp = None
|
|
702
708
|
crypto = args.encrypt
|
|
@@ -786,39 +792,6 @@ class CLIWrapperBase:
|
|
|
786
792
|
else:
|
|
787
793
|
sys.stdout.write("Please respond with 'yes' or 'no' " "(or 'y' or 'n').\n")
|
|
788
794
|
|
|
789
|
-
def parse_size(self, size_string: str):
|
|
790
|
-
try:
|
|
791
|
-
x = int(size_string)
|
|
792
|
-
return x
|
|
793
|
-
except Exception:
|
|
794
|
-
pass
|
|
795
|
-
try:
|
|
796
|
-
if size_string:
|
|
797
|
-
size_string = size_string.lower()
|
|
798
|
-
size_string = size_string.replace(" ", "")
|
|
799
|
-
size_string = size_string.replace("b", "")
|
|
800
|
-
size_number = int(size_string[:-1])
|
|
801
|
-
size_v = size_string[-1]
|
|
802
|
-
one_k = constants.ONE_KB
|
|
803
|
-
multi = 0
|
|
804
|
-
if size_v == "k":
|
|
805
|
-
multi = 1
|
|
806
|
-
elif size_v == "m":
|
|
807
|
-
multi = 2
|
|
808
|
-
elif size_v == "g":
|
|
809
|
-
multi = 3
|
|
810
|
-
elif size_v == "t":
|
|
811
|
-
multi = 4
|
|
812
|
-
else:
|
|
813
|
-
print(f"Error parsing size: {size_string}")
|
|
814
|
-
return -1
|
|
815
|
-
return size_number * math.pow(one_k, multi)
|
|
816
|
-
else:
|
|
817
|
-
return -1
|
|
818
|
-
except:
|
|
819
|
-
print(f"Error parsing size: {size_string}")
|
|
820
|
-
return -1
|
|
821
|
-
|
|
822
795
|
def validate_cpu_mask(self, spdk_cpu_mask):
|
|
823
796
|
return re.match("^(0x|0X)?[a-fA-F0-9]+$", spdk_cpu_mask)
|
|
824
797
|
|
|
@@ -591,7 +591,8 @@ def cluster_activate(cl_id, force=False, force_lvstore_create=False):
|
|
|
591
591
|
if node.status == node.STATUS_ONLINE:
|
|
592
592
|
online_nodes.append(node)
|
|
593
593
|
for dev in node.nvme_devices:
|
|
594
|
-
if dev.status
|
|
594
|
+
if dev.status in [NVMeDevice.STATUS_ONLINE, NVMeDevice.STATUS_READONLY,
|
|
595
|
+
NVMeDevice.STATUS_CANNOT_ALLOCATE]:
|
|
595
596
|
dev_count += 1
|
|
596
597
|
minimum_devices = cluster.distr_ndcs + cluster.distr_npcs + 1
|
|
597
598
|
if dev_count < minimum_devices:
|
|
@@ -723,20 +724,11 @@ def cluster_set_read_only(cl_id):
|
|
|
723
724
|
for node in st:
|
|
724
725
|
if node.status not in [StorageNode.STATUS_ONLINE, StorageNode.STATUS_SUSPENDED, StorageNode.STATUS_DOWN]:
|
|
725
726
|
continue
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
if node.lvstore:
|
|
732
|
-
rpc_client.bdev_lvol_set_lvs_read_only(node.lvstore, True)
|
|
733
|
-
if node.secondary_node_id:
|
|
734
|
-
sec_node = db_controller.get_storage_node_by_id(node.secondary_node_id)
|
|
735
|
-
if sec_node:
|
|
736
|
-
sec_rpc_client = RPCClient(
|
|
737
|
-
sec_node.mgmt_ip, sec_node.rpc_port,
|
|
738
|
-
sec_node.rpc_username, sec_node.rpc_password, timeout=3, retry=2)
|
|
739
|
-
sec_rpc_client.bdev_lvol_set_lvs_read_only(node.lvstore, True)
|
|
727
|
+
for dev in node.nvme_devices:
|
|
728
|
+
if dev.status == NVMeDevice.STATUS_ONLINE:
|
|
729
|
+
# dev_stat = db_controller.get_device_stats(dev, 1)
|
|
730
|
+
# if dev_stat and dev_stat[0].size_util >= cluster.cap_crit:
|
|
731
|
+
device_controller.device_set_state(dev.get_id(), NVMeDevice.STATUS_CANNOT_ALLOCATE)
|
|
740
732
|
|
|
741
733
|
return True
|
|
742
734
|
|
|
@@ -758,19 +750,12 @@ def cluster_set_active(cl_id):
|
|
|
758
750
|
if node.status not in [StorageNode.STATUS_ONLINE, StorageNode.STATUS_SUSPENDED, StorageNode.STATUS_DOWN]:
|
|
759
751
|
continue
|
|
760
752
|
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
if node.secondary_node_id:
|
|
768
|
-
sec_node = db_controller.get_storage_node_by_id(node.secondary_node_id)
|
|
769
|
-
if sec_node:
|
|
770
|
-
sec_rpc_client = RPCClient(
|
|
771
|
-
sec_node.mgmt_ip, sec_node.rpc_port,
|
|
772
|
-
sec_node.rpc_username, sec_node.rpc_password, timeout=3, retry=2)
|
|
773
|
-
sec_rpc_client.bdev_lvol_set_lvs_read_only(node.lvstore, False)
|
|
753
|
+
for dev in node.nvme_devices:
|
|
754
|
+
if dev.status in [NVMeDevice.STATUS_CANNOT_ALLOCATE, NVMeDevice.STATUS_READONLY]:
|
|
755
|
+
dev_stat = db_controller.get_device_stats(dev, 1)
|
|
756
|
+
if dev_stat and dev_stat[0].size_util < cluster.cap_crit:
|
|
757
|
+
device_controller.device_set_online(dev.get_id())
|
|
758
|
+
|
|
774
759
|
return True
|
|
775
760
|
|
|
776
761
|
|
|
@@ -1384,48 +1369,20 @@ def open_db_from_zip(fip_path):
|
|
|
1384
1369
|
|
|
1385
1370
|
|
|
1386
1371
|
|
|
1387
|
-
def
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
CMD=$(ls ~/.local/bin/sbcli-* | awk '{n=split($0,a,"/"); print a[n]}')
|
|
1394
|
-
cl=$($CMD cluster list | tail -n -3 | awk '{print $2}')
|
|
1395
|
-
|
|
1396
|
-
#$CMD cluster graceful-shutdown $cl
|
|
1397
|
-
|
|
1398
|
-
for sn_id in $($CMD sn list | grep / | awk '{print $2}'); do
|
|
1399
|
-
$CMD -d sn shutdown --force $sn_id
|
|
1400
|
-
done
|
|
1401
|
-
|
|
1402
|
-
sudo mv /etc/foundationdb/fdb.cluster /etc/foundationdb/fdb.cluster.bck
|
|
1403
|
-
for service_id in $(docker service ls | grep / | awk '{print $1}'); do
|
|
1404
|
-
docker service update "$service_id" --force --detach
|
|
1405
|
-
done
|
|
1406
|
-
|
|
1407
|
-
# restore
|
|
1408
|
-
fdb_cont=$(sudo docker ps | grep "app_fdb-server" | awk '{print $1}')
|
|
1409
|
-
sudo docker rm --force $fdb_cont
|
|
1410
|
-
sudo rm -rf /etc/foundationdb/data/*
|
|
1411
|
-
fdbcli --exec "configure new single ssd ; writemode on ; clearrange \"\" \\xff" -C /etc/foundationdb/fdb.cluster.bck
|
|
1412
|
-
BF=$(fdbbackup list -b file:///etc/foundationdb/backup/)
|
|
1413
|
-
fdbrestore start -r "$BF" --dest-cluster-file /etc/foundationdb/fdb.cluster.bck -t fresh_deploy
|
|
1414
|
-
|
|
1415
|
-
sudo mv /etc/foundationdb/fdb.cluster.bck /etc/foundationdb/fdb.cluster
|
|
1416
|
-
|
|
1417
|
-
for service_id in $(docker service ls | grep / | awk '{print $1}'); do
|
|
1418
|
-
docker service update "$service_id" --force --detach
|
|
1419
|
-
done
|
|
1420
|
-
|
|
1421
|
-
sleep 30
|
|
1422
|
-
for sn_id in $($CMD sn list | grep / | awk '{print $2}'); do
|
|
1423
|
-
$CMD -d sn shutdown --force $sn_id
|
|
1424
|
-
done
|
|
1425
|
-
|
|
1426
|
-
sleep 5
|
|
1427
|
-
$CMD -d cluster graceful-startup $cl --clear-data
|
|
1372
|
+
def set(cl_id, attr, value):
|
|
1373
|
+
db_controller = DBController()
|
|
1374
|
+
cluster = db_controller.get_cluster_by_id(cl_id)
|
|
1375
|
+
if not cluster:
|
|
1376
|
+
logger.error(f"Cluster not found {cl_id}")
|
|
1377
|
+
return False
|
|
1428
1378
|
|
|
1429
|
-
|
|
1379
|
+
if attr in cluster.get_attrs_map():
|
|
1380
|
+
try:
|
|
1381
|
+
value = cluster.get_attrs_map()[attr]['type'](value)
|
|
1382
|
+
logger.info(f"Setting {attr} to {value}")
|
|
1383
|
+
setattr(cluster, attr, value)
|
|
1384
|
+
cluster.write_to_db()
|
|
1385
|
+
except:
|
|
1386
|
+
pass
|
|
1430
1387
|
|
|
1431
|
-
|
|
1388
|
+
return True
|
|
@@ -66,18 +66,16 @@ GRAYLOG_CHECK_INTERVAL_SEC = 60
|
|
|
66
66
|
|
|
67
67
|
FDB_CHECK_INTERVAL_SEC = 60
|
|
68
68
|
|
|
69
|
+
TASK_EXEC_INTERVAL_SEC = 10
|
|
70
|
+
TASK_EXEC_RETRY_COUNT = 8
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
SIMPLY_BLOCK_SPDK_CORE_IMAGE = "simplyblock/spdk-core:v24.05-tag-latest"
|
|
71
73
|
SIMPLY_BLOCK_DOCKER_IMAGE = get_from_env_var_file(
|
|
72
74
|
"SIMPLY_BLOCK_DOCKER_IMAGE","simplyblock/simplyblock:main")
|
|
73
75
|
SIMPLY_BLOCK_CLI_NAME = get_from_env_var_file(
|
|
74
76
|
"SIMPLY_BLOCK_COMMAND_NAME", "sbcli")
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
SIMPLY_BLOCK_SPDK_CORE_IMAGE = "simplyblock/spdk-core:v24.05-tag-latest"
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
SIMPLY_BLOCK_SPDK_ULTRA_IMAGE = "simplyblock/spdk:main-latest"
|
|
77
|
+
SIMPLY_BLOCK_SPDK_ULTRA_IMAGE = get_from_env_var_file(
|
|
78
|
+
"SIMPLY_BLOCK_SPDK_ULTRA_IMAGE", " public.ecr.aws/simply-block/ultra:main-latest")
|
|
81
79
|
|
|
82
80
|
GELF_PORT = 12202
|
|
83
81
|
|
|
@@ -125,11 +123,11 @@ LVOL_NVME_CONNECT_CTRL_LOSS_TMO=-1
|
|
|
125
123
|
LVOL_NVME_CONNECT_NR_IO_QUEUES=6
|
|
126
124
|
LVOL_NVME_CONNECT_TIMEOUT_S=10
|
|
127
125
|
LVOL_NVME_KEEP_ALIVE_TO=3
|
|
126
|
+
LVOL_NVMF_PORT_START=9100
|
|
128
127
|
QPAIR_COUNT=32
|
|
129
128
|
NVME_TIMEOUT_US=20000000
|
|
130
129
|
|
|
131
130
|
NVMF_MAX_SUBSYSTEMS=50000
|
|
132
131
|
HA_JM_COUNT=3
|
|
133
132
|
|
|
134
|
-
ONE_KB = 1024
|
|
135
133
|
TEMP_CORES_FILE = "/etc/simplyblock/tmp_cores_config"
|
{sbcli_dev-15.0.2 → sbcli_dev-16.0.0}/simplyblock_core/controllers/caching_node_controller.py
RENAMED
|
@@ -135,6 +135,7 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list, spdk_cpu_mask, spd
|
|
|
135
135
|
snode.multipathing = multipathing
|
|
136
136
|
|
|
137
137
|
# check for memory
|
|
138
|
+
spdk_mem_min = utils.parse_size('1GiB')
|
|
138
139
|
if "memory_details" in node_info and node_info['memory_details']:
|
|
139
140
|
memory_details = node_info['memory_details']
|
|
140
141
|
logger.info("Node Memory info")
|
|
@@ -144,13 +145,11 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list, spdk_cpu_mask, spd
|
|
|
144
145
|
logger.info(f"HP Total: {utils.humanbytes(huge_total)}")
|
|
145
146
|
huge_free = memory_details['huge_free']
|
|
146
147
|
logger.info(f"HP Free: {utils.humanbytes(huge_free)}")
|
|
147
|
-
# if huge_free < 1 * 1024 * 1024:
|
|
148
|
-
# logger.warning(f"Free hugepages are less than 1G: {utils.humanbytes(huge_free)}")
|
|
149
148
|
if not spdk_mem:
|
|
150
|
-
if huge_total >
|
|
149
|
+
if huge_total > spdk_mem_min:
|
|
151
150
|
spdk_mem = huge_total
|
|
152
151
|
else:
|
|
153
|
-
logger.error(f"Free hugepages are less than
|
|
152
|
+
logger.error(f"Free hugepages are less than {utils.humanbytes(spdk_mem_min)}: {utils.humanbytes(huge_total)}")
|
|
154
153
|
return False
|
|
155
154
|
|
|
156
155
|
logger.info(f"Deploying SPDK with HP: {utils.humanbytes(spdk_mem)}")
|
|
@@ -204,11 +203,11 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list, spdk_cpu_mask, spd
|
|
|
204
203
|
snode.write_to_db(db_controller.kv_store)
|
|
205
204
|
ssd_dev = nvme_devs[0]
|
|
206
205
|
|
|
207
|
-
if spdk_mem <
|
|
208
|
-
logger.error("Hugepages must be larger than
|
|
206
|
+
if spdk_mem < spdk_mem_min:
|
|
207
|
+
logger.error(f"Hugepages must be larger than {utils.humanbytes(spdk_mem_min)}")
|
|
209
208
|
return False
|
|
210
209
|
|
|
211
|
-
mem = spdk_mem -
|
|
210
|
+
mem = spdk_mem - spdk_mem_min
|
|
212
211
|
snode.hugepages = mem
|
|
213
212
|
logger.info(f"Hugepages to be used: {utils.humanbytes(mem)}")
|
|
214
213
|
|
|
@@ -273,7 +272,7 @@ def add_node(cluster_id, node_ip, iface_name, data_nics_list, spdk_cpu_mask, spd
|
|
|
273
272
|
# create tmp ocf
|
|
274
273
|
logger.info(f"Creating first ocf bdev...")
|
|
275
274
|
|
|
276
|
-
ret = rpc_client.bdev_malloc_create("malloc_tmp", 512, int((
|
|
275
|
+
ret = rpc_client.bdev_malloc_create("malloc_tmp", 512, int(utils.parse_size('100MiB')/512))
|
|
277
276
|
if not ret:
|
|
278
277
|
logger.error("Failed ot create tmp malloc")
|
|
279
278
|
return False
|
|
@@ -356,7 +355,7 @@ def recreate(node_id):
|
|
|
356
355
|
# create tmp ocf
|
|
357
356
|
logger.info(f"Creating first ocf bdev...")
|
|
358
357
|
|
|
359
|
-
ret = rpc_client.bdev_malloc_create("malloc_tmp", 512, int((
|
|
358
|
+
ret = rpc_client.bdev_malloc_create("malloc_tmp", 512, int(utils.parse_size('100MiB') / 512))
|
|
360
359
|
if not ret:
|
|
361
360
|
logger.error("Failed ot create tmp malloc")
|
|
362
361
|
return False
|
|
@@ -30,7 +30,7 @@ def cluster_status_change(cluster, new_state, old_status):
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
def _cluster_cap_event(cluster, msg, event_level):
|
|
33
|
-
ec.log_event_cluster(
|
|
33
|
+
return ec.log_event_cluster(
|
|
34
34
|
cluster_id=cluster.get_id(),
|
|
35
35
|
node_id=cluster.get_id(),
|
|
36
36
|
domain=ec.DOMAIN_CLUSTER,
|
|
@@ -43,26 +43,26 @@ def _cluster_cap_event(cluster, msg, event_level):
|
|
|
43
43
|
|
|
44
44
|
def cluster_cap_warn(cluster, util):
|
|
45
45
|
msg = f"Cluster absolute capacity reached: {util}%"
|
|
46
|
-
_cluster_cap_event(cluster, msg, event_level=EventObj.LEVEL_WARN)
|
|
46
|
+
return _cluster_cap_event(cluster, msg, event_level=EventObj.LEVEL_WARN)
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
def cluster_cap_crit(cluster, util):
|
|
50
50
|
msg = f"Cluster absolute capacity reached: {util}%"
|
|
51
|
-
_cluster_cap_event(cluster, msg, event_level=EventObj.LEVEL_CRITICAL)
|
|
51
|
+
return _cluster_cap_event(cluster, msg, event_level=EventObj.LEVEL_CRITICAL)
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
def cluster_prov_cap_warn(cluster, util):
|
|
55
55
|
msg = f"Cluster provisioned capacity reached: {util}%"
|
|
56
|
-
_cluster_cap_event(cluster, msg, event_level=EventObj.LEVEL_WARN)
|
|
56
|
+
return _cluster_cap_event(cluster, msg, event_level=EventObj.LEVEL_WARN)
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
def cluster_prov_cap_crit(cluster, util):
|
|
60
60
|
msg = f"Cluster provisioned capacity reached: {util}%"
|
|
61
|
-
_cluster_cap_event(cluster, msg, event_level=EventObj.LEVEL_CRITICAL)
|
|
61
|
+
return _cluster_cap_event(cluster, msg, event_level=EventObj.LEVEL_CRITICAL)
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
def cluster_delete(cluster):
|
|
65
|
-
ec.log_event_cluster(
|
|
65
|
+
return ec.log_event_cluster(
|
|
66
66
|
cluster_id=cluster.get_id(),
|
|
67
67
|
domain=ec.DOMAIN_CLUSTER,
|
|
68
68
|
event=ec.EVENT_OBJ_DELETED,
|
|
@@ -658,9 +658,8 @@ def add_device(device_id):
|
|
|
658
658
|
|
|
659
659
|
snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
|
|
660
660
|
for node in snodes:
|
|
661
|
-
if node.status
|
|
662
|
-
|
|
663
|
-
distr_controller.send_cluster_map_add_device(device_obj, node)
|
|
661
|
+
if node.status in [StorageNode.STATUS_ONLINE, StorageNode.STATUS_DOWN]:
|
|
662
|
+
distr_controller.send_cluster_map_add_device(device_obj, node)
|
|
664
663
|
|
|
665
664
|
tasks_controller.add_new_device_mig_task(device_id)
|
|
666
665
|
return device_id
|
|
@@ -101,6 +101,7 @@ def log_event_cluster(cluster_id, domain, event, db_object, caused_by, message,
|
|
|
101
101
|
|
|
102
102
|
db_controller = DBController()
|
|
103
103
|
ds.write_to_db(db_controller.kv_store)
|
|
104
|
+
return ds.to_dict()
|
|
104
105
|
|
|
105
106
|
|
|
106
107
|
def log_event_based_on_level(cluster_id, event, db_object, message, caused_by, event_level):
|
|
@@ -89,7 +89,7 @@ def validate_add_lvol_func(name, size, host_id_or_name, pool_id_or_name,
|
|
|
89
89
|
return False, "Name can not be empty"
|
|
90
90
|
|
|
91
91
|
# size validation
|
|
92
|
-
if size <
|
|
92
|
+
if size < utils.parse_size('100MiB'):
|
|
93
93
|
return False, "Size must be larger than 100M"
|
|
94
94
|
|
|
95
95
|
# host validation
|
|
@@ -466,7 +466,7 @@ def add_lvol_ha(name, size, host_id_or_name, ha_type, pool_id_or_name, use_comp,
|
|
|
466
466
|
"name": lvol.lvol_bdev,
|
|
467
467
|
"params": {
|
|
468
468
|
"name": lvol.lvol_bdev,
|
|
469
|
-
"size_in_mib":
|
|
469
|
+
"size_in_mib": utils.convert_size(lvol.size, 'MiB'),
|
|
470
470
|
"lvs_name": lvol.lvs_name,
|
|
471
471
|
"lvol_priority_class": 0
|
|
472
472
|
}
|
|
@@ -1175,8 +1175,6 @@ def resize_lvol(id, new_size):
|
|
|
1175
1175
|
logger.error(f"Pool is disabled")
|
|
1176
1176
|
return False
|
|
1177
1177
|
|
|
1178
|
-
new_size = utils.parse_size(new_size)
|
|
1179
|
-
|
|
1180
1178
|
if lvol.size >= new_size:
|
|
1181
1179
|
logger.error(f"New size {new_size} must be higher than the original size {lvol.size}")
|
|
1182
1180
|
return False
|
|
@@ -1201,7 +1199,7 @@ def resize_lvol(id, new_size):
|
|
|
1201
1199
|
logger.info(f"Resizing LVol: {lvol.get_id()}")
|
|
1202
1200
|
logger.info(f"Current size: {utils.humanbytes(lvol.size)}, new size: {utils.humanbytes(new_size)}")
|
|
1203
1201
|
|
|
1204
|
-
size_in_mib =
|
|
1202
|
+
size_in_mib = utils.convert_size(new_size, 'MiB')
|
|
1205
1203
|
|
|
1206
1204
|
rpc_client = RPCClient(
|
|
1207
1205
|
snode.mgmt_ip, snode.rpc_port, snode.rpc_username, snode.rpc_password)
|