sbcli-dev 6.2.2__tar.gz → 6.2.3__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 (164) hide show
  1. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/PKG-INFO +1 -1
  2. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/env_var +1 -1
  3. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/PKG-INFO +1 -1
  4. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/tasks_controller.py +1 -3
  5. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/kv_store.py +5 -0
  6. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/base_model.py +15 -62
  7. sbcli_dev-6.2.3/simplyblock_core/models/caching_node.py +109 -0
  8. sbcli_dev-6.2.3/simplyblock_core/models/cluster.py +107 -0
  9. sbcli_dev-6.2.3/simplyblock_core/models/events.py +60 -0
  10. sbcli_dev-6.2.3/simplyblock_core/models/iface.py +30 -0
  11. sbcli_dev-6.2.3/simplyblock_core/models/job_schedule.py +52 -0
  12. sbcli_dev-6.2.3/simplyblock_core/models/lvol_model.py +97 -0
  13. sbcli_dev-6.2.3/simplyblock_core/models/mgmt_node.py +54 -0
  14. sbcli_dev-6.2.3/simplyblock_core/models/nvme_device.py +132 -0
  15. sbcli_dev-6.2.3/simplyblock_core/models/pool.py +59 -0
  16. sbcli_dev-6.2.3/simplyblock_core/models/snapshot.py +29 -0
  17. sbcli_dev-6.2.3/simplyblock_core/models/stats.py +134 -0
  18. sbcli_dev-6.2.3/simplyblock_core/models/storage_node.py +147 -0
  19. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/storage_node_ops.py +105 -0
  20. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/app.py +0 -6
  21. sbcli_dev-6.2.2/simplyblock_core/models/caching_node.py +0 -52
  22. sbcli_dev-6.2.2/simplyblock_core/models/cluster.py +0 -96
  23. sbcli_dev-6.2.2/simplyblock_core/models/events.py +0 -45
  24. sbcli_dev-6.2.2/simplyblock_core/models/iface.py +0 -20
  25. sbcli_dev-6.2.2/simplyblock_core/models/job_schedule.py +0 -35
  26. sbcli_dev-6.2.2/simplyblock_core/models/lvol_model.py +0 -63
  27. sbcli_dev-6.2.2/simplyblock_core/models/mgmt_node.py +0 -14
  28. sbcli_dev-6.2.2/simplyblock_core/models/nvme_device.py +0 -82
  29. sbcli_dev-6.2.2/simplyblock_core/models/pool.py +0 -47
  30. sbcli_dev-6.2.2/simplyblock_core/models/snapshot.py +0 -19
  31. sbcli_dev-6.2.2/simplyblock_core/models/stats.py +0 -115
  32. sbcli_dev-6.2.2/simplyblock_core/models/storage_node.py +0 -83
  33. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/README.md +0 -0
  34. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/pyproject.toml +0 -0
  35. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/SOURCES.txt +0 -0
  36. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/dependency_links.txt +0 -0
  37. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/entry_points.txt +0 -0
  38. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/requires.txt +0 -0
  39. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/sbcli_dev.egg-info/top_level.txt +0 -0
  40. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/setup.cfg +0 -0
  41. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/setup.py +0 -0
  42. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_cli/cli.py +0 -0
  43. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_cli/main.py +0 -0
  44. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/__init__.py +0 -0
  45. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/cluster_ops.py +0 -0
  46. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/cnode_client.py +0 -0
  47. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/compute_node_ops.py +0 -0
  48. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/constants.py +0 -0
  49. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/__init__.py +0 -0
  50. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/caching_node_controller.py +0 -0
  51. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/cluster_events.py +0 -0
  52. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/device_controller.py +0 -0
  53. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/device_events.py +0 -0
  54. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/events_controller.py +0 -0
  55. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/health_controller.py +0 -0
  56. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/lvol_controller.py +0 -0
  57. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/lvol_events.py +0 -0
  58. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/mgmt_events.py +0 -0
  59. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/pool_controller.py +0 -0
  60. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/pool_events.py +0 -0
  61. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/snapshot_controller.py +0 -0
  62. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/snapshot_events.py +0 -0
  63. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/storage_events.py +0 -0
  64. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/controllers/tasks_events.py +0 -0
  65. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/distr_controller.py +0 -0
  66. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/mgmt_node_ops.py +0 -0
  67. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/__init__.py +0 -0
  68. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/compute_node.py +0 -0
  69. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/deployer.py +0 -0
  70. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/global_settings.py +0 -0
  71. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/models/port_stat.py +0 -0
  72. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/pci_utils.py +0 -0
  73. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/rpc_client.py +0 -0
  74. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/__init__.py +0 -0
  75. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/alerting/alert_resources.yaml.j2 +0 -0
  76. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  77. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  78. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/config_docker.sh +0 -0
  79. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboard.yml +0 -0
  80. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  81. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  82. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  83. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  84. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  85. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  86. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/datasource.yml +0 -0
  87. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/db_config_double.sh +0 -0
  88. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/db_config_single.sh +0 -0
  89. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/deploy_fdb.sh +0 -0
  90. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  91. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
  92. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
  93. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/foundation.yml +0 -0
  94. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/haproxy.cfg +0 -0
  95. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/install_deps.sh +0 -0
  96. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/objstore.yml +0 -0
  97. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/prepare_fdb.sh +0 -0
  98. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/prometheus.yml +0 -0
  99. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/run_ssh.sh +0 -0
  100. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/set_db_config.sh +0 -0
  101. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  102. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/__init__.py +0 -0
  103. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/cached_lvol_stat_collector.py +0 -0
  104. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/caching_node_monitor.py +0 -0
  105. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/cap_monitor.py +0 -0
  106. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
  107. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/device_monitor.py +0 -0
  108. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/health_check_service.py +0 -0
  109. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/install_service.sh +0 -0
  110. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/log_agg_service.py +0 -0
  111. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/lvol_monitor.py +0 -0
  112. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/lvol_stat_collector.py +0 -0
  113. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/main_distr_event_collector.py +0 -0
  114. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  115. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/new_device_discovery.py +0 -0
  116. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/port_stat_collector.py +0 -0
  117. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/remove_service.sh +0 -0
  118. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/service_template.service +0 -0
  119. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/spdk_http_proxy_server.py +0 -0
  120. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/storage_node_monitor.py +0 -0
  121. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_failed_migration.py +0 -0
  122. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_migration.py +0 -0
  123. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_new_dev_migration.py +0 -0
  124. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_node_add.py +0 -0
  125. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  126. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/shell_utils.py +0 -0
  127. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/snode_client.py +0 -0
  128. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_core/utils.py +0 -0
  129. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/__init__.py +0 -0
  130. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/auth_middleware.py +0 -0
  131. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/__init__.py +0 -0
  132. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  133. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  134. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  135. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
  136. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
  137. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/snode_ops.py +0 -0
  138. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/snode_ops_k8s.py +0 -0
  139. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  140. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
  141. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_deployer.py +0 -0
  142. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_device.py +0 -0
  143. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
  144. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  145. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_pool.py +0 -0
  146. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  147. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
  148. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/caching_node_app.py +0 -0
  149. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/caching_node_app_k8s.py +0 -0
  150. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/node_utils.py +0 -0
  151. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/node_webapp.py +0 -0
  152. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/snode_app.py +0 -0
  153. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/snode_app_k8s.py +0 -0
  154. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/delete.py +0 -0
  155. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/deploy.py +0 -0
  156. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  157. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  158. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/is_up.py +0 -0
  159. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/list_deps.py +0 -0
  160. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/rpac.yaml +0 -0
  161. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/static/tst.py +0 -0
  162. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/templates/caching_deploy_spdk.yaml.j2 +0 -0
  163. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/templates/storage_deploy_spdk.yaml.j2 +0 -0
  164. {sbcli_dev-6.2.2 → sbcli_dev-6.2.3}/simplyblock_web/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-dev
3
- Version: 6.2.2
3
+ Version: 6.2.3
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -1,5 +1,5 @@
1
1
  SIMPLY_BLOCK_COMMAND_NAME=sbcli-dev
2
- SIMPLY_BLOCK_VERSION=6.2.2
2
+ SIMPLY_BLOCK_VERSION=6.2.3
3
3
 
4
4
  SIMPLY_BLOCK_DOCKER_IMAGE=simplyblock/simplyblock:main
5
5
  DOCKER_USER=hamdysimplyblock
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-dev
3
- Version: 6.2.2
3
+ Version: 6.2.3
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -1,5 +1,4 @@
1
1
  # coding=utf-8
2
- import datetime
3
2
  import json
4
3
  import logging
5
4
  import time
@@ -123,8 +122,7 @@ def list_tasks(cluster_id, is_json=False):
123
122
  "Retry": retry,
124
123
  "Status": task.status,
125
124
  "Result": task.function_result,
126
- "Updated At": datetime.datetime.strptime(task.updated_at, "%Y-%m-%d %H:%M:%S.%f").strftime(
127
- "%H:%M:%S, %d/%m/%Y"),
125
+ "Updated at": time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(task.updated_at)),
128
126
  })
129
127
  return utils.print_table(data)
130
128
 
@@ -6,6 +6,7 @@ import time
6
6
 
7
7
  from simplyblock_core import constants
8
8
  from simplyblock_core.models.caching_node import CachingNode
9
+ from simplyblock_core.models.cluster import ClusterMap
9
10
 
10
11
  from simplyblock_core.models.cluster import Cluster
11
12
  from simplyblock_core.models.deployer import Deployer
@@ -80,6 +81,10 @@ class DBController:
80
81
  def clear_prefix(self, prefix):
81
82
  self.kv_store.db.clear_range_startswith(prefix)
82
83
 
84
+ def get_cluster_map(self):
85
+ cmap = ClusterMap().read_from_db(self.kv_store)
86
+ return cmap[0] if cmap else None
87
+
83
88
  def get_storage_nodes(self):
84
89
  ret = StorageNode().read_from_db(self.kv_store)
85
90
  ret = sorted(ret, key=lambda x: x.create_dt)
@@ -6,30 +6,23 @@ from typing import Mapping
6
6
 
7
7
 
8
8
  class BaseModel(object):
9
-
10
- id: str = ""
11
- uuid: str = ""
12
- name: str = ""
13
- status: str = ""
14
- deleted: bool = False
15
- updated_at: str = ""
16
- create_dt: str= ""
17
- remove_dt: str= ""
18
-
19
- _attribute_map = {}
20
-
21
- def __init__(self, data=None):
22
- self.name = self.__class__.__name__
23
- self.set_attrs(data)
9
+ def __init__(self):
10
+ self._attribute_map = {
11
+ "id": {"type": str, "default": ""},
12
+ "name": {"type": str, "default": self.__class__.__name__},
13
+ "object_type": {"type": str, "default": ""},
14
+ "deleted": {"type": bool, 'default': False},
15
+ "updated_at": {"type": str, 'default': ""},
16
+ "create_dt": {"type": str, 'default': ""},
17
+ "remove_dt": {"type": str, 'default': ""},
18
+ }
19
+ self.set_attrs({}, {})
24
20
 
25
21
  def get_id(self):
26
- return self.uuid
22
+ return self.id
27
23
 
28
- def set_attrs(self, data):
29
- self._attribute_map = {}
30
- for s in self.__dir__():
31
- if not s.startswith("_"):
32
- self._attribute_map[s]= {"type": getattr(self, s).__class__, "default": getattr(self, s)}
24
+ def set_attrs(self, attributes, data):
25
+ self._attribute_map.update(attributes)
33
26
  self.from_dict(data)
34
27
 
35
28
  def from_dict(self, data):
@@ -96,7 +89,7 @@ class BaseModel(object):
96
89
  def read_from_db(self, kv_store, id="", limit=0, reverse=False):
97
90
  try:
98
91
  objects = []
99
- prefix = "%s/%s/%s" % (self.create_dt.replace(" ", ""), self.name, id)
92
+ prefix = "%s/%s/%s" % (self.object_type, self.name, id)
100
93
  for k, v in kv_store.db.get_range_startswith(prefix.encode('utf-8'), limit=limit, reverse=reverse):
101
94
  objects.append(self.__class__().from_dict(json.loads(v)))
102
95
  return objects
@@ -143,43 +136,3 @@ class BaseModel(object):
143
136
  if isinstance(item, str) and item in self._attribute_map:
144
137
  return getattr(self, item)
145
138
  return False
146
-
147
-
148
- class BaseNodeObject(BaseModel):
149
-
150
- STATUS_ONLINE = 'online'
151
- STATUS_OFFLINE = 'offline'
152
- STATUS_SUSPENDED = 'suspended'
153
- STATUS_IN_SHUTDOWN = 'in_shutdown'
154
- STATUS_REMOVED = 'removed'
155
- STATUS_RESTARTING = 'in_restart'
156
-
157
- STATUS_IN_CREATION = 'in_creation'
158
- STATUS_UNREACHABLE = 'unreachable'
159
- STATUS_SCHEDULABLE = 'schedulable'
160
-
161
- STATUS_CODE_MAP = {
162
- STATUS_ONLINE: 0,
163
- STATUS_OFFLINE: 1,
164
- STATUS_SUSPENDED: 2,
165
- STATUS_REMOVED: 3,
166
-
167
- STATUS_IN_CREATION: 10,
168
- STATUS_IN_SHUTDOWN: 11,
169
- STATUS_RESTARTING: 12,
170
-
171
- STATUS_UNREACHABLE: 20,
172
-
173
- STATUS_SCHEDULABLE: 30,
174
- }
175
-
176
- def get_status_code(self):
177
- if self.status in self.STATUS_CODE_MAP:
178
- return self.STATUS_CODE_MAP[self.status]
179
- else:
180
- return -1
181
-
182
- def get_clean_dict(self):
183
- data = super(BaseNodeObject, self).get_clean_dict()
184
- data['status_code'] = self.get_status_code()
185
- return data
@@ -0,0 +1,109 @@
1
+ # coding=utf-8
2
+
3
+ from datetime import datetime
4
+ from typing import List
5
+
6
+ from simplyblock_core.models.base_model import BaseModel
7
+ from simplyblock_core.models.iface import IFace
8
+ from simplyblock_core.models.lvol_model import LVol
9
+ from simplyblock_core.models.nvme_device import NVMeDevice
10
+
11
+
12
+ class CachedLVol(BaseModel):
13
+
14
+ attributes = {
15
+ "uuid": {"type": str, 'default': ""},
16
+ "lvol_id": {"type": str, 'default': ""},
17
+ "lvol": {"type": LVol, 'default': None},
18
+ "hostname": {"type": str, 'default': ""},
19
+ "local_nqn": {"type": str, 'default': ""},
20
+ "ocf_bdev": {"type": str, 'default': ""},
21
+ "device_path": {"type": str, 'default': ""},
22
+ }
23
+
24
+ def __init__(self, data=None):
25
+ super(CachedLVol, self).__init__()
26
+ self.set_attrs(self.attributes, data)
27
+ self.object_type = "object"
28
+
29
+ def get_id(self):
30
+ return self.uuid
31
+
32
+
33
+ class CachingNode(BaseModel):
34
+
35
+ STATUS_ONLINE = 'online'
36
+ STATUS_OFFLINE = 'offline'
37
+ STATUS_SUSPENDED = 'suspended'
38
+ STATUS_IN_CREATION = 'in_creation'
39
+ STATUS_IN_SHUTDOWN = 'in_shutdown'
40
+ STATUS_RESTARTING = 'restarting'
41
+ STATUS_UNREACHABLE = 'unreachable'
42
+ STATUS_REMOVED = 'removed'
43
+
44
+ STATUS_CODE_MAP = {
45
+ STATUS_ONLINE: 0,
46
+ STATUS_OFFLINE: 1,
47
+ STATUS_SUSPENDED: 2,
48
+ STATUS_REMOVED: 3,
49
+
50
+ STATUS_IN_CREATION: 10,
51
+ STATUS_IN_SHUTDOWN: 11,
52
+ STATUS_RESTARTING: 12,
53
+
54
+ STATUS_UNREACHABLE: 20,
55
+ }
56
+
57
+ attributes = {
58
+ "uuid": {"type": str, 'default': ""},
59
+ "baseboard_sn": {"type": str, 'default': ""},
60
+ "system_uuid": {"type": str, 'default': ""},
61
+ "hostname": {"type": str, 'default': ""},
62
+ "host_nqn": {"type": str, 'default': ""},
63
+ "subsystem": {"type": str, 'default': ""},
64
+ "nvme_devices": {"type": List[NVMeDevice], 'default': []},
65
+ "sequential_number": {"type": int, 'default': 0},
66
+ "partitions_count": {"type": int, 'default': 0},
67
+ "ib_devices": {"type": List[IFace], 'default': []},
68
+ "status": {"type": str, 'default': "in_creation"},
69
+ "updated_at": {"type": str, 'default': str(datetime.now())},
70
+ "create_dt": {"type": str, 'default': str(datetime.now())},
71
+ "remove_dt": {"type": str, 'default': str(datetime.now())},
72
+ "mgmt_ip": {"type": str, 'default': ""},
73
+ "rpc_port": {"type": int, 'default': -1},
74
+ "rpc_username": {"type": str, 'default': ""},
75
+ "rpc_password": {"type": str, 'default': ""},
76
+ "data_nics": {"type": List[IFace], 'default': []},
77
+ "lvols": {"type": List[CachedLVol], 'default': []},
78
+ "node_lvs": {"type": str, 'default': "lvs"},
79
+ "services": {"type": List[str], 'default': []},
80
+ "cluster_id": {"type": str, 'default': ""},
81
+ "api_endpoint": {"type": str, 'default': ""},
82
+ "remote_devices": {"type": List[NVMeDevice], 'default': []},
83
+ "host_secret": {"type": str, "default": ""},
84
+ "ctrl_secret": {"type": str, "default": ""},
85
+
86
+ "cache_bdev": {"type": str, "default": ""},
87
+ "cache_size": {"type": int, "default": 0},
88
+ "cache_split_factor": {"type": int, "default": 0},
89
+ "cpu": {"type": int, "default": 0},
90
+ "cpu_hz": {"type": int, "default": 0},
91
+ "memory": {"type": int, "default": 0},
92
+ "hugepages": {"type": int, "default": 0},
93
+ "multipathing": {"type": bool, "default": True},
94
+
95
+ }
96
+
97
+ def __init__(self, data=None):
98
+ super(CachingNode, self).__init__()
99
+ self.set_attrs(self.attributes, data)
100
+ self.object_type = "object"
101
+
102
+ def get_id(self):
103
+ return self.uuid
104
+
105
+ def get_status_code(self):
106
+ if self.status in self.STATUS_CODE_MAP:
107
+ return self.STATUS_CODE_MAP[self.status]
108
+ else:
109
+ return -1
@@ -0,0 +1,107 @@
1
+ # coding=utf-8
2
+
3
+ from typing import Mapping, List
4
+
5
+ from simplyblock_core.models.base_model import BaseModel
6
+ from simplyblock_core.models.storage_node import StorageNode
7
+
8
+
9
+ class Cluster(BaseModel):
10
+
11
+ STATUS_ACTIVE = "active"
12
+ STATUS_READONLY = 'read_only'
13
+ STATUS_INACTIVE = "inactive"
14
+ STATUS_SUSPENDED = "suspended"
15
+ STATUS_DEGRADED = "degraded"
16
+ STATUS_UNREADY = "unready"
17
+ STATUS_IN_ACTIVATION = "in_activation"
18
+
19
+ STATUS_CODE_MAP = {
20
+ STATUS_ACTIVE: 1,
21
+ STATUS_INACTIVE: 2,
22
+ STATUS_READONLY: 3,
23
+
24
+ STATUS_SUSPENDED: 10,
25
+ STATUS_DEGRADED: 11,
26
+
27
+ }
28
+ attributes = {
29
+ "uuid": {"type": str, 'default': ""},
30
+ "blk_size": {"type": int, 'default': 0},
31
+ "page_size_in_blocks": {"type": int, 'default': 2097152},
32
+ "model_ids": {"type": List[str], "default": []},
33
+ "ha_type": {"type": str, 'default': "single"},
34
+ "tls": {"type": bool, 'default': False},
35
+ "auth_hosts_only": {"type": bool, 'default': False},
36
+ "nqn": {"type": str, 'default': ""},
37
+ "iscsi": {"type": str, 'default': ""},
38
+ "dhchap": {"type": str, "default": ""},
39
+ "cli_pass": {"type": str, "default": ""},
40
+ "db_connection": {"type": str, "default": ""},
41
+ "distr_ndcs": {"type": int, 'default': 0},
42
+ "distr_npcs": {"type": int, 'default': 0},
43
+ "distr_bs": {"type": int, 'default': 0},
44
+ "distr_chunk_bs": {"type": int, 'default': 0},
45
+ "cluster_max_size": {"type": int, 'default': 0},
46
+ "cluster_max_devices": {"type": int, 'default': 0},
47
+ "cluster_max_nodes": {"type": int, 'default': 0},
48
+
49
+ ## cluster-level: cap-warn ( % ), cap-crit ( % ), prov-cap-warn ( % ), prov-cap-crit. ( % )
50
+ "cap_warn": {"type": int, "default": 80},
51
+ "cap_crit": {"type": int, "default": 90},
52
+ "prov_cap_warn": {"type": int, "default": 180},
53
+ "prov_cap_crit": {"type": int, "default": 190},
54
+
55
+ "qpair_count": {"type": int, "default": 6},
56
+
57
+ "secret": {"type": str, "default": ""},
58
+ "grafana_secret": {"type": str, "default": ""},
59
+ "status": {"type": str, "default": ""},
60
+ "updated_at": {"type": str, "default": ""},
61
+ "grafana_endpoint": {"type": str, "default": ""},
62
+ "enable_node_affinity": {"type": bool, 'default': False},
63
+ "max_queue_size": {"type": int, "default": 128},
64
+ "inflight_io_threshold": {"type": int, "default": 4},
65
+ "enable_qos": {"type": bool, 'default': False},
66
+ "strict_node_anti_affinity": {"type": bool, 'default': False},
67
+ }
68
+
69
+ def __init__(self, data=None):
70
+ super(Cluster, self).__init__()
71
+ self.set_attrs(self.attributes, data)
72
+ self.object_type = "object"
73
+
74
+ def get_id(self):
75
+ return self.uuid
76
+
77
+ def get_status_code(self):
78
+ if self.status in self.STATUS_CODE_MAP:
79
+ return self.STATUS_CODE_MAP[self.status]
80
+ else:
81
+ return -1
82
+
83
+ def get_clean_dict(self):
84
+ data = super(Cluster, self).get_clean_dict()
85
+ data['status_code'] = self.get_status_code()
86
+ return data
87
+
88
+
89
+ class ClusterMap(BaseModel):
90
+
91
+ attributes = {
92
+ "partitions_count": {"type": int, 'default': 0},
93
+ "nodes": {"type": Mapping[str, StorageNode], 'default': {}},
94
+ }
95
+
96
+ def __init__(self, data=None):
97
+ super(ClusterMap, self).__init__()
98
+ self.set_attrs(self.attributes, data)
99
+ self.object_type = "object"
100
+
101
+ def get_id(self):
102
+ return "0"
103
+
104
+ def recalculate_partitions(self):
105
+ self.partitions_count = 0
106
+ for node_id in self.nodes:
107
+ self.partitions_count += self.nodes[node_id].partitions_count
@@ -0,0 +1,60 @@
1
+ # coding=utf-8
2
+ from datetime import datetime
3
+
4
+ from simplyblock_core.models.base_model import BaseModel
5
+
6
+
7
+ class EventObj(BaseModel):
8
+ LEVEL_DEBUG = "Debug"
9
+ LEVEL_INFO = "Info"
10
+ LEVEL_WARN = "Warning"
11
+ LEVEL_CRITICAL = "Critical"
12
+ LEVEL_ERROR = "Error"
13
+
14
+ """
15
+ uuid:
16
+ cluster_uuid: 1234
17
+ event: STATUS_CHANGE
18
+ domain: Cluster, Management, Storage
19
+ object_name: cluster,
20
+ object_dict:
21
+ caused_by: CLI, API, MONITOR
22
+ message:
23
+ meta_data:
24
+ date:
25
+ """
26
+ attributes = {
27
+ "uuid": {"type": str, 'default': ""},
28
+ "cluster_uuid": {"type": str, 'default': ""},
29
+ "node_id": {"type": str, 'default': ""},
30
+ "date": {"type": int, 'default': 0}, # in milliseconds
31
+
32
+ "event_level": {"type": str, 'default': LEVEL_INFO},
33
+
34
+ "event": {"type": str, 'default': ""},
35
+ "domain": {"type": str, 'default': ""},
36
+ "object_name": {"type": str, 'default': ""},
37
+ "object_dict": {"type": dict, 'default': {}},
38
+ "caused_by": {"type": str, 'default': ""},
39
+ "message": {"type": str, 'default': ""},
40
+ "storage_id": {"type": int, 'default': -1},
41
+ "vuid": {"type": int, 'default': -1},
42
+ "meta_data": {"type": str, 'default': ""},
43
+ "status": {"type": str, 'default': ""},
44
+ "count": {"type": int, 'default': 1},
45
+
46
+ }
47
+
48
+ def __init__(self, data=None):
49
+ super(EventObj, self).__init__()
50
+ self.set_attrs(self.attributes, data)
51
+ self.object_type = "object"
52
+
53
+ def get_id(self):
54
+ return "%s/%s/%s" % (self.cluster_uuid, self.date, self.uuid)
55
+
56
+ def get_date_string(self):
57
+ if self.date > 1e10:
58
+ return str(datetime.fromtimestamp(self.date/1000))[:23]
59
+ else:
60
+ return str(datetime.fromtimestamp(self.date))[:23]
@@ -0,0 +1,30 @@
1
+ # coding=utf-8
2
+
3
+ from simplyblock_core.models.base_model import BaseModel
4
+
5
+
6
+ class IFace(BaseModel):
7
+
8
+ attributes = {
9
+ "uuid": {"type": str, 'default': ""},
10
+ "if_name": {"type": str, 'default': ""},
11
+ "ip4_address": {"type": str, 'default': ""},
12
+ "port_number": {"type": int, 'default': -1},
13
+ "net_type": {"type": str, 'default': ""},
14
+ "status": {"type": str, 'default': ""},
15
+ }
16
+
17
+ def __init__(self, data=None):
18
+ super(IFace, self).__init__()
19
+ self.set_attrs(self.attributes, data)
20
+ self.object_type = "object"
21
+
22
+ def get_id(self):
23
+ return self.uuid
24
+
25
+ def get_transport_type(self):
26
+ if self.net_type == 'ether':
27
+ return "TCP"
28
+ if self.net_type == 'ib':
29
+ return "RDMA"
30
+ return "TCP"
@@ -0,0 +1,52 @@
1
+ # coding=utf-8
2
+ import datetime
3
+ import time
4
+
5
+ from simplyblock_core.models.base_model import BaseModel
6
+
7
+
8
+ class JobSchedule(BaseModel):
9
+
10
+ STATUS_NEW = 'new'
11
+ STATUS_RUNNING = 'running'
12
+ STATUS_SUSPENDED = 'suspended'
13
+ STATUS_DONE = 'done'
14
+
15
+ FN_DEV_RESTART = "device_restart"
16
+ FN_NODE_RESTART = "node_restart"
17
+ FN_DEV_MIG = "device_migration"
18
+ FN_FAILED_DEV_MIG = "failed_device_migration"
19
+ FN_NEW_DEV_MIG = "new_device_migration"
20
+ FN_NODE_ADD = "node_add"
21
+
22
+ attributes = {
23
+ "uuid": {"type": str, 'default': ""},
24
+ "cluster_id": {"type": str, 'default': ""},
25
+ "node_id": {"type": str, 'default': ""},
26
+ "device_id": {"type": str, 'default': ""},
27
+ "date": {"type": int, 'default': 0},
28
+
29
+ "canceled": {"type": bool, 'default': False},
30
+
31
+ "function_name": {"type": str, 'default': ""},
32
+ "function_params": {"type": dict, 'default': {}},
33
+ "function_result": {"type": str, 'default': ""},
34
+
35
+ "retry": {"type": int, 'default': 0},
36
+ "max_retry": {"type": int, 'default': -1},
37
+ "status": {"type": str, 'default': ""},
38
+ "updated_at": {"type": int, 'default': 0},
39
+
40
+ }
41
+
42
+ def __init__(self, data=None):
43
+ super(JobSchedule, self).__init__()
44
+ self.set_attrs(self.attributes, data)
45
+ self.object_type = "object"
46
+
47
+ def get_id(self):
48
+ return "%s/%s/%s" % (self.cluster_id, self.date, self.uuid)
49
+
50
+ def write_to_db(self, kv_store=None):
51
+ self.updated_at = int(time.time())
52
+ super().write_to_db(kv_store)
@@ -0,0 +1,97 @@
1
+ # coding=utf-8
2
+
3
+ from typing import List
4
+
5
+ from simplyblock_core.models.base_model import BaseModel
6
+ from simplyblock_core.models.nvme_device import NVMeDevice
7
+
8
+
9
+ class LVol(BaseModel):
10
+
11
+ STATUS_ONLINE = 'online'
12
+ STATUS_OFFLINE = 'offline'
13
+ STATUS_IN_DELETION = 'in_deletion'
14
+
15
+ STATUS_CODE_MAP = {
16
+ STATUS_ONLINE: 1,
17
+ STATUS_OFFLINE: 2,
18
+ STATUS_IN_DELETION: 3,
19
+ }
20
+
21
+ attributes = {
22
+ "lvol_name": {"type": str, 'default': ""},
23
+ "size": {"type": int, 'default': 0},
24
+ "max_size": {"type": int, 'default': 0},
25
+ "uuid": {"type": str, 'default': ""},
26
+ "guid": {"type": str, 'default': ""},
27
+ "ha_type": {"type": str, 'default': ""},
28
+ "status": {"type": str, 'default': ""},
29
+
30
+ "base_bdev": {"type": str, 'default': ""},
31
+ "lvol_bdev": {"type": str, 'default': ""},
32
+ "lvs_name": {"type": str, 'default': ""},
33
+ "comp_bdev": {"type": str, 'default': ""},
34
+ "crypto_bdev": {"type": str, 'default': ""},
35
+ "top_bdev": {"type": str, 'default': ""},
36
+
37
+ "nvme_dev": {"type": NVMeDevice, 'default': None},
38
+ "pool_uuid": {"type": str, 'default': ""},
39
+ "hostname": {"type": str, 'default': ""},
40
+ "node_id": {"type": str, 'default': ""},
41
+ "nodes": {"type": List[str], 'default': []},
42
+
43
+ "mode": {"type": str, 'default': "read-write"},
44
+ "lvol_type": {"type": str, 'default': "lvol"}, # lvol, compressed, crypto, dedup
45
+ "bdev_stack": {"type": List, 'default': []},
46
+
47
+ "crypto_key_name": {"type": str, 'default': ""},
48
+ "crypto_key1": {"type": str, 'default': ""},
49
+ "crypto_key2": {"type": str, 'default': ""},
50
+
51
+ "rw_ios_per_sec": {"type": int, 'default': 0},
52
+ "rw_mbytes_per_sec": {"type": int, 'default': 0},
53
+ "r_mbytes_per_sec": {"type": int, 'default': 0},
54
+ "w_mbytes_per_sec": {"type": int, 'default': 0},
55
+
56
+ "cloned_from_snap": {"type": str, 'default': ""},
57
+
58
+ "nqn": {"type": str, 'default': ""},
59
+ "vuid": {"type": int, 'default': 0},
60
+ "ndcs": {"type": int, 'default': 0},
61
+ "npcs": {"type": int, 'default': 0},
62
+ "distr_bs": {"type": int, 'default': 0},
63
+ "distr_chunk_bs": {"type": int, 'default': 0},
64
+ "distr_page_size": {"type": int, 'default': 0},
65
+
66
+ "health_check": {"type": bool, "default": True},
67
+
68
+ "snapshot_name": {"type": str, 'default': ""},
69
+ "mem_diff": {"type": dict, 'default': {}},
70
+ "io_error": {"type": bool, 'default': False},
71
+
72
+ "deletion_status": {"type": str, 'default': ""},
73
+ "lvol_priority_class": {"type": int, 'default': 0},
74
+ "blobid": {"type": int, 'default': 0},
75
+ "lvol_uuid": {"type": str, 'default': ""},
76
+ "cluster_size": {"type": int, 'default': 0},
77
+
78
+ }
79
+
80
+ def __init__(self, data=None):
81
+ super(LVol, self).__init__()
82
+ self.set_attrs(self.attributes, data)
83
+ self.object_type = "object"
84
+
85
+ def get_id(self):
86
+ return self.uuid
87
+
88
+ def get_status_code(self):
89
+ if self.status in self.STATUS_CODE_MAP:
90
+ return self.STATUS_CODE_MAP[self.status]
91
+ else:
92
+ return -1
93
+
94
+ def get_clean_dict(self):
95
+ data = super(LVol, self).get_clean_dict()
96
+ data['status_code'] = self.get_status_code()
97
+ return data
@@ -0,0 +1,54 @@
1
+ # coding=utf-8
2
+
3
+ from datetime import datetime
4
+
5
+ from simplyblock_core.models.base_model import BaseModel
6
+
7
+
8
+ class MgmtNode(BaseModel):
9
+
10
+ STATUS_ONLINE = 'online'
11
+ STATUS_OFFLINE = 'offline'
12
+ STATUS_SUSPENDED = 'suspended'
13
+ STATUS_IN_CREATION = 'in_creation'
14
+ STATUS_IN_SHUTDOWN = 'in_shutdown'
15
+ STATUS_RESTARTING = 'restarting'
16
+ STATUS_UNREACHABLE = 'unreachable'
17
+
18
+ STATUS_CODE_MAP = {
19
+ STATUS_ONLINE: 0,
20
+ STATUS_OFFLINE: 1,
21
+ STATUS_SUSPENDED: 2,
22
+
23
+ STATUS_IN_CREATION: 10,
24
+ STATUS_IN_SHUTDOWN: 11,
25
+ STATUS_RESTARTING: 12,
26
+
27
+ STATUS_UNREACHABLE: 20,
28
+
29
+ }
30
+ attributes = {
31
+ "baseboard_sn": {"type": str, 'default': ""},
32
+ "uuid": {"type": str, 'default': ""},
33
+ "hostname": {"type": str, 'default': ""},
34
+ "status": {"type": str, 'default': ""},
35
+ "docker_ip_port": {"type": str, 'default': ""},
36
+ "cluster_id": {"type": str, 'default': ""},
37
+ "mgmt_ip": {"type": str, 'default': ""},
38
+ "updated_at": {"type": str, 'default': str(datetime.now())},
39
+
40
+ }
41
+
42
+ def __init__(self, data=None):
43
+ super(MgmtNode, self).__init__()
44
+ self.set_attrs(self.attributes, data)
45
+ self.object_type = "object"
46
+
47
+ def get_id(self):
48
+ return self.uuid
49
+
50
+ def get_status_code(self):
51
+ if self.status in self.STATUS_CODE_MAP:
52
+ return self.STATUS_CODE_MAP[self.status]
53
+ else:
54
+ return -1