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.
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/PKG-INFO +4 -1
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/pyproject.toml +4 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/requirements.txt +3 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/PKG-INFO +4 -1
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/SOURCES.txt +34 -25
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/requires.txt +3 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/setup.py +11 -6
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_cli/cli.py +6 -5
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_cli/clibase.py +5 -8
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/cluster_ops.py +6 -2
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/device_controller.py +48 -85
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/health_controller.py +29 -25
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/lvol_controller.py +77 -61
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/snapshot_controller.py +20 -15
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/tasks_controller.py +4 -3
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/db_controller.py +18 -28
- sbcli_dev-19.2.10/simplyblock_core/env_var +7 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/fw_api_client.py +3 -7
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/mgmt_node_ops.py +9 -6
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/cluster.py +1 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/rpc_client.py +96 -10
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/docker-compose-swarm.yml +1 -1
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/health_check_service.py +6 -5
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/lvol_stat_collector.py +1 -1
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/main_distr_event_collector.py +6 -5
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/snode_client.py +7 -9
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/storage_node_ops.py +20 -9
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/test/test_utils.py +11 -0
- sbcli_dev-19.2.8/simplyblock_core/utils.py → sbcli_dev-19.2.10/simplyblock_core/utils/__init__.py +41 -60
- sbcli_dev-19.2.10/simplyblock_core/utils/helpers.py +18 -0
- sbcli_dev-19.2.10/simplyblock_core/utils/pci.py +90 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/workers/cleanup_foundationdb.py +7 -4
- sbcli_dev-19.2.10/simplyblock_web/api/__init__.py +9 -0
- sbcli_dev-19.2.10/simplyblock_web/api/internal/__init__.py +2 -0
- sbcli_dev-19.2.10/simplyblock_web/api/internal/storage_node/__init__.py +2 -0
- 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
- 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
- sbcli_dev-19.2.10/simplyblock_web/api/v1/__init__.py +41 -0
- 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
- 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
- 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
- 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
- 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
- sbcli_dev-19.2.10/simplyblock_web/api/v2/__init__.py +60 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/cluster.py +155 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/device.py +79 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/dtos.py +238 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/management_node.py +42 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/pool.py +123 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/snapshot.py +51 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/storage_node.py +216 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/task.py +42 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/util.py +26 -0
- sbcli_dev-19.2.10/simplyblock_web/api/v2/volume.py +230 -0
- sbcli_dev-19.2.10/simplyblock_web/app.py +43 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/node_configure.py +4 -2
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/node_utils.py +8 -22
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/node_webapp.py +4 -5
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/templates/storage_core_isolation.yaml.j2 +15 -3
- sbcli_dev-19.2.10/simplyblock_web/templates/ubuntu_kernel_extra.yaml.j2 +55 -0
- sbcli_dev-19.2.10/simplyblock_web/test/conftest.py +22 -0
- sbcli_dev-19.2.10/simplyblock_web/test/util.py +31 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/utils.py +9 -7
- sbcli_dev-19.2.8/simplyblock_core/cnode_client.py +0 -122
- sbcli_dev-19.2.8/simplyblock_core/env_var +0 -7
- sbcli_dev-19.2.8/simplyblock_core/models/deployer.py +0 -56
- sbcli_dev-19.2.8/simplyblock_core/pci_utils.py +0 -28
- sbcli_dev-19.2.8/simplyblock_web/app.py +0 -53
- sbcli_dev-19.2.8/simplyblock_web/blueprints/web_api_deployer.py +0 -421
- sbcli_dev-19.2.8/simplyblock_web/static/SimplyBlock-API.postman_collection.json +0 -3316
- sbcli_dev-19.2.8/simplyblock_web/test/api/test_lvol.py +0 -92
- sbcli_dev-19.2.8/simplyblock_web/test/api/test_pool.py +0 -81
- sbcli_dev-19.2.8/simplyblock_web/test/api/test_snapshot.py +0 -47
- sbcli_dev-19.2.8/simplyblock_web/test/api/test_storage_node.py +0 -105
- sbcli_dev-19.2.8/simplyblock_web/test/conftest.py +0 -59
- sbcli_dev-19.2.8/simplyblock_web/test/util.py +0 -55
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/README.md +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/dependency_links.txt +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/entry_points.txt +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/sbcli_dev.egg-info/top_level.txt +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/setup.cfg +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_cli/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_cli/main.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/constants.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/cluster_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/device_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/events_controller.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/lvol_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/mgmt_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/pool_controller.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/pool_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/snapshot_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/storage_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/tasks_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/controllers/tcp_ports_events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/distr_controller.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/base_model.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/events.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/hublvol.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/iface.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/job_schedule.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/lvol_model.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/mgmt_node.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/nvme_device.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/pool.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/port_stat.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/snapshot.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/stats.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/models/storage_node.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/config_docker.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboard.yml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/devices.json +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/dashboards/pools.json +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/datasource.yml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/db_config_double.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/db_config_single.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/deploy_stack.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/foundation.yml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/haproxy.cfg +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/helpers/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/helpers/deploy_cluster.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/helpers/destroy_cluster.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/helpers/nvme_disconnect_by_ip.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/install_deps.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/objstore.yml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/prometheus.yml.j2 +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/run_ssh.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/set_db_config.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/cap_monitor.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/device_monitor.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/install_service.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/lvol_monitor.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/new_device_discovery.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/remove_service.sh +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/service_template.service +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/spdk/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/spdk/client.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/storage_node_monitor.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_cluster_status.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_migration.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_port_allow.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/services/tasks_runner_restart.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/shell_utils.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_core/test/test_models.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/README.md +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/__init__.py +0 -0
- {sbcli_dev-19.2.8/simplyblock_web/blueprints → sbcli_dev-19.2.10/simplyblock_web/api/internal}/node_api_basic.py +0 -0
- /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
- /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
- /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
- {sbcli_dev-19.2.8/simplyblock_web → sbcli_dev-19.2.10/simplyblock_web/api/v1}/static/swagger.yaml +0 -0
- /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
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/auth_middleware.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/node_utils_k8s.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/delete.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/deploy.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/deploy_cnode.yaml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/deploy_spdk.yaml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/is_up.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/list_deps.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/rpac.yaml +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/static/tst.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/templates/storage_init_job.yaml.j2 +0 -0
- {sbcli_dev-19.2.8/simplyblock_web/blueprints → sbcli_dev-19.2.10/simplyblock_web/test}/__init__.py +0 -0
- {sbcli_dev-19.2.8 → sbcli_dev-19.2.10}/simplyblock_web/test/pytest.ini +0 -0
- {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.
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sbcli-dev
|
|
3
|
-
Version: 19.2.
|
|
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/
|
|
132
|
-
simplyblock_web/
|
|
133
|
-
simplyblock_web/
|
|
134
|
-
simplyblock_web/
|
|
135
|
-
simplyblock_web/
|
|
136
|
-
simplyblock_web/
|
|
137
|
-
simplyblock_web/
|
|
138
|
-
simplyblock_web/
|
|
139
|
-
simplyblock_web/
|
|
140
|
-
simplyblock_web/
|
|
141
|
-
simplyblock_web/
|
|
142
|
-
simplyblock_web/
|
|
143
|
-
simplyblock_web/
|
|
144
|
-
simplyblock_web/
|
|
145
|
-
simplyblock_web/
|
|
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
|
|
@@ -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",
|
|
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
|
|
1051
|
+
except Exception as exc:
|
|
1052
|
+
print('Operation failed: ', exc)
|
|
1050
1053
|
if args.debug:
|
|
1051
|
-
traceback.
|
|
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,
|
|
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,
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
288
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
641
|
-
|
|
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,
|
|
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
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
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
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
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
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
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:
|