sbcli-dev 3.8.51__zip → 3.8.53__zip
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-3.8.51 → sbcli_dev-3.8.53}/PKG-INFO +1 -1
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/env_var +1 -1
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/sbcli_dev.egg-info/PKG-INFO +1 -1
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/sbcli_dev.egg-info/SOURCES.txt +1 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/constants.py +0 -1
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/caching_node_controller.py +1 -3
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/distr_controller.py +1 -2
- sbcli_dev-3.8.53/simplyblock_core/services/spdk_http_proxy_server.py +151 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/tasks_runner_restart.py +1 -1
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/storage_node_ops.py +0 -2
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/caching_node_ops.py +3 -3
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/caching_node_ops_k8s.py +2 -1
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/node_api_caching_docker.py +3 -3
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/node_api_caching_ks.py +2 -1
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/snode_ops.py +2 -2
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -94
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +2 -2
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +2 -2
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/README.md +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/pyproject.toml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/sbcli_dev.egg-info/dependency_links.txt +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/sbcli_dev.egg-info/entry_points.txt +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/sbcli_dev.egg-info/requires.txt +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/sbcli_dev.egg-info/top_level.txt +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/setup.cfg +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/setup.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_cli/cli.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_cli/main.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/__init__.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/cluster_ops.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/cnode_client.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/compute_node_ops.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/device_controller.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/health_controller.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/lvol_controller.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/snapshot_controller.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/tasks_controller.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/kv_store.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/mgmt_node_ops.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/caching_node.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/cluster.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/compute_node.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/deployer.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/events.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/global_settings.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/iface.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/pool.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/stats.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/models/storage_node.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/pci_utils.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/rpc_client.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/prometheus.yml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/caching_node_monitor.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/distr_event_collector.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/health_check_service.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/log_agg_service.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/lvol_stat_collector.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/main_distr_event_collector.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/port_stat_collector.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/snode_client.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/utils.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/__init__.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/app.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/__init__.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/node_api_basic.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_device.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_pool.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/caching_node_app.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/caching_node_app_k8s.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/node_utils.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/node_webapp.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/snode_app.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/snode_app_k8s.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/static/delete.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/static/tst.py +0 -0
- {sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_web/utils.py +0 -0
|
@@ -102,6 +102,7 @@ simplyblock_core/services/new_device_discovery.py
|
|
|
102
102
|
simplyblock_core/services/port_stat_collector.py
|
|
103
103
|
simplyblock_core/services/remove_service.sh
|
|
104
104
|
simplyblock_core/services/service_template.service
|
|
105
|
+
simplyblock_core/services/spdk_http_proxy_server.py
|
|
105
106
|
simplyblock_core/services/storage_node_monitor.py
|
|
106
107
|
simplyblock_core/services/tasks_runner_failed_migration.py
|
|
107
108
|
simplyblock_core/services/tasks_runner_migration.py
|
|
@@ -57,7 +57,6 @@ SIMPLY_BLOCK_CLI_NAME = "sbcli-dev"
|
|
|
57
57
|
TASK_EXEC_INTERVAL_SEC = 30
|
|
58
58
|
TASK_EXEC_RETRY_COUNT = 8
|
|
59
59
|
|
|
60
|
-
SIMPLY_BLOCK_SPDK_CORE_IMAGE = "simplyblock/spdk-core:latest"
|
|
61
60
|
SIMPLY_BLOCK_SPDK_ULTRA_IMAGE = "simplyblock/spdk:main-latest"
|
|
62
61
|
SIMPLY_BLOCK_SPDK_ULTRA_IMAGE_JM = "simplyblock/spdk:feature-journal-ha-latest"
|
|
63
62
|
|
{sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/controllers/caching_node_controller.py
RENAMED
|
@@ -626,9 +626,7 @@ def deploy(ifname):
|
|
|
626
626
|
]
|
|
627
627
|
)
|
|
628
628
|
logger.info("Pulling SPDK images")
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
node_docker.images.pull(spdk_core)
|
|
629
|
+
node_docker.images.pull(constants.SIMPLY_BLOCK_DOCKER_IMAGE)
|
|
632
630
|
return f"{dev_ip}:5000"
|
|
633
631
|
|
|
634
632
|
|
|
@@ -86,9 +86,9 @@ def get_distr_cluster_map(snodes, target_node):
|
|
|
86
86
|
dev_w = int(dev.size/(1024*1024*1024)) or 1
|
|
87
87
|
node_w += dev_w
|
|
88
88
|
name = None
|
|
89
|
+
dev_status = dev.status
|
|
89
90
|
if snode.get_id() == target_node.get_id():
|
|
90
91
|
name = dev.alceml_bdev
|
|
91
|
-
dev_status = dev.status
|
|
92
92
|
local_node_index = index
|
|
93
93
|
else:
|
|
94
94
|
for dev2 in target_node.remote_devices:
|
|
@@ -98,7 +98,6 @@ def get_distr_cluster_map(snodes, target_node):
|
|
|
98
98
|
break
|
|
99
99
|
if not name:
|
|
100
100
|
name = f"remote_{dev.alceml_bdev}n1"
|
|
101
|
-
dev_status = NVMeDevice.STATUS_UNAVAILABLE
|
|
102
101
|
dev_map[dev.cluster_device_order] = {
|
|
103
102
|
"UUID": dev.get_id(),
|
|
104
103
|
"bdev_name": name,
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
import base64
|
|
4
|
+
import json
|
|
5
|
+
import logging
|
|
6
|
+
import os
|
|
7
|
+
import socket
|
|
8
|
+
import ssl
|
|
9
|
+
import sys
|
|
10
|
+
|
|
11
|
+
from http.server import ThreadingHTTPServer
|
|
12
|
+
from http.server import BaseHTTPRequestHandler
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
TIMEOUT = 5*60 # 5 min
|
|
16
|
+
rpc_sock = '/var/tmp/spdk.sock'
|
|
17
|
+
logger_handler = logging.StreamHandler(stream=sys.stdout)
|
|
18
|
+
logger_handler.setFormatter(logging.Formatter('%(asctime)s: %(levelname)s: %(message)s'))
|
|
19
|
+
logger = logging.getLogger()
|
|
20
|
+
logger.addHandler(logger_handler)
|
|
21
|
+
logger.setLevel(logging.DEBUG)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def get_env_var(name, default=None, is_required=False):
|
|
25
|
+
if not name:
|
|
26
|
+
logger.warning("Invalid env var name %s", name)
|
|
27
|
+
return False
|
|
28
|
+
if name not in os.environ and is_required:
|
|
29
|
+
logger.error("env value is required: %s" % name)
|
|
30
|
+
raise Exception("env value is required: %s" % name)
|
|
31
|
+
return os.environ.get(name, default)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def rpc_call(req):
|
|
35
|
+
req_data = json.loads(req.decode('ascii'))
|
|
36
|
+
print(req_data)
|
|
37
|
+
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
38
|
+
sock.settimeout(TIMEOUT)
|
|
39
|
+
sock.connect(rpc_sock)
|
|
40
|
+
sock.sendall(req)
|
|
41
|
+
|
|
42
|
+
if 'id' not in req_data:
|
|
43
|
+
sock.close()
|
|
44
|
+
return None
|
|
45
|
+
|
|
46
|
+
buf = ''
|
|
47
|
+
closed = False
|
|
48
|
+
response = None
|
|
49
|
+
|
|
50
|
+
while not closed:
|
|
51
|
+
newdata = sock.recv(1024)
|
|
52
|
+
if (newdata == b''):
|
|
53
|
+
closed = True
|
|
54
|
+
buf += newdata.decode('ascii')
|
|
55
|
+
try:
|
|
56
|
+
response = json.loads(buf)
|
|
57
|
+
except ValueError:
|
|
58
|
+
continue # incomplete response; keep buffering
|
|
59
|
+
break
|
|
60
|
+
|
|
61
|
+
sock.close()
|
|
62
|
+
|
|
63
|
+
if not response and len(buf) > 0:
|
|
64
|
+
raise
|
|
65
|
+
|
|
66
|
+
print(buf)
|
|
67
|
+
|
|
68
|
+
return buf
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class ServerHandler(BaseHTTPRequestHandler):
|
|
72
|
+
|
|
73
|
+
key = ""
|
|
74
|
+
|
|
75
|
+
def do_HEAD(self):
|
|
76
|
+
self.send_response(200)
|
|
77
|
+
self.send_header('Content-type', 'text/html')
|
|
78
|
+
self.end_headers()
|
|
79
|
+
|
|
80
|
+
def do_AUTHHEAD(self):
|
|
81
|
+
self.send_response(401)
|
|
82
|
+
self.send_header('WWW-Authenticate', 'text/html')
|
|
83
|
+
self.send_header('Content-type', 'text/html')
|
|
84
|
+
self.end_headers()
|
|
85
|
+
|
|
86
|
+
def do_INTERNALERROR(self):
|
|
87
|
+
self.send_response(500)
|
|
88
|
+
self.send_header('Content-type', 'text/html')
|
|
89
|
+
self.end_headers()
|
|
90
|
+
|
|
91
|
+
def do_POST(self):
|
|
92
|
+
if self.headers['Authorization'] != 'Basic ' + self.key:
|
|
93
|
+
self.do_AUTHHEAD()
|
|
94
|
+
else:
|
|
95
|
+
if "Content-Length" in self.headers:
|
|
96
|
+
data_string = self.rfile.read(int(self.headers['Content-Length']))
|
|
97
|
+
elif "chunked" in self.headers.get("Transfer-Encoding", ""):
|
|
98
|
+
data_string = b''
|
|
99
|
+
while True:
|
|
100
|
+
line = self.rfile.readline().strip()
|
|
101
|
+
chunk_length = int(line, 16)
|
|
102
|
+
|
|
103
|
+
if chunk_length != 0:
|
|
104
|
+
chunk = self.rfile.read(chunk_length)
|
|
105
|
+
data_string += chunk
|
|
106
|
+
|
|
107
|
+
# Each chunk is followed by an additional empty newline
|
|
108
|
+
# that we have to consume.
|
|
109
|
+
self.rfile.readline()
|
|
110
|
+
|
|
111
|
+
# Finally, a chunk size of 0 is an end indication
|
|
112
|
+
if chunk_length == 0:
|
|
113
|
+
break
|
|
114
|
+
|
|
115
|
+
try:
|
|
116
|
+
response = rpc_call(data_string)
|
|
117
|
+
if response is not None:
|
|
118
|
+
self.do_HEAD()
|
|
119
|
+
self.wfile.write(bytes(response.encode(encoding='ascii')))
|
|
120
|
+
except ValueError:
|
|
121
|
+
self.do_INTERNALERROR()
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def run_server(host, port, user, password, cert=None):
|
|
125
|
+
# encoding user and password
|
|
126
|
+
key = base64.b64encode((user+':'+password).encode(encoding='ascii')).decode('ascii')
|
|
127
|
+
|
|
128
|
+
try:
|
|
129
|
+
ServerHandler.key = key
|
|
130
|
+
httpd = ThreadingHTTPServer((host, port), ServerHandler)
|
|
131
|
+
httpd.timeout = TIMEOUT
|
|
132
|
+
if cert is not None:
|
|
133
|
+
httpd.socket = ssl.wrap_socket(httpd.socket, certfile=cert, server_side=True)
|
|
134
|
+
print('Started RPC http proxy server')
|
|
135
|
+
httpd.serve_forever()
|
|
136
|
+
except KeyboardInterrupt:
|
|
137
|
+
print('Shutting down server')
|
|
138
|
+
httpd.socket.close()
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
server_ip = get_env_var("SERVER_IP", is_required=True)
|
|
142
|
+
rpc_port = get_env_var("RPC_PORT", is_required=True)
|
|
143
|
+
rpc_username = get_env_var("RPC_USERNAME", is_required=True)
|
|
144
|
+
rpc_password = get_env_var("RPC_PASSWORD", is_required=True)
|
|
145
|
+
|
|
146
|
+
try:
|
|
147
|
+
rpc_port = int(rpc_port)
|
|
148
|
+
except Exception:
|
|
149
|
+
rpc_port = 8080
|
|
150
|
+
|
|
151
|
+
run_server(server_ip, rpc_port, rpc_username, rpc_password)
|
|
@@ -186,7 +186,7 @@ def task_runner_node(task):
|
|
|
186
186
|
logger.info(f"Node restart succeeded")
|
|
187
187
|
|
|
188
188
|
time.sleep(5)
|
|
189
|
-
if
|
|
189
|
+
if node.status == StorageNode.STATUS_ONLINE:
|
|
190
190
|
logger.info(f"Node is online: {node.get_id()}")
|
|
191
191
|
task.function_result = "done"
|
|
192
192
|
task.status = JobSchedule.STATUS_DONE
|
|
@@ -2357,9 +2357,7 @@ def deploy(ifname):
|
|
|
2357
2357
|
]
|
|
2358
2358
|
)
|
|
2359
2359
|
logger.info("Pulling SPDK images")
|
|
2360
|
-
logger.debug(constants.SIMPLY_BLOCK_SPDK_CORE_IMAGE)
|
|
2361
2360
|
logger.debug(constants.SIMPLY_BLOCK_SPDK_ULTRA_IMAGE)
|
|
2362
|
-
node_docker.images.pull(constants.SIMPLY_BLOCK_SPDK_CORE_IMAGE)
|
|
2363
2361
|
node_docker.images.pull(constants.SIMPLY_BLOCK_SPDK_ULTRA_IMAGE)
|
|
2364
2362
|
return f"{dev_ip}:5000"
|
|
2365
2363
|
|
|
@@ -176,7 +176,7 @@ def spdk_process_start():
|
|
|
176
176
|
node.remove(force=True)
|
|
177
177
|
time.sleep(2)
|
|
178
178
|
|
|
179
|
-
spdk_image = constants.
|
|
179
|
+
spdk_image = constants.SIMPLY_BLOCK_SPDK_ULTRA_IMAGE
|
|
180
180
|
|
|
181
181
|
if 'spdk_image' in data and data['spdk_image']:
|
|
182
182
|
spdk_image = data['spdk_image']
|
|
@@ -205,8 +205,8 @@ def spdk_process_start():
|
|
|
205
205
|
rpc_password = data['rpc_password']
|
|
206
206
|
|
|
207
207
|
container2 = node_docker.containers.run(
|
|
208
|
-
|
|
209
|
-
"python /
|
|
208
|
+
constants.SIMPLY_BLOCK_DOCKER_IMAGE,
|
|
209
|
+
"python simplyblock_core/services/spdk_http_proxy_server.py",
|
|
210
210
|
name="spdk_proxy",
|
|
211
211
|
detach=True,
|
|
212
212
|
network_mode="host",
|
|
@@ -112,7 +112,7 @@ def spdk_process_start():
|
|
|
112
112
|
|
|
113
113
|
spdk_mem_gega = int(spdk_mem / 1024)
|
|
114
114
|
|
|
115
|
-
spdk_image = constants.
|
|
115
|
+
spdk_image = constants.SIMPLY_BLOCK_SPDK_ULTRA_IMAGE
|
|
116
116
|
|
|
117
117
|
if 'spdk_image' in data and data['spdk_image']:
|
|
118
118
|
spdk_image = data['spdk_image']
|
|
@@ -138,6 +138,7 @@ def spdk_process_start():
|
|
|
138
138
|
'RPC_PASSWORD': data['rpc_password'],
|
|
139
139
|
'HOSTNAME': node_name,
|
|
140
140
|
'NAMESPACE': namespace,
|
|
141
|
+
'SIMPLYBLOCK_DOCKER_IMAGE': constants.SIMPLY_BLOCK_DOCKER_IMAGE,
|
|
141
142
|
}
|
|
142
143
|
dep = yaml.safe_load(template.render(values))
|
|
143
144
|
logger.debug(dep)
|
|
@@ -64,7 +64,7 @@ def spdk_process_start():
|
|
|
64
64
|
node.remove(force=True)
|
|
65
65
|
time.sleep(2)
|
|
66
66
|
|
|
67
|
-
spdk_image = constants.
|
|
67
|
+
spdk_image = constants.SIMPLY_BLOCK_SPDK_ULTRA_IMAGE
|
|
68
68
|
if 'spdk_image' in data and data['spdk_image']:
|
|
69
69
|
spdk_image = data['spdk_image']
|
|
70
70
|
node_docker.images.pull(spdk_image)
|
|
@@ -92,8 +92,8 @@ def spdk_process_start():
|
|
|
92
92
|
rpc_password = data['rpc_password']
|
|
93
93
|
|
|
94
94
|
container2 = node_docker.containers.run(
|
|
95
|
-
constants.
|
|
96
|
-
"python /
|
|
95
|
+
constants.SIMPLY_BLOCK_DOCKER_IMAGE,
|
|
96
|
+
"python simplyblock_core/services/spdk_http_proxy_server.py",
|
|
97
97
|
name="spdk_proxy",
|
|
98
98
|
detach=True,
|
|
99
99
|
network_mode="host",
|
|
@@ -63,7 +63,7 @@ def spdk_process_start():
|
|
|
63
63
|
else:
|
|
64
64
|
spdk_mem = 64096
|
|
65
65
|
|
|
66
|
-
spdk_image = constants.
|
|
66
|
+
spdk_image = constants.SIMPLY_BLOCK_SPDK_ULTRA_IMAGE
|
|
67
67
|
if 'spdk_image' in data and data['spdk_image']:
|
|
68
68
|
spdk_image = data['spdk_image']
|
|
69
69
|
# node_docker.images.pull(spdk_image)
|
|
@@ -82,6 +82,7 @@ def spdk_process_start():
|
|
|
82
82
|
'RPC_PORT': data['rpc_port'],
|
|
83
83
|
'RPC_USERNAME': data['rpc_username'],
|
|
84
84
|
'RPC_PASSWORD': data['rpc_password'],
|
|
85
|
+
'SIMPLYBLOCK_DOCKER_IMAGE': constants.SIMPLY_BLOCK_DOCKER_IMAGE,
|
|
85
86
|
}
|
|
86
87
|
dep = yaml.safe_load(template.render(values))
|
|
87
88
|
resp = k8s_apps_v1.create_namespaced_deployment(body=dep, namespace=namespace)
|
|
@@ -143,8 +143,8 @@ def spdk_process_start():
|
|
|
143
143
|
# restart_policy={"Name": "on-failure", "MaximumRetryCount": 99}
|
|
144
144
|
)
|
|
145
145
|
container2 = node_docker.containers.run(
|
|
146
|
-
constants.
|
|
147
|
-
"python /
|
|
146
|
+
constants.SIMPLY_BLOCK_DOCKER_IMAGE,
|
|
147
|
+
"python simplyblock_core/services/spdk_http_proxy_server.py",
|
|
148
148
|
name="spdk_proxy",
|
|
149
149
|
detach=True,
|
|
150
150
|
network_mode="host",
|
|
@@ -100,100 +100,6 @@ def scan_devices():
|
|
|
100
100
|
}
|
|
101
101
|
return utils.get_response(out)
|
|
102
102
|
|
|
103
|
-
#
|
|
104
|
-
# @bp.route('/spdk_process_start', methods=['POST'])
|
|
105
|
-
# def spdk_process_start():
|
|
106
|
-
# try:
|
|
107
|
-
# data = request.get_json()
|
|
108
|
-
# except:
|
|
109
|
-
# data = {}
|
|
110
|
-
#
|
|
111
|
-
# set_debug = None
|
|
112
|
-
# if 'spdk_debug' in data and data['spdk_debug']:
|
|
113
|
-
# set_debug = data['spdk_debug']
|
|
114
|
-
#
|
|
115
|
-
# spdk_cpu_mask = None
|
|
116
|
-
# if 'spdk_cpu_mask' in data:
|
|
117
|
-
# spdk_cpu_mask = data['spdk_cpu_mask']
|
|
118
|
-
#
|
|
119
|
-
# spdk_mem = None
|
|
120
|
-
# if 'spdk_mem' in data:
|
|
121
|
-
# spdk_mem = data['spdk_mem']
|
|
122
|
-
#
|
|
123
|
-
# if spdk_mem:
|
|
124
|
-
# spdk_mem = int(utils.parse_size(spdk_mem) / (1000 * 1000))
|
|
125
|
-
# else:
|
|
126
|
-
# spdk_mem = 4000
|
|
127
|
-
#
|
|
128
|
-
# node_docker = get_docker_client()
|
|
129
|
-
# nodes = node_docker.containers.list(all=True)
|
|
130
|
-
# for node in nodes:
|
|
131
|
-
# if node.attrs["Name"] in ["/spdk", "/spdk_proxy"]:
|
|
132
|
-
# logger.info(f"{node.attrs['Name']} container found, removing...")
|
|
133
|
-
# node.stop()
|
|
134
|
-
# node.remove(force=True)
|
|
135
|
-
# time.sleep(2)
|
|
136
|
-
#
|
|
137
|
-
# spdk_debug = ""
|
|
138
|
-
# if set_debug:
|
|
139
|
-
# spdk_debug = "1"
|
|
140
|
-
#
|
|
141
|
-
# spdk_image = constants.SIMPLY_BLOCK_SPDK_ULTRA_IMAGE
|
|
142
|
-
# if 'spdk_image' in data and data['spdk_image']:
|
|
143
|
-
# spdk_image = data['spdk_image']
|
|
144
|
-
# # node_docker.images.pull(spdk_image)
|
|
145
|
-
#
|
|
146
|
-
# if "cluster_ip" in data and data['cluster_ip']:
|
|
147
|
-
# cluster_ip = data['cluster_ip']
|
|
148
|
-
# log_config = LogConfig(type=LogConfig.types.GELF, config={"gelf-address": f"udp://{cluster_ip}:12201"})
|
|
149
|
-
# else:
|
|
150
|
-
# log_config = LogConfig(type=LogConfig.types.JOURNALD)
|
|
151
|
-
#
|
|
152
|
-
# container = node_docker.containers.run(
|
|
153
|
-
# spdk_image,
|
|
154
|
-
# f"/root/scripts/run_distr.sh {spdk_cpu_mask} {spdk_mem} {spdk_debug}",
|
|
155
|
-
# name="spdk",
|
|
156
|
-
# detach=True,
|
|
157
|
-
# privileged=True,
|
|
158
|
-
# network_mode="host",
|
|
159
|
-
# log_config=log_config,
|
|
160
|
-
# volumes=[
|
|
161
|
-
# '/etc/simplyblock:/etc/simplyblock',
|
|
162
|
-
# '/var/tmp:/var/tmp',
|
|
163
|
-
# '/dev:/dev',
|
|
164
|
-
# '/lib/modules/:/lib/modules/',
|
|
165
|
-
# '/var/lib/systemd/coredump/:/var/lib/systemd/coredump/',
|
|
166
|
-
# '/sys:/sys'],
|
|
167
|
-
# # restart_policy={"Name": "on-failure", "MaximumRetryCount": 99}
|
|
168
|
-
# )
|
|
169
|
-
# container2 = node_docker.containers.run(
|
|
170
|
-
# constants.SIMPLY_BLOCK_SPDK_CORE_IMAGE,
|
|
171
|
-
# "python /root/scripts/spdk_http_proxy.py",
|
|
172
|
-
# name="spdk_proxy",
|
|
173
|
-
# detach=True,
|
|
174
|
-
# network_mode="host",
|
|
175
|
-
# log_config=log_config,
|
|
176
|
-
# volumes=[
|
|
177
|
-
# '/var/tmp:/var/tmp',
|
|
178
|
-
# '/etc/foundationdb:/etc/foundationdb'],
|
|
179
|
-
# restart_policy={"Name": "always"}
|
|
180
|
-
# )
|
|
181
|
-
# retries = 10
|
|
182
|
-
# while retries > 0:
|
|
183
|
-
# info = node_docker.containers.get(container.attrs['Id'])
|
|
184
|
-
# status = info.attrs['State']["Status"]
|
|
185
|
-
# is_running = info.attrs['State']["Running"]
|
|
186
|
-
# if not is_running:
|
|
187
|
-
# logger.info("Container is not running, waiting...")
|
|
188
|
-
# time.sleep(3)
|
|
189
|
-
# retries -= 1
|
|
190
|
-
# else:
|
|
191
|
-
# logger.info(f"Container status: {status}, Is Running: {is_running}")
|
|
192
|
-
# return utils.get_response(True)
|
|
193
|
-
#
|
|
194
|
-
# return utils.get_response(
|
|
195
|
-
# False, f"Container create max retries reached, Container status: {status}, Is Running: {is_running}")
|
|
196
|
-
#
|
|
197
103
|
|
|
198
104
|
def get_cluster_id():
|
|
199
105
|
out, _, _ = node_utils.run_command(f"cat {cluster_id_file}")
|
|
@@ -92,9 +92,9 @@ spec:
|
|
|
92
92
|
memory: 4096Mi
|
|
93
93
|
|
|
94
94
|
- name: spdk-proxy-container
|
|
95
|
-
image: {{
|
|
95
|
+
image: {{ SIMPLYBLOCK_DOCKER_IMAGE }}
|
|
96
96
|
imagePullPolicy: "Always"
|
|
97
|
-
command: ["python", "/
|
|
97
|
+
command: ["python", "simplyblock_core/services/spdk_http_proxy_server.py"]
|
|
98
98
|
volumeMounts:
|
|
99
99
|
- name: socket-dir
|
|
100
100
|
mountPath: /var/tmp
|
|
@@ -95,9 +95,9 @@ spec:
|
|
|
95
95
|
memory: 4096Mi
|
|
96
96
|
|
|
97
97
|
- name: spdk-proxy-container
|
|
98
|
-
image: {{
|
|
98
|
+
image: {{ SIMPLYBLOCK_DOCKER_IMAGE }}
|
|
99
99
|
imagePullPolicy: "Always"
|
|
100
|
-
command: ["python", "/
|
|
100
|
+
command: ["python", "simplyblock_core/services/spdk_http_proxy_server.py"]
|
|
101
101
|
volumeMounts:
|
|
102
102
|
- name: socket-dir
|
|
103
103
|
mountPath: /var/tmp
|
|
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
|
|
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_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2
RENAMED
|
File without changes
|
|
File without changes
|
{sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/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_dev-3.8.51 → sbcli_dev-3.8.53}/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
|
{sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/cached_lvol_stat_collector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/capacity_and_stats_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
|
{sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/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
|
{sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/tasks_runner_failed_migration.py
RENAMED
|
File without changes
|
|
File without changes
|
{sbcli_dev-3.8.51 → sbcli_dev-3.8.53}/simplyblock_core/services/tasks_runner_new_dev_migration.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
|