sbcli-pre 25.5.1__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.
Files changed (173) hide show
  1. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/PKG-INFO +1 -1
  2. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/PKG-INFO +1 -1
  3. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_cli/cli.py +12 -0
  4. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_cli/clibase.py +1 -1
  5. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/cluster_ops.py +16 -0
  6. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/env_var +1 -1
  7. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +11 -5
  8. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/health_check_service.py +1 -1
  9. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/mgmt_node_monitor.py +10 -14
  10. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/storage_node_monitor.py +2 -7
  11. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_failed_migration.py +18 -14
  12. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_migration.py +13 -8
  13. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_new_dev_migration.py +14 -11
  14. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/storage_node_ops.py +9 -1
  15. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/utils.py +1 -1
  16. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/README.md +0 -0
  17. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/pyproject.toml +0 -0
  18. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/requirements.txt +0 -0
  19. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/SOURCES.txt +0 -0
  20. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/dependency_links.txt +0 -0
  21. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/entry_points.txt +0 -0
  22. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/requires.txt +0 -0
  23. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/sbcli_pre.egg-info/top_level.txt +0 -0
  24. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/setup.cfg +0 -0
  25. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/setup.py +0 -0
  26. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_cli/__init__.py +0 -0
  27. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_cli/main.py +0 -0
  28. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/__init__.py +0 -0
  29. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/cnode_client.py +0 -0
  30. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/constants.py +0 -0
  31. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/__init__.py +0 -0
  32. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/caching_node_controller.py +0 -0
  33. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/cluster_events.py +0 -0
  34. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/device_controller.py +0 -0
  35. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/device_events.py +0 -0
  36. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/events_controller.py +0 -0
  37. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/health_controller.py +0 -0
  38. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/lvol_controller.py +0 -0
  39. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/lvol_events.py +0 -0
  40. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/mgmt_events.py +0 -0
  41. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/pool_controller.py +0 -0
  42. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/pool_events.py +0 -0
  43. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/snapshot_controller.py +0 -0
  44. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/snapshot_events.py +0 -0
  45. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/storage_events.py +0 -0
  46. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/tasks_controller.py +0 -0
  47. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/tasks_events.py +0 -0
  48. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
  49. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/db_controller.py +0 -0
  50. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/distr_controller.py +0 -0
  51. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/mgmt_node_ops.py +0 -0
  52. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/__init__.py +0 -0
  53. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/base_model.py +0 -0
  54. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/caching_node.py +0 -0
  55. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/cluster.py +0 -0
  56. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/deployer.py +0 -0
  57. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/events.py +0 -0
  58. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/hublvol.py +0 -0
  59. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/iface.py +0 -0
  60. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/job_schedule.py +0 -0
  61. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/lvol_model.py +0 -0
  62. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/mgmt_node.py +0 -0
  63. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/nvme_device.py +0 -0
  64. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/pool.py +0 -0
  65. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/port_stat.py +0 -0
  66. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/snapshot.py +0 -0
  67. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/stats.py +0 -0
  68. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/models/storage_node.py +0 -0
  69. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/pci_utils.py +0 -0
  70. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/rpc_client.py +0 -0
  71. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/__init__.py +0 -0
  72. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
  73. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  74. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  75. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/config_docker.sh +0 -0
  76. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboard.yml +0 -0
  77. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  78. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  79. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  80. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  81. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  82. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  83. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/datasource.yml +0 -0
  84. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/db_config_double.sh +0 -0
  85. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/db_config_single.sh +0 -0
  86. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
  87. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  88. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
  89. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/foundation.yml +0 -0
  90. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/haproxy.cfg +0 -0
  91. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/helpers/__init__.py +0 -0
  92. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
  93. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
  94. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
  95. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/install_deps.sh +0 -0
  96. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/objstore.yml +0 -0
  97. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
  98. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
  99. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/run_ssh.sh +0 -0
  100. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/set_db_config.sh +0 -0
  101. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  102. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/__init__.py +0 -0
  103. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
  104. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/caching_node_monitor.py +0 -0
  105. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/cap_monitor.py +0 -0
  106. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
  107. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/device_monitor.py +0 -0
  108. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/install_service.sh +0 -0
  109. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/lvol_monitor.py +0 -0
  110. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/lvol_stat_collector.py +0 -0
  111. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/main_distr_event_collector.py +0 -0
  112. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/new_device_discovery.py +0 -0
  113. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/remove_service.sh +0 -0
  114. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/service_template.service +0 -0
  115. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/spdk/__init__.py +0 -0
  116. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/spdk/client.py +0 -0
  117. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
  118. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_cluster_status.py +0 -0
  119. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
  120. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  121. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/shell_utils.py +0 -0
  122. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/snode_client.py +0 -0
  123. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/test/test_models.py +0 -0
  124. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/test/test_utils.py +0 -0
  125. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_core/workers/cleanup_foundationdb.py +0 -0
  126. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/README.md +0 -0
  127. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/__init__.py +0 -0
  128. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/app.py +0 -0
  129. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/auth_middleware.py +0 -0
  130. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/__init__.py +0 -0
  131. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  132. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  133. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  134. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
  135. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
  136. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/snode_ops.py +0 -0
  137. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
  138. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/swagger_ui_blueprint.py +0 -0
  139. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  140. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
  141. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
  142. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_device.py +0 -0
  143. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
  144. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_metrics.py +0 -0
  145. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  146. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_pool.py +0 -0
  147. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  148. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
  149. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/node_configure.py +0 -0
  150. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/node_utils.py +0 -0
  151. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/node_utils_k8s.py +0 -0
  152. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/node_webapp.py +0 -0
  153. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -0
  154. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/delete.py +0 -0
  155. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/deploy.py +0 -0
  156. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  157. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  158. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/is_up.py +0 -0
  159. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/list_deps.py +0 -0
  160. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/rpac.yaml +0 -0
  161. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/swagger.yaml +0 -0
  162. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/static/tst.py +0 -0
  163. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
  164. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
  165. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/test/api/test_lvol.py +0 -0
  166. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/test/api/test_pool.py +0 -0
  167. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/test/api/test_snapshot.py +0 -0
  168. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/test/api/test_storage_node.py +0 -0
  169. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/test/conftest.py +0 -0
  170. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/test/pytest.ini +0 -0
  171. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/test/requirements.txt +0 -0
  172. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/test/util.py +0 -0
  173. {sbcli-pre-25.5.1 → sbcli-pre-25.5.2}/simplyblock_web/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-pre
3
- Version: 25.5.1
3
+ Version: 25.5.2
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-pre
3
- Version: 25.5.1
3
+ Version: 25.5.2
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -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 cluster_suspend(self, sub_command, args):
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)
@@ -1,5 +1,5 @@
1
1
  SIMPLY_BLOCK_COMMAND_NAME=sbcli-pre
2
- SIMPLY_BLOCK_VERSION=25.5.1
2
+ SIMPLY_BLOCK_VERSION=25.5.2
3
3
 
4
4
 
5
5
  SIMPLY_BLOCK_DOCKER_IMAGE=simplyblock/simplyblock:R25.5-Hotfix
@@ -3,12 +3,14 @@ version: '3.8'
3
3
  services:
4
4
  ### monitoring ###
5
5
  mongodb:
6
- image: "mongo:6.0"
6
+ image: "mongo:5.0"
7
7
  volumes:
8
8
  - "mongodb_data:/data/db"
9
9
  deploy:
10
10
  placement:
11
- constraints: [node.role == manager]
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: [node.role == manager]
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:6.2.2"
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: [node.role == manager]
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=subsystem_list)
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
- logger.info(f"Checking node {node.hostname}")
63
- if not ping_host(node.mgmt_ip):
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
- # time.sleep(1)
258
- # ping_check = health_controller._check_node_ping(snode.mgmt_ip)
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
 
@@ -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
- if "migration" in task.function_params:
106
-
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
- else:
116
- task.retry += 1
117
- task.write_to_db(db.kv_store)
118
- return False
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
- if "migration" in task.function_params:
108
- mig_info = task.function_params["migration"]
109
- res = rpc_client.distr_migration_status(**mig_info)
110
- return utils.handle_task_result(task, res)
111
- else:
112
- task.retry += 1
113
- task.write_to_db(db.kv_store)
114
- return False
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
@@ -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
- if "migration" in task.function_params:
121
- allowed_error_codes = list(range(1, 8)) if not all_devs_online else [0]
122
- mig_info = task.function_params["migration"]
123
- res = rpc_client.distr_migration_status(**mig_info)
124
- return utils.handle_task_result(task, res, allowed_error_codes=allowed_error_codes)
125
- else:
126
- task.status = JobSchedule.STATUS_SUSPENDED
127
- task.retry += 1
128
- task.write_to_db(db.kv_store)
129
- return False
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 distrib_list:
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 1 -W 3 {ip} > /dev/null")
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