sbcli-dev 19.2.8__tar.gz → 19.2.10__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 (190) hide show
  1. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/PKG-INFO +4 -1
  2. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/pyproject.toml +4 -0
  3. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/requirements.txt +3 -0
  4. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/PKG-INFO +4 -1
  5. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/SOURCES.txt +34 -25
  6. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/requires.txt +3 -0
  7. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/setup.py +11 -6
  8. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_cli/cli.py +6 -5
  9. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_cli/clibase.py +5 -8
  10. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/cluster_ops.py +6 -2
  11. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/device_controller.py +48 -85
  12. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/health_controller.py +29 -25
  13. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/lvol_controller.py +77 -61
  14. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/snapshot_controller.py +20 -15
  15. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/tasks_controller.py +4 -3
  16. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/db_controller.py +18 -28
  17. sbcli_dev-19.2.10/simplyblock_core/env_var +7 -0
  18. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/fw_api_client.py +3 -7
  19. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/mgmt_node_ops.py +9 -6
  20. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/cluster.py +1 -0
  21. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/rpc_client.py +96 -10
  22. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/docker-compose-swarm.yml +1 -1
  23. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/health_check_service.py +6 -5
  24. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/lvol_stat_collector.py +1 -1
  25. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/main_distr_event_collector.py +6 -5
  26. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/snode_client.py +7 -9
  27. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/storage_node_ops.py +20 -9
  28. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/test/test_utils.py +11 -0
  29. sbcli_dev-19.2.8/simplyblock_core/utils.py → sbcli_dev-19.2.10/simplyblock_core/utils/__init__.py +41 -60
  30. sbcli_dev-19.2.10/simplyblock_core/utils/helpers.py +18 -0
  31. sbcli_dev-19.2.10/simplyblock_core/utils/pci.py +90 -0
  32. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/workers/cleanup_foundationdb.py +7 -4
  33. sbcli_dev-19.2.10/simplyblock_web/api/__init__.py +9 -0
  34. sbcli_dev-19.2.10/simplyblock_web/api/internal/__init__.py +2 -0
  35. sbcli_dev-19.2.10/simplyblock_web/api/internal/storage_node/__init__.py +2 -0
  36. sbcli_dev-19.2.8/simplyblock_web/blueprints/snode_ops.py → sbcli_dev-19.2.10/simplyblock_web/api/internal/storage_node/docker.py +7 -65
  37. sbcli_dev-19.2.8/simplyblock_web/blueprints/snode_ops_k8s.py → sbcli_dev-19.2.10/simplyblock_web/api/internal/storage_node/kubernetes.py +45 -55
  38. sbcli_dev-19.2.10/simplyblock_web/api/v1/__init__.py +41 -0
  39. sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_cluster.py → sbcli_dev-19.2.10/simplyblock_web/api/v1/cluster.py +19 -26
  40. sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_lvol.py → sbcli_dev-19.2.10/simplyblock_web/api/v1/lvol.py +33 -23
  41. sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_metrics.py → sbcli_dev-19.2.10/simplyblock_web/api/v1/metrics.py +4 -4
  42. sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_mgmt_node.py → sbcli_dev-19.2.10/simplyblock_web/api/v1/mgmt_node.py +2 -3
  43. sbcli_dev-19.2.8/simplyblock_web/blueprints/swagger_ui_blueprint.py → sbcli_dev-19.2.10/simplyblock_web/api/v1/swagger_ui.py +1 -1
  44. sbcli_dev-19.2.10/simplyblock_web/api/v2/__init__.py +60 -0
  45. sbcli_dev-19.2.10/simplyblock_web/api/v2/cluster.py +155 -0
  46. sbcli_dev-19.2.10/simplyblock_web/api/v2/device.py +79 -0
  47. sbcli_dev-19.2.10/simplyblock_web/api/v2/dtos.py +238 -0
  48. sbcli_dev-19.2.10/simplyblock_web/api/v2/management_node.py +42 -0
  49. sbcli_dev-19.2.10/simplyblock_web/api/v2/pool.py +123 -0
  50. sbcli_dev-19.2.10/simplyblock_web/api/v2/snapshot.py +51 -0
  51. sbcli_dev-19.2.10/simplyblock_web/api/v2/storage_node.py +216 -0
  52. sbcli_dev-19.2.10/simplyblock_web/api/v2/task.py +42 -0
  53. sbcli_dev-19.2.10/simplyblock_web/api/v2/util.py +26 -0
  54. sbcli_dev-19.2.10/simplyblock_web/api/v2/volume.py +230 -0
  55. sbcli_dev-19.2.10/simplyblock_web/app.py +43 -0
  56. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/node_configure.py +4 -2
  57. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/node_utils.py +8 -22
  58. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/node_webapp.py +4 -5
  59. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/templates/storage_core_isolation.yaml.j2 +15 -3
  60. sbcli_dev-19.2.10/simplyblock_web/templates/ubuntu_kernel_extra.yaml.j2 +55 -0
  61. sbcli_dev-19.2.10/simplyblock_web/test/conftest.py +22 -0
  62. sbcli_dev-19.2.10/simplyblock_web/test/util.py +31 -0
  63. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/utils.py +9 -7
  64. sbcli_dev-19.2.8/simplyblock_core/cnode_client.py +0 -122
  65. sbcli_dev-19.2.8/simplyblock_core/env_var +0 -7
  66. sbcli_dev-19.2.8/simplyblock_core/models/deployer.py +0 -56
  67. sbcli_dev-19.2.8/simplyblock_core/pci_utils.py +0 -28
  68. sbcli_dev-19.2.8/simplyblock_web/app.py +0 -53
  69. sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_deployer.py +0 -421
  70. sbcli_dev-19.2.8/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -3316
  71. sbcli_dev-19.2.8/simplyblock_web/test/api/test_lvol.py +0 -92
  72. sbcli_dev-19.2.8/simplyblock_web/test/api/test_pool.py +0 -81
  73. sbcli_dev-19.2.8/simplyblock_web/test/api/test_snapshot.py +0 -47
  74. sbcli_dev-19.2.8/simplyblock_web/test/api/test_storage_node.py +0 -105
  75. sbcli_dev-19.2.8/simplyblock_web/test/conftest.py +0 -59
  76. sbcli_dev-19.2.8/simplyblock_web/test/util.py +0 -55
  77. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/README.md +0 -0
  78. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/dependency_links.txt +0 -0
  79. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/entry_points.txt +0 -0
  80. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/top_level.txt +0 -0
  81. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/setup.cfg +0 -0
  82. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_cli/__init__.py +0 -0
  83. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_cli/main.py +0 -0
  84. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/__init__.py +0 -0
  85. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/constants.py +0 -0
  86. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/__init__.py +0 -0
  87. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/cluster_events.py +0 -0
  88. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/device_events.py +0 -0
  89. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/events_controller.py +0 -0
  90. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/lvol_events.py +0 -0
  91. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/mgmt_events.py +0 -0
  92. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/pool_controller.py +0 -0
  93. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/pool_events.py +0 -0
  94. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/snapshot_events.py +0 -0
  95. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/storage_events.py +0 -0
  96. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/tasks_events.py +0 -0
  97. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
  98. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/distr_controller.py +0 -0
  99. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/__init__.py +0 -0
  100. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/base_model.py +0 -0
  101. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/events.py +0 -0
  102. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/hublvol.py +0 -0
  103. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/iface.py +0 -0
  104. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/job_schedule.py +0 -0
  105. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/lvol_model.py +0 -0
  106. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/mgmt_node.py +0 -0
  107. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/nvme_device.py +0 -0
  108. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/pool.py +0 -0
  109. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/port_stat.py +0 -0
  110. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/snapshot.py +0 -0
  111. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/stats.py +0 -0
  112. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/storage_node.py +0 -0
  113. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/__init__.py +0 -0
  114. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
  115. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  116. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  117. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/config_docker.sh +0 -0
  118. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboard.yml +0 -0
  119. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  120. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  121. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  122. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  123. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  124. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  125. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/datasource.yml +0 -0
  126. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/db_config_double.sh +0 -0
  127. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/db_config_single.sh +0 -0
  128. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
  129. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  130. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
  131. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/foundation.yml +0 -0
  132. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/haproxy.cfg +0 -0
  133. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/helpers/__init__.py +0 -0
  134. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
  135. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
  136. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
  137. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/install_deps.sh +0 -0
  138. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/objstore.yml +0 -0
  139. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
  140. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
  141. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/run_ssh.sh +0 -0
  142. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/set_db_config.sh +0 -0
  143. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  144. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/__init__.py +0 -0
  145. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/cap_monitor.py +0 -0
  146. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
  147. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/device_monitor.py +0 -0
  148. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/install_service.sh +0 -0
  149. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/lvol_monitor.py +0 -0
  150. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  151. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/new_device_discovery.py +0 -0
  152. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/remove_service.sh +0 -0
  153. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/service_template.service +0 -0
  154. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/spdk/__init__.py +0 -0
  155. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/spdk/client.py +0 -0
  156. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
  157. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/storage_node_monitor.py +0 -0
  158. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_cluster_status.py +0 -0
  159. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
  160. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_migration.py +0 -0
  161. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
  162. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
  163. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_port_allow.py +0 -0
  164. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  165. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/shell_utils.py +0 -0
  166. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/test/test_models.py +0 -0
  167. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/README.md +0 -0
  168. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/__init__.py +0 -0
  169. {sbcli_dev-19.2.8/simplyblock_web/blueprints → sbcli_dev-19.2.10/simplyblock_web/api/internal}/node_api_basic.py +0 -0
  170. /sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_device.py → /sbcli_dev-19.2.10/simplyblock_web/api/v1/device.py +0 -0
  171. /sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_pool.py → /sbcli_dev-19.2.10/simplyblock_web/api/v1/pool.py +0 -0
  172. /sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_snapshot.py → /sbcli_dev-19.2.10/simplyblock_web/api/v1/snapshot.py +0 -0
  173. {sbcli_dev-19.2.8/simplyblock_web → sbcli_dev-19.2.10/simplyblock_web/api/v1}/static/swagger.yaml +0 -0
  174. /sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_storage_node.py → /sbcli_dev-19.2.10/simplyblock_web/api/v1/storage_node.py +0 -0
  175. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/auth_middleware.py +0 -0
  176. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/node_utils_k8s.py +0 -0
  177. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/delete.py +0 -0
  178. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/deploy.py +0 -0
  179. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  180. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  181. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/is_up.py +0 -0
  182. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/list_deps.py +0 -0
  183. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/rpac.yaml +0 -0
  184. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/tst.py +0 -0
  185. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
  186. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
  187. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/templates/storage_init_job.yaml.j2 +0 -0
  188. {sbcli_dev-19.2.8/simplyblock_web/blueprints → sbcli_dev-19.2.10/simplyblock_web/test}/__init__.py +0 -0
  189. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/test/pytest.ini +0 -0
  190. {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/test/requirements.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sbcli-dev
3
- Version: 19.2.8
3
+ Version: 19.2.10
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -29,6 +29,9 @@ Requires-Dist: ec2-metadata
29
29
  Requires-Dist: flask-swagger-ui
30
30
  Requires-Dist: sentry-sdk[flask]
31
31
  Requires-Dist: flask-openapi3
32
+ Requires-Dist: jsonschema
33
+ Requires-Dist: fastapi
34
+ Requires-Dist: uvicorn
32
35
  Dynamic: author
33
36
  Dynamic: author-email
34
37
  Dynamic: description
@@ -4,3 +4,7 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [tool.ruff]
6
6
  extend-exclude = ['simplyblock_cli/cli.py']
7
+
8
+ [tool.pytest.ini_options]
9
+ pythonpath = "."
10
+ testpaths = ['simplyblock_core/test', 'simplyblock_web/test']
@@ -21,3 +21,6 @@ ec2-metadata
21
21
  flask-swagger-ui
22
22
  sentry-sdk[flask]
23
23
  flask-openapi3
24
+ jsonschema
25
+ fastapi
26
+ uvicorn
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sbcli-dev
3
- Version: 19.2.8
3
+ Version: 19.2.10
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -29,6 +29,9 @@ Requires-Dist: ec2-metadata
29
29
  Requires-Dist: flask-swagger-ui
30
30
  Requires-Dist: sentry-sdk[flask]
31
31
  Requires-Dist: flask-openapi3
32
+ Requires-Dist: jsonschema
33
+ Requires-Dist: fastapi
34
+ Requires-Dist: uvicorn
32
35
  Dynamic: author
33
36
  Dynamic: author-email
34
37
  Dynamic: description
@@ -14,19 +14,16 @@ simplyblock_cli/clibase.py
14
14
  simplyblock_cli/main.py
15
15
  simplyblock_core/__init__.py
16
16
  simplyblock_core/cluster_ops.py
17
- simplyblock_core/cnode_client.py
18
17
  simplyblock_core/constants.py
19
18
  simplyblock_core/db_controller.py
20
19
  simplyblock_core/distr_controller.py
21
20
  simplyblock_core/env_var
22
21
  simplyblock_core/fw_api_client.py
23
22
  simplyblock_core/mgmt_node_ops.py
24
- simplyblock_core/pci_utils.py
25
23
  simplyblock_core/rpc_client.py
26
24
  simplyblock_core/shell_utils.py
27
25
  simplyblock_core/snode_client.py
28
26
  simplyblock_core/storage_node_ops.py
29
- simplyblock_core/utils.py
30
27
  simplyblock_core/controllers/__init__.py
31
28
  simplyblock_core/controllers/cluster_events.py
32
29
  simplyblock_core/controllers/device_controller.py
@@ -47,7 +44,6 @@ simplyblock_core/controllers/tcp_ports_events.py
47
44
  simplyblock_core/models/__init__.py
48
45
  simplyblock_core/models/base_model.py
49
46
  simplyblock_core/models/cluster.py
50
- simplyblock_core/models/deployer.py
51
47
  simplyblock_core/models/events.py
52
48
  simplyblock_core/models/hublvol.py
53
49
  simplyblock_core/models/iface.py
@@ -118,6 +114,9 @@ simplyblock_core/services/spdk/__init__.py
118
114
  simplyblock_core/services/spdk/client.py
119
115
  simplyblock_core/test/test_models.py
120
116
  simplyblock_core/test/test_utils.py
117
+ simplyblock_core/utils/__init__.py
118
+ simplyblock_core/utils/helpers.py
119
+ simplyblock_core/utils/pci.py
121
120
  simplyblock_core/workers/cleanup_foundationdb.py
122
121
  simplyblock_web/README.md
123
122
  simplyblock_web/__init__.py
@@ -128,21 +127,34 @@ simplyblock_web/node_utils.py
128
127
  simplyblock_web/node_utils_k8s.py
129
128
  simplyblock_web/node_webapp.py
130
129
  simplyblock_web/utils.py
131
- simplyblock_web/blueprints/__init__.py
132
- simplyblock_web/blueprints/node_api_basic.py
133
- simplyblock_web/blueprints/snode_ops.py
134
- simplyblock_web/blueprints/snode_ops_k8s.py
135
- simplyblock_web/blueprints/swagger_ui_blueprint.py
136
- simplyblock_web/blueprints/web_api_cluster.py
137
- simplyblock_web/blueprints/web_api_deployer.py
138
- simplyblock_web/blueprints/web_api_device.py
139
- simplyblock_web/blueprints/web_api_lvol.py
140
- simplyblock_web/blueprints/web_api_metrics.py
141
- simplyblock_web/blueprints/web_api_mgmt_node.py
142
- simplyblock_web/blueprints/web_api_pool.py
143
- simplyblock_web/blueprints/web_api_snapshot.py
144
- simplyblock_web/blueprints/web_api_storage_node.py
145
- simplyblock_web/static/SimplyBlock-API.postman_collection.json
130
+ simplyblock_web/api/__init__.py
131
+ simplyblock_web/api/internal/__init__.py
132
+ simplyblock_web/api/internal/node_api_basic.py
133
+ simplyblock_web/api/internal/storage_node/__init__.py
134
+ simplyblock_web/api/internal/storage_node/docker.py
135
+ simplyblock_web/api/internal/storage_node/kubernetes.py
136
+ simplyblock_web/api/v1/__init__.py
137
+ simplyblock_web/api/v1/cluster.py
138
+ simplyblock_web/api/v1/device.py
139
+ simplyblock_web/api/v1/lvol.py
140
+ simplyblock_web/api/v1/metrics.py
141
+ simplyblock_web/api/v1/mgmt_node.py
142
+ simplyblock_web/api/v1/pool.py
143
+ simplyblock_web/api/v1/snapshot.py
144
+ simplyblock_web/api/v1/storage_node.py
145
+ simplyblock_web/api/v1/swagger_ui.py
146
+ simplyblock_web/api/v1/static/swagger.yaml
147
+ simplyblock_web/api/v2/__init__.py
148
+ simplyblock_web/api/v2/cluster.py
149
+ simplyblock_web/api/v2/device.py
150
+ simplyblock_web/api/v2/dtos.py
151
+ simplyblock_web/api/v2/management_node.py
152
+ simplyblock_web/api/v2/pool.py
153
+ simplyblock_web/api/v2/snapshot.py
154
+ simplyblock_web/api/v2/storage_node.py
155
+ simplyblock_web/api/v2/task.py
156
+ simplyblock_web/api/v2/util.py
157
+ simplyblock_web/api/v2/volume.py
146
158
  simplyblock_web/static/delete.py
147
159
  simplyblock_web/static/deploy.py
148
160
  simplyblock_web/static/deploy_cnode.yaml
@@ -150,17 +162,14 @@ simplyblock_web/static/deploy_spdk.yaml
150
162
  simplyblock_web/static/is_up.py
151
163
  simplyblock_web/static/list_deps.py
152
164
  simplyblock_web/static/rpac.yaml
153
- simplyblock_web/static/swagger.yaml
154
165
  simplyblock_web/static/tst.py
155
166
  simplyblock_web/templates/caching_deploy_spdk.yaml.j2
156
167
  simplyblock_web/templates/storage_core_isolation.yaml.j2
157
168
  simplyblock_web/templates/storage_deploy_spdk.yaml.j2
158
169
  simplyblock_web/templates/storage_init_job.yaml.j2
170
+ simplyblock_web/templates/ubuntu_kernel_extra.yaml.j2
171
+ simplyblock_web/test/__init__.py
159
172
  simplyblock_web/test/conftest.py
160
173
  simplyblock_web/test/pytest.ini
161
174
  simplyblock_web/test/requirements.txt
162
- simplyblock_web/test/util.py
163
- simplyblock_web/test/api/test_lvol.py
164
- simplyblock_web/test/api/test_pool.py
165
- simplyblock_web/test/api/test_snapshot.py
166
- simplyblock_web/test/api/test_storage_node.py
175
+ simplyblock_web/test/util.py
@@ -21,3 +21,6 @@ ec2-metadata
21
21
  flask-swagger-ui
22
22
  sentry-sdk[flask]
23
23
  flask-openapi3
24
+ jsonschema
25
+ fastapi
26
+ uvicorn
@@ -4,6 +4,7 @@ from setuptools import setup, find_packages
4
4
 
5
5
  from setuptools.command.install import install as _install
6
6
 
7
+ SIMPLYBLOCK_DEFAULT_CLI_CMD = "sbctl"
7
8
 
8
9
  def _post_install():
9
10
  from subprocess import getstatusoutput
@@ -74,7 +75,7 @@ def get_requirements():
74
75
  return fh.readlines()
75
76
 
76
77
 
77
- COMMAND_NAME = get_env_var("SIMPLY_BLOCK_COMMAND_NAME", "sbcli")
78
+ COMMAND_NAME = get_env_var("SIMPLY_BLOCK_COMMAND_NAME", SIMPLYBLOCK_DEFAULT_CLI_CMD)
78
79
  VERSION = get_env_var("SIMPLY_BLOCK_VERSION", "1")
79
80
 
80
81
  data_files = gen_data_files("simplyblock_core","simplyblock_web")
@@ -82,6 +83,14 @@ data_files.append(('', ["requirements.txt"]))
82
83
  # data_files.append(('/etc/simplyblock', ["requirements.txt"]))
83
84
 
84
85
 
86
+ console_scripts = [
87
+ f'{COMMAND_NAME}=simplyblock_cli.cli:main',
88
+ f'{SIMPLYBLOCK_DEFAULT_CLI_CMD}=simplyblock_cli.cli:main'
89
+ ]
90
+
91
+ # to remove duplicates if COMMAND_NAME is same as SIMPLYBLOCK_DEFAULT_CLI_CMD
92
+ console_scripts = list(set(console_scripts))
93
+
85
94
  setup(
86
95
  name=COMMAND_NAME,
87
96
  version=VERSION,
@@ -95,10 +104,7 @@ setup(
95
104
  long_description_content_type="text/markdown",
96
105
  install_requires=get_requirements(),
97
106
  entry_points={
98
- 'console_scripts': [
99
- f'{COMMAND_NAME}=simplyblock_cli.cli:main',
100
- 'sbctl=simplyblock_cli.cli:main',
101
- ]
107
+ 'console_scripts': console_scripts
102
108
  },
103
109
  include_package_data=True,
104
110
  data_files=data_files,
@@ -106,5 +112,4 @@ setup(
106
112
  '': ["/etc/simplyblock/requirements.txt"],
107
113
  '/etc/simplyblock': ["requirements.txt"]
108
114
  },
109
- # cmdclass={'install': install},
110
115
  )
@@ -362,6 +362,7 @@ class CLIWrapper(CLIWrapperBase):
362
362
  if self.developer_mode:
363
363
  argument = subcommand.add_argument('--disable-monitoring', help='Disable monitoring stack, false by default', dest='disable_monitoring', action='store_true')
364
364
  argument = subcommand.add_argument('--strict-node-anti-affinity', help='Enable strict node anti affinity for storage nodes. Never more than one chunk is placed on a node. This requires a minimum of _data-chunks-in-stripe + parity-chunks-in-stripe + 1_ nodes in the cluster.', dest='strict_node_anti_affinity', action='store_true')
365
+ argument = subcommand.add_argument('--name', '-n', help='Assigns a name to the newly created cluster.', type=str, dest='name')
365
366
 
366
367
  def init_cluster__add(self, subparser):
367
368
  subcommand = self.add_sub_command(subparser, 'add', 'Adds a new cluster')
@@ -387,6 +388,7 @@ class CLIWrapper(CLIWrapperBase):
387
388
  if self.developer_mode:
388
389
  argument = subcommand.add_argument('--enable-qos', help='Enable qos bdev for storage nodes, default: true', type=bool, default=False, dest='enable_qos')
389
390
  argument = subcommand.add_argument('--strict-node-anti-affinity', help='Enable strict node anti affinity for storage nodes. Never more than one chunk is placed on a node. This requires a minimum of _data-chunks-in-stripe + parity-chunks-in-stripe + 1_ nodes in the cluster."', dest='strict_node_anti_affinity', action='store_true')
391
+ argument = subcommand.add_argument('--name', '-n', help='Assigns a name to the newly created cluster.', type=str, dest='name')
390
392
 
391
393
  def init_cluster__activate(self, subparser):
392
394
  subcommand = self.add_sub_command(subparser, 'activate', 'Activates a cluster.')
@@ -737,7 +739,7 @@ class CLIWrapper(CLIWrapperBase):
737
739
 
738
740
  logging.getLogger("urllib3.connectionpool").setLevel(logging.WARNING)
739
741
 
740
- ret = ""
742
+ ret = False
741
743
  args_dict = args.__dict__
742
744
 
743
745
  try:
@@ -1046,11 +1048,10 @@ class CLIWrapper(CLIWrapperBase):
1046
1048
  else:
1047
1049
  self.parser.print_help()
1048
1050
 
1049
- except Exception as e:
1051
+ except Exception as exc:
1052
+ print('Operation failed: ', exc)
1050
1053
  if args.debug:
1051
- traceback.print_exc()
1052
- else:
1053
- print('Operation failed: ', e)
1054
+ traceback.print_exception(None, exc, exc.__traceback__)
1054
1055
  exit(1)
1055
1056
 
1056
1057
  if not ret:
@@ -593,12 +593,6 @@ class CLIWrapperBase:
593
593
  def storage_pool__disable(self, sub_command, args):
594
594
  return pool_controller.set_status(args.pool_id, Pool.STATUS_INACTIVE)
595
595
 
596
- def storage_pool__get_secret(self, sub_command, args):
597
- return pool_controller.get_secret(args.pool_id)
598
-
599
- def storage_pool__update_secret(self, sub_command, args):
600
- return pool_controller.set_secret(args.pool_id, args.secret)
601
-
602
596
  def storage_pool__get_capacity(self, sub_command, args):
603
597
  return pool_controller.get_capacity(args.pool_id)
604
598
 
@@ -639,6 +633,7 @@ class CLIWrapperBase:
639
633
  distr_bs = args.distr_bs
640
634
  distr_chunk_bs = args.distr_chunk_bs
641
635
  ha_type = args.ha_type
636
+ name = args.name
642
637
 
643
638
  enable_node_affinity = args.enable_node_affinity
644
639
  qpair_count = args.qpair_count
@@ -650,7 +645,7 @@ class CLIWrapperBase:
650
645
  return cluster_ops.add_cluster(
651
646
  blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
652
647
  distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity,
653
- qpair_count, max_queue_size, inflight_io_threshold, enable_qos, strict_node_anti_affinity)
648
+ qpair_count, max_queue_size, inflight_io_threshold, enable_qos, strict_node_anti_affinity, name)
654
649
 
655
650
  def cluster_create(self, args):
656
651
  page_size_in_blocks = args.page_size
@@ -677,13 +672,15 @@ class CLIWrapperBase:
677
672
  enable_qos = args.enable_qos
678
673
  disable_monitoring = args.disable_monitoring
679
674
  strict_node_anti_affinity = args.strict_node_anti_affinity
675
+ name = args.name
680
676
 
681
677
  return cluster_ops.create_cluster(
682
678
  blk_size, page_size_in_blocks,
683
679
  CLI_PASS, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
684
680
  ifname, log_del_interval, metrics_retention_period, contact_point, grafana_endpoint,
685
681
  distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity,
686
- qpair_count, max_queue_size, inflight_io_threshold, enable_qos, disable_monitoring, strict_node_anti_affinity)
682
+ qpair_count, max_queue_size, inflight_io_threshold, enable_qos, disable_monitoring,
683
+ strict_node_anti_affinity, name)
687
684
 
688
685
  def query_yes_no(self, question, default="yes"):
689
686
  """Ask a yes/no question via raw_input() and return their answer.
@@ -124,7 +124,8 @@ def _set_max_result_window(cluster_ip, max_window=100000):
124
124
  def create_cluster(blk_size, page_size_in_blocks, cli_pass,
125
125
  cap_warn, cap_crit, prov_cap_warn, prov_cap_crit, ifname, log_del_interval, metrics_retention_period,
126
126
  contact_point, grafana_endpoint, distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type,
127
- enable_node_affinity, qpair_count, max_queue_size, inflight_io_threshold, enable_qos, disable_monitoring, strict_node_anti_affinity) -> str:
127
+ enable_node_affinity, qpair_count, max_queue_size, inflight_io_threshold, enable_qos, disable_monitoring,
128
+ strict_node_anti_affinity, name) -> str:
128
129
 
129
130
  if distr_ndcs == 0 and distr_npcs == 0:
130
131
  raise ValueError("both distr_ndcs and distr_npcs cannot be 0")
@@ -181,6 +182,7 @@ def create_cluster(blk_size, page_size_in_blocks, cli_pass,
181
182
  logger.info("Adding new cluster object")
182
183
  cluster = Cluster()
183
184
  cluster.uuid = str(uuid.uuid4())
185
+ cluster.cluster_name = name
184
186
  cluster.blk_size = blk_size
185
187
  cluster.page_size_in_blocks = page_size_in_blocks
186
188
  cluster.nqn = f"{constants.CLUSTER_NQN}:{cluster.uuid}"
@@ -304,7 +306,7 @@ def _run_fio(mount_point) -> None:
304
306
 
305
307
  def add_cluster(blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
306
308
  distr_ndcs, distr_npcs, distr_bs, distr_chunk_bs, ha_type, enable_node_affinity, qpair_count,
307
- max_queue_size, inflight_io_threshold, enable_qos, strict_node_anti_affinity) -> str:
309
+ max_queue_size, inflight_io_threshold, enable_qos, strict_node_anti_affinity, name) -> str:
308
310
  db_controller = DBController()
309
311
  clusters = db_controller.get_clusters()
310
312
  if not clusters:
@@ -316,6 +318,7 @@ def add_cluster(blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn
316
318
  logger.info("Adding new cluster")
317
319
  cluster = Cluster()
318
320
  cluster.uuid = str(uuid.uuid4())
321
+ cluster.cluster_name = name
319
322
  cluster.blk_size = blk_size
320
323
  cluster.page_size_in_blocks = page_size_in_blocks
321
324
  cluster.nqn = f"{constants.CLUSTER_NQN}:{cluster.uuid}"
@@ -618,6 +621,7 @@ def list() -> t.List[dict]:
618
621
  status = f"{status} - ReBalancing"
619
622
  data.append({
620
623
  "UUID": cl.get_id(),
624
+ "Name": cl.cluster_name if cl.cluster_name is not None else "-",
621
625
  "NQN": cl.nqn,
622
626
  "ha_type": cl.ha_type,
623
627
  "#mgmt": len(mt),
@@ -12,6 +12,17 @@ from simplyblock_core.rpc_client import RPCClient
12
12
  logger = logging.getLogger()
13
13
 
14
14
 
15
+ def get_storage_node_by_jm_device(db_controller: DBController, id) -> StorageNode:
16
+ try:
17
+ return next(
18
+ node
19
+ for node in db_controller.get_storage_nodes()
20
+ if node.jm_device.get_id() == id
21
+ )
22
+ except StopIteration:
23
+ raise KeyError(f'No storage node with JM device {id}')
24
+
25
+
15
26
  def device_set_state(device_id, state):
16
27
  db_controller = DBController()
17
28
  try:
@@ -69,24 +80,16 @@ def device_set_io_error(device_id, is_error):
69
80
  db_controller = DBController()
70
81
  try:
71
82
  dev = db_controller.get_storage_device_by_id(device_id)
72
- except KeyError:
73
- logger.error("device not found")
74
- return False
75
-
76
- snode = db_controller.get_storage_node_by_id(dev.node_id)
77
- if not snode:
78
- logger.error("node not found")
83
+ snode = db_controller.get_storage_node_by_id(dev.node_id)
84
+ except KeyError as e:
85
+ logger.error(e)
79
86
  return False
80
87
 
81
- device = None
82
88
  for dev in snode.nvme_devices:
83
89
  if dev.get_id() == device_id:
84
90
  device = dev
85
91
  break
86
92
 
87
- if not device:
88
- logger.error("device not found")
89
-
90
93
  if device.io_error == is_error:
91
94
  return True
92
95
 
@@ -284,14 +287,11 @@ def set_device_testing_mode(device_id, mode):
284
287
  db_controller = DBController()
285
288
  try:
286
289
  device = db_controller.get_storage_device_by_id(device_id)
287
- except KeyError:
288
- logger.error("device not found")
290
+ snode = db_controller.get_storage_node_by_id(device.node_id)
291
+ except KeyError as e:
292
+ logger.error(e)
289
293
  return False
290
294
 
291
- snode = db_controller.get_storage_node_by_id(device.node_id)
292
- if not snode:
293
- logger.error("node not found")
294
- return False
295
295
  if not snode.enable_test_device:
296
296
  logger.error("Test device is disabled on this storage node")
297
297
  return False
@@ -332,14 +332,9 @@ def device_remove(device_id, force=True):
332
332
  db_controller = DBController()
333
333
  try:
334
334
  dev = db_controller.get_storage_device_by_id(device_id)
335
- except KeyError:
336
- logger.error("device not found")
337
- return False
338
-
339
- try:
340
335
  snode = db_controller.get_storage_node_by_id(dev.node_id)
341
- except KeyError:
342
- logger.exception("node not found")
336
+ except KeyError as e:
337
+ logger.error(e)
343
338
  return False
344
339
 
345
340
  for dev in snode.nvme_devices:
@@ -525,14 +520,9 @@ def reset_storage_device(dev_id):
525
520
  db_controller = DBController()
526
521
  try:
527
522
  device = db_controller.get_storage_device_by_id(dev_id)
528
- except KeyError:
529
- logger.error("device not found")
530
- return False
531
-
532
- try:
533
523
  snode = db_controller.get_storage_node_by_id(device.node_id)
534
- except KeyError:
535
- logger.exception("node not found")
524
+ except KeyError as e:
525
+ logger.error(e)
536
526
  return False
537
527
 
538
528
  if device.status in [NVMeDevice.STATUS_REMOVED, NVMeDevice.STATUS_FAILED, NVMeDevice.STATUS_FAILED_AND_MIGRATED]:
@@ -579,19 +569,11 @@ def device_set_retries_exhausted(device_id, retries_exhausted):
579
569
  db_controller = DBController()
580
570
  try:
581
571
  dev = db_controller.get_storage_device_by_id(device_id)
582
- except KeyError:
583
- logger.error("device not found")
584
- return False
585
-
586
- try:
587
572
  snode = db_controller.get_storage_node_by_id(dev.node_id)
588
- except KeyError:
589
- logger.exception("node not found")
573
+ except KeyError as e:
574
+ logger.error(e)
590
575
  return False
591
576
 
592
- if not dev:
593
- logger.error("device not found")
594
-
595
577
  if dev.retries_exhausted == retries_exhausted:
596
578
  return True
597
579
 
@@ -604,14 +586,9 @@ def device_set_failed(device_id):
604
586
  db_controller = DBController()
605
587
  try:
606
588
  dev = db_controller.get_storage_device_by_id(device_id)
607
- except KeyError:
608
- logger.error("device not found")
609
- return False
610
-
611
- try:
612
589
  snode = db_controller.get_storage_node_by_id(dev.node_id)
613
- except KeyError:
614
- logger.exception("node not found")
590
+ except KeyError as e:
591
+ logger.error(e)
615
592
  return False
616
593
 
617
594
  task_id = tasks_controller.get_active_dev_restart_task(snode.cluster_id, device_id)
@@ -637,21 +614,15 @@ def add_device(device_id):
637
614
  db_controller = DBController()
638
615
  try:
639
616
  dev = db_controller.get_storage_device_by_id(device_id)
640
- except KeyError:
641
- logger.error("device not found")
617
+ snode = db_controller.get_storage_node_by_id(dev.node_id)
618
+ except KeyError as e:
619
+ logger.error(e)
642
620
  return False
643
621
 
644
622
  if dev.status != NVMeDevice.STATUS_NEW:
645
623
  logger.error("Device must be in new state")
646
624
  return False
647
625
 
648
- try:
649
- snode = db_controller.get_storage_node_by_id(dev.node_id)
650
- except KeyError:
651
- logger.exception("node not found")
652
- return False
653
-
654
- device_obj = None
655
626
  for dev in snode.nvme_devices:
656
627
  if dev.get_id() == device_id:
657
628
  device_obj = dev
@@ -675,7 +646,7 @@ def add_device(device_id):
675
646
  for node in snodes:
676
647
  if node.get_id() == snode.get_id() or node.status != StorageNode.STATUS_ONLINE:
677
648
  continue
678
- node.remote_devices = storage_node_ops._connect_to_remote_devs(node, force_conect_restarting_nodes=True)
649
+ node.remote_devices = storage_node_ops._connect_to_remote_devs(node, force_connect_restarting_nodes=True)
679
650
  node.write_to_db()
680
651
 
681
652
  snodes = db_controller.get_storage_nodes_by_cluster_id(snode.cluster_id)
@@ -775,17 +746,15 @@ def device_set_failed_and_migrated(device_id):
775
746
 
776
747
  def set_jm_device_state(device_id, state):
777
748
  db_controller = DBController()
778
- jm_device = None
779
- snode = None
780
- for node in db_controller.get_storage_nodes():
781
- if node.jm_device.get_id() == device_id:
782
- jm_device = node.jm_device
783
- snode = node
784
- break
785
- if not jm_device:
786
- logger.error("device not found")
749
+
750
+ try:
751
+ snode = get_storage_node_by_jm_device(db_controller, device_id)
752
+ except KeyError as e:
753
+ logger.error(e)
787
754
  return False
788
755
 
756
+ jm_device = snode.jm_device
757
+
789
758
  if jm_device.status != state:
790
759
  jm_device.status = state
791
760
  snode.write_to_db(db_controller.kv_store)
@@ -816,15 +785,11 @@ def set_jm_device_state(device_id, state):
816
785
 
817
786
  def remove_jm_device(device_id, force=False):
818
787
  db_controller = DBController()
819
- jm_device = None
820
- snode = None
821
- for node in db_controller.get_storage_nodes():
822
- if node.jm_device.get_id() == device_id:
823
- jm_device = node.jm_device
824
- snode = node
825
- break
826
- if not jm_device:
827
- logger.error("device not found")
788
+
789
+ try:
790
+ snode = get_storage_node_by_jm_device(db_controller, device_id)
791
+ except KeyError as e:
792
+ logger.error(e)
828
793
  return False
829
794
 
830
795
  set_jm_device_state(snode.jm_device.get_id(), JMDevice.STATUS_UNAVAILABLE)
@@ -859,17 +824,15 @@ def remove_jm_device(device_id, force=False):
859
824
 
860
825
  def restart_jm_device(device_id, force=False, format_alceml=False):
861
826
  db_controller = DBController()
862
- jm_device = None
863
- snode = None
864
- for node in db_controller.get_storage_nodes():
865
- if node.jm_device.get_id() == device_id:
866
- jm_device = node.jm_device
867
- snode = node
868
- break
869
- if not jm_device:
870
- logger.error("device not found")
827
+
828
+ try:
829
+ snode = get_storage_node_by_jm_device(db_controller, device_id)
830
+ except KeyError as e:
831
+ logger.error(e)
871
832
  return False
872
833
 
834
+ jm_device = snode.jm_device
835
+
873
836
  if jm_device.status == JMDevice.STATUS_ONLINE:
874
837
  logger.warning("device is online")
875
838
  if not force: