sbcli-pre 1.0.3__zip → 1.0.5__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/PKG-INFO +1 -1
  2. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/env_var +1 -1
  3. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/sbcli_pre.egg-info/PKG-INFO +1 -1
  4. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_cli/cli.py +2 -25
  5. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/cluster_ops.py +1 -179
  6. sbcli_pre-1.0.5/simplyblock_core/mgmt_node_ops.py +201 -0
  7. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/web_api_pool.py +6 -3
  8. sbcli_pre-1.0.3/simplyblock_core/mgmt_node_ops.py +0 -80
  9. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/README.md +0 -0
  10. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/pyproject.toml +0 -0
  11. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/sbcli_pre.egg-info/SOURCES.txt +0 -0
  12. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/sbcli_pre.egg-info/dependency_links.txt +0 -0
  13. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/sbcli_pre.egg-info/entry_points.txt +0 -0
  14. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/sbcli_pre.egg-info/requires.txt +0 -0
  15. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/sbcli_pre.egg-info/top_level.txt +0 -0
  16. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/setup.cfg +0 -0
  17. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/setup.py +0 -0
  18. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_cli/main.py +0 -0
  19. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/__init__.py +0 -0
  20. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/cnode_client.py +0 -0
  21. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/compute_node_ops.py +0 -0
  22. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/constants.py +0 -0
  23. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/__init__.py +0 -0
  24. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/caching_node_controller.py +0 -0
  25. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/cluster_events.py +0 -0
  26. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/device_controller.py +0 -0
  27. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/device_events.py +0 -0
  28. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/events_controller.py +0 -0
  29. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/health_controller.py +0 -0
  30. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/lvol_controller.py +0 -0
  31. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/lvol_events.py +0 -0
  32. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/mgmt_events.py +0 -0
  33. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/pool_controller.py +0 -0
  34. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/pool_events.py +0 -0
  35. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/snapshot_controller.py +0 -0
  36. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/snapshot_events.py +0 -0
  37. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/storage_events.py +0 -0
  38. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/tasks_controller.py +0 -0
  39. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/controllers/tasks_events.py +0 -0
  40. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/distr_controller.py +0 -0
  41. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/kv_store.py +0 -0
  42. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/__init__.py +0 -0
  43. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/base_model.py +0 -0
  44. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/caching_node.py +0 -0
  45. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/cluster.py +0 -0
  46. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/compute_node.py +0 -0
  47. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/events.py +0 -0
  48. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/global_settings.py +0 -0
  49. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/iface.py +0 -0
  50. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/job_schedule.py +0 -0
  51. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/lvol_model.py +0 -0
  52. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/mgmt_node.py +0 -0
  53. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/nvme_device.py +0 -0
  54. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/pool.py +0 -0
  55. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/port_stat.py +0 -0
  56. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/snapshot.py +0 -0
  57. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/stats.py +0 -0
  58. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/models/storage_node.py +0 -0
  59. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/pci_utils.py +0 -0
  60. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/rpc_client.py +0 -0
  61. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/__init__.py +0 -0
  62. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/alerting/alert_resources.yaml +0 -0
  63. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/alerting/alert_rules.yaml +0 -0
  64. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/clean_local_storage_deploy.sh +0 -0
  65. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/config_docker.sh +0 -0
  66. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/dashboards/cluster.json +0 -0
  67. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/dashboards/devices.json +0 -0
  68. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/dashboards/lvols.json +0 -0
  69. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/dashboards/node-exporter.json +0 -0
  70. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/dashboards/nodes.json +0 -0
  71. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/dashboards/pools.json +0 -0
  72. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/datasource.yml +0 -0
  73. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/db_config_double.sh +0 -0
  74. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/db_config_single.sh +0 -0
  75. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/deploy_stack.sh +0 -0
  76. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/docker-compose-swarm-monitoring.yml +0 -0
  77. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/docker-compose-swarm.yml +0 -0
  78. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/haproxy.cfg +0 -0
  79. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/install_deps.sh +0 -0
  80. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/prometheus.yml +0 -0
  81. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/run_ssh.sh +0 -0
  82. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/set_db_config.sh +0 -0
  83. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/scripts/stack_deploy_wait.sh +0 -0
  84. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/__init__.py +0 -0
  85. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/caching_node_monitor.py +0 -0
  86. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/cap_monitor.py +0 -0
  87. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/capacity_and_stats_collector.py +0 -0
  88. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/device_monitor.py +0 -0
  89. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/distr_event_collector.py +0 -0
  90. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/health_check_service.py +0 -0
  91. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/install_service.sh +0 -0
  92. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/log_agg_service.py +0 -0
  93. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/lvol_monitor.py +0 -0
  94. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/lvol_stat_collector.py +0 -0
  95. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/mgmt_node_monitor.py +0 -0
  96. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/port_stat_collector.py +0 -0
  97. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/remove_service.sh +0 -0
  98. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/service_template.service +0 -0
  99. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/storage_node_monitor.py +0 -0
  100. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/tasks_runner_migration.py +0 -0
  101. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/services/tasks_runner_restart.py +0 -0
  102. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/shell_utils.py +0 -0
  103. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/snode_client.py +0 -0
  104. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/storage_node_ops.py +0 -0
  105. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_core/utils.py +0 -0
  106. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/__init__.py +0 -0
  107. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/app.py +0 -0
  108. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/auth_middleware.py +0 -0
  109. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/__init__.py +0 -0
  110. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/caching_node_ops.py +0 -0
  111. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/caching_node_ops_k8s.py +0 -0
  112. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/node_api_basic.py +0 -0
  113. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/node_api_caching_docker.py +0 -0
  114. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/node_api_caching_ks.py +0 -0
  115. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/snode_ops.py +0 -0
  116. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/web_api_caching_node.py +0 -0
  117. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/web_api_cluster.py +0 -0
  118. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/web_api_device.py +0 -0
  119. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/web_api_lvol.py +0 -0
  120. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/web_api_mgmt_node.py +0 -0
  121. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/web_api_snapshot.py +0 -0
  122. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/blueprints/web_api_storage_node.py +0 -0
  123. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/caching_node_app.py +0 -0
  124. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/caching_node_app_k8s.py +0 -0
  125. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/node_utils.py +0 -0
  126. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/node_webapp.py +0 -0
  127. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/snode_app.py +0 -0
  128. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/static/delete.py +0 -0
  129. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/static/deploy.py +0 -0
  130. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/static/deploy_cnode.yaml +0 -0
  131. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/static/deploy_spdk.yaml +0 -0
  132. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/static/is_up.py +0 -0
  133. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/static/list_deps.py +0 -0
  134. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/static/rpac.yaml +0 -0
  135. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/static/tst.py +0 -0
  136. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/templates/deploy_spdk.yaml.j2 +0 -0
  137. {sbcli_pre-1.0.3 → sbcli_pre-1.0.5}/simplyblock_web/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-pre
3
- Version: 1.0.3
3
+ Version: 1.0.5
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-pre
2
- SIMPLY_BLOCK_VERSION=1.0.3
2
+ SIMPLY_BLOCK_VERSION=1.0.5
3
3
 
4
4
  SIMPLY_BLOCK_DOCKER_IMAGE=simplyblock/simplyblock:pre-release
5
5
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sbcli-pre
3
- Version: 1.0.3
3
+ Version: 1.0.5
4
4
  Summary: CLI for managing SimplyBlock cluster
5
5
  Home-page: https://www.simplyblock.io/
6
6
  Author: Hamdy
@@ -472,7 +472,7 @@ class CLIWrapper:
472
472
  # mgmt-node ops
473
473
  subparser = self.add_command('mgmt', 'Management node commands')
474
474
 
475
- sub_command = self.add_sub_command(subparser, 'add', 'Add Management node to the cluster')
475
+ sub_command = self.add_sub_command(subparser, 'add', 'Add Management node to the cluster (local run)')
476
476
  sub_command.add_argument("cluster_ip", help='the cluster IP address')
477
477
  sub_command.add_argument("cluster_id", help='the cluster UUID')
478
478
  sub_command.add_argument("ifname", help='Management interface name')
@@ -823,8 +823,6 @@ class CLIWrapper:
823
823
  sub_command = args_dict[args.command]
824
824
  if sub_command == 'create':
825
825
  ret = self.cluster_create(args)
826
- elif sub_command == 'join':
827
- ret = self.cluster_join(args)
828
826
  elif sub_command == 'add':
829
827
  ret = self.cluster_add(args)
830
828
  elif sub_command == 'status':
@@ -990,7 +988,7 @@ class CLIWrapper:
990
988
  cluster_id = args.cluster_id
991
989
  cluster_ip = args.cluster_ip
992
990
  ifname = args.ifname
993
- ret = cluster_ops.join_cluster(cluster_ip, cluster_id, "management", ifname, [], None, None)
991
+ ret = mgmt_ops.deploy_mgmt_node(cluster_ip, cluster_id, ifname)
994
992
  elif sub_command == "list":
995
993
  ret = mgmt_ops.list_mgmt_nodes(args.json)
996
994
  elif sub_command == "remove":
@@ -1174,27 +1172,6 @@ class CLIWrapper:
1174
1172
  CLI_PASS, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit,
1175
1173
  ifname, log_del_interval, metrics_retention_period)
1176
1174
 
1177
- def cluster_join(self, args):
1178
- cluster_id = args.cluster_id
1179
- cluster_ip = args.cluster_ip
1180
- role = args.role
1181
- ifname = args.ifname
1182
- data_nics = args.data_nics
1183
- spdk_cpu_mask = None
1184
- if args.spdk_cpu_mask:
1185
- if self.validate_cpu_mask(args.spdk_cpu_mask):
1186
- spdk_cpu_mask = args.spdk_cpu_mask
1187
- else:
1188
- return f"Invalid cpu mask value: {args.spdk_cpu_mask}"
1189
-
1190
- spdk_mem = None
1191
- if args.spdk_mem:
1192
- spdk_mem = self.parse_size(args.spdk_mem)
1193
- if spdk_mem < 1 * 1024 * 1024:
1194
- return f"SPDK memory:{args.spdk_mem} must be larger than 1G"
1195
-
1196
- return cluster_ops.join_cluster(cluster_ip, cluster_id, role, ifname, data_nics, spdk_cpu_mask, spdk_mem)
1197
-
1198
1175
  def query_yes_no(self, question, default="yes"):
1199
1176
  """Ask a yes/no question via raw_input() and return their answer.
1200
1177
 
@@ -1,7 +1,6 @@
1
1
  # coding=utf-8
2
2
  import json
3
3
  import logging
4
- import math
5
4
  import os
6
5
  import time
7
6
  import uuid
@@ -9,7 +8,7 @@ import uuid
9
8
  import docker
10
9
  import requests
11
10
 
12
- from simplyblock_core import utils, scripts, constants, mgmt_node_ops, storage_node_ops, shell_utils
11
+ from simplyblock_core import utils, scripts, constants, mgmt_node_ops, storage_node_ops
13
12
  from simplyblock_core.controllers import cluster_events, device_controller
14
13
  from simplyblock_core.kv_store import DBController
15
14
  from simplyblock_core.models.cluster import Cluster
@@ -199,183 +198,6 @@ def deploy_spdk(node_docker, spdk_cpu_mask, spdk_mem):
199
198
  break
200
199
 
201
200
 
202
- def join_cluster(cluster_ip, cluster_id, role, ifname, data_nics, spdk_cpu_mask, spdk_mem): # role: ["management", "storage"]
203
-
204
- if role not in ["management", "storage", "storage-alloc"]:
205
- logger.error(f"Unknown role: {role}")
206
- return False
207
-
208
- try:
209
- resp = requests.get(f"http://{cluster_ip}/cluster/{cluster_id}")
210
- resp_json = resp.json()
211
- cluster_data = resp_json['results'][0]
212
- logger.info(f"Cluster found! NQN:{cluster_data['nqn']}")
213
- logger.debug(cluster_data)
214
- except Exception as e:
215
- logger.error("Error getting cluster data!")
216
- logger.error(e)
217
- return ""
218
-
219
- logger.info("Installing dependencies...")
220
- ret = scripts.install_deps()
221
- logger.info("Installing dependencies > Done")
222
-
223
- if not ifname:
224
- ifname = "eth0"
225
-
226
- DEV_IP = utils.get_iface_ip(ifname)
227
- if not DEV_IP:
228
- logger.error(f"Error getting interface ip: {ifname}")
229
- return False
230
-
231
- logger.info(f"Node IP: {DEV_IP}")
232
- ret = scripts.configure_docker(DEV_IP)
233
-
234
- db_connection = cluster_data['db_connection']
235
- ret = scripts.set_db_config(db_connection)
236
-
237
- if role == "storage":
238
- logger.info("Deploying SPDK")
239
- node_cpu_count = os.cpu_count()
240
- if spdk_cpu_mask:
241
- requested_cpu_count = len(format(int(spdk_cpu_mask, 16), 'b'))
242
- if requested_cpu_count > node_cpu_count:
243
- logger.error(f"The requested cpu count: {requested_cpu_count} "
244
- f"is larger than the node's cpu count: {node_cpu_count}")
245
- return False
246
- else:
247
- spdk_cpu_mask = hex(int(math.pow(2, node_cpu_count))-1)
248
- if spdk_mem:
249
- spdk_mem = int(spdk_mem/(1024*1024))
250
- else:
251
- spdk_mem = 4096
252
- node_docker = docker.DockerClient(base_url=f"tcp://{DEV_IP}:2375", version="auto", timeout=60*5)
253
- deploy_spdk(node_docker, spdk_cpu_mask, spdk_mem)
254
- time.sleep(5)
255
-
256
- logger.info("Joining docker swarm...")
257
- db_controller = DBController()
258
- nodes = db_controller.get_mgmt_nodes(cluster_id=cluster_id)
259
- if not nodes:
260
- logger.error("No mgmt nodes was found in the cluster!")
261
- exit(1)
262
-
263
- try:
264
- cluster_docker = utils.get_docker_client(cluster_id)
265
- docker_ip = cluster_docker.info()["Swarm"]["NodeAddr"]
266
-
267
- if role == 'management':
268
- join_token = cluster_docker.swarm.attrs['JoinTokens']['Manager']
269
- else:
270
- join_token = cluster_docker.swarm.attrs['JoinTokens']['Worker']
271
-
272
- node_docker = docker.DockerClient(base_url=f"tcp://{DEV_IP}:2375", version="auto")
273
- if node_docker.info()["Swarm"]["LocalNodeState"] == "active":
274
- logger.info("Node is part of another swarm, leaving swarm")
275
- try:
276
- cluster_docker.nodes.get(node_docker.info()["Swarm"]["NodeID"]).remove(force=True)
277
- except:
278
- pass
279
- node_docker.swarm.leave(force=True)
280
- time.sleep(5)
281
- node_docker.swarm.join([f"{docker_ip}:2377"], join_token)
282
-
283
- retries = 10
284
- while retries > 0:
285
- if node_docker.info()["Swarm"]["LocalNodeState"] == "active":
286
- break
287
- logger.info("Waiting for node to be active...")
288
- retries -= 1
289
- time.sleep(2)
290
- logger.info("Joining docker swarm > Done")
291
- time.sleep(5)
292
-
293
- except Exception as e:
294
- raise e
295
-
296
- if role == 'management':
297
- mgmt_node_ops.add_mgmt_node(DEV_IP, cluster_id)
298
- cluster_obj = db_controller.get_cluster_by_id(cluster_id)
299
- nodes = db_controller.get_mgmt_nodes(cluster_id=cluster_id)
300
- if len(nodes) >= 3:
301
- logger.info("Waiting for FDB container to be active...")
302
- fdb_cont = None
303
- retries = 30
304
- while retries > 0 and fdb_cont is None:
305
- logger.info("Looking for FDB container...")
306
- for cont in node_docker.containers.list(all=True):
307
- logger.debug(cont.attrs['Name'])
308
- if cont.attrs['Name'].startswith("/app_fdb"):
309
- fdb_cont = cont
310
- break
311
- if fdb_cont:
312
- logger.info("FDB container found")
313
- break
314
- else:
315
- retries -= 1
316
- time.sleep(5)
317
-
318
- if not fdb_cont:
319
- logger.warning("FDB container was not found")
320
- else:
321
- retries = 10
322
- while retries > 0:
323
- info = node_docker.containers.get(fdb_cont.attrs['Id'])
324
- status = info.attrs['State']["Status"]
325
- is_running = info.attrs['State']["Running"]
326
- if not is_running:
327
- logger.info("Container is not running, waiting...")
328
- time.sleep(3)
329
- retries -= 1
330
- else:
331
- logger.info(f"Container status: {status}, Is Running: {is_running}")
332
- break
333
-
334
- logger.info("Configuring Double DB...")
335
- time.sleep(3)
336
- out = scripts.set_db_config_double()
337
- cluster_obj.ha_type = "ha"
338
- cluster_obj.write_to_db(db_controller.kv_store)
339
- logger.info("Configuring DB > Done")
340
-
341
- elif role == "storage":
342
- # add storage node
343
- fdb_cont = None
344
- retries = 30
345
- while retries > 0 and fdb_cont is None:
346
- logger.info("Looking for SpdkAppProxy container...")
347
- for cont in node_docker.containers.list(all=True):
348
- logger.debug(cont.attrs['Name'])
349
- if cont.attrs['Name'].startswith("/app_SpdkAppProxy"):
350
- fdb_cont = cont
351
- break
352
- if fdb_cont:
353
- logger.info("SpdkAppProxy container found")
354
- break
355
- else:
356
- retries -= 1
357
- time.sleep(5)
358
-
359
- if not fdb_cont:
360
- logger.warning("SpdkAppProxy container was not found")
361
- else:
362
- retries = 10
363
- while retries > 0:
364
- info = node_docker.containers.get(fdb_cont.attrs['Id'])
365
- status = info.attrs['State']["Status"]
366
- is_running = info.attrs['State']["Running"]
367
- if not is_running:
368
- logger.info("Container is not running, waiting...")
369
- time.sleep(3)
370
- retries -= 1
371
- else:
372
- logger.info(f"Container status: {status}, Is Running: {is_running}")
373
- break
374
- storage_node_ops.add_storage_node(cluster_id, ifname, data_nics)
375
-
376
- logger.info("Node joined the cluster")
377
-
378
-
379
201
  def add_cluster(blk_size, page_size_in_blocks, cap_warn, cap_crit, prov_cap_warn, prov_cap_crit):
380
202
  db_controller = DBController()
381
203
  clusters = db_controller.get_clusters()
@@ -0,0 +1,201 @@
1
+ # coding=utf-8
2
+ import json
3
+ import logging
4
+ import uuid
5
+ import time
6
+ import requests
7
+
8
+ import docker
9
+
10
+ from simplyblock_core import utils, scripts
11
+ from simplyblock_core.controllers import mgmt_events
12
+ from simplyblock_core.kv_store import DBController
13
+ from simplyblock_core.models.mgmt_node import MgmtNode
14
+
15
+
16
+ logger = logging.getLogger()
17
+
18
+
19
+ def deploy_mgmt_node(cluster_ip, cluster_id, ifname):
20
+
21
+ try:
22
+ resp = requests.get(f"http://{cluster_ip}/cluster/{cluster_id}")
23
+ resp_json = resp.json()
24
+ cluster_data = resp_json['results'][0]
25
+ logger.info(f"Cluster found! NQN:{cluster_data['nqn']}")
26
+ logger.debug(cluster_data)
27
+ except Exception as e:
28
+ logger.error("Error getting cluster data!")
29
+ logger.error(e)
30
+ return ""
31
+
32
+ logger.info("Installing dependencies...")
33
+ scripts.install_deps()
34
+ logger.info("Installing dependencies > Done")
35
+
36
+ if not ifname:
37
+ ifname = "eth0"
38
+
39
+ DEV_IP = utils.get_iface_ip(ifname)
40
+ if not DEV_IP:
41
+ logger.error(f"Error getting interface ip: {ifname}")
42
+ return False
43
+
44
+ logger.info(f"Node IP: {DEV_IP}")
45
+ ret = scripts.configure_docker(DEV_IP)
46
+
47
+ db_connection = cluster_data['db_connection']
48
+ ret = scripts.set_db_config(db_connection)
49
+
50
+
51
+ logger.info("Joining docker swarm...")
52
+ db_controller = DBController()
53
+ nodes = db_controller.get_mgmt_nodes(cluster_id=cluster_id)
54
+ if not nodes:
55
+ logger.error("No mgmt nodes was found in the cluster!")
56
+ exit(1)
57
+
58
+ try:
59
+ cluster_docker = utils.get_docker_client(cluster_id)
60
+ docker_ip = cluster_docker.info()["Swarm"]["NodeAddr"]
61
+ join_token = cluster_docker.swarm.attrs['JoinTokens']['Manager']
62
+ node_docker = docker.DockerClient(base_url=f"tcp://{DEV_IP}:2375", version="auto")
63
+ if node_docker.info()["Swarm"]["LocalNodeState"] == "active":
64
+ logger.info("Node is part of another swarm, leaving swarm")
65
+ try:
66
+ cluster_docker.nodes.get(node_docker.info()["Swarm"]["NodeID"]).remove(force=True)
67
+ except:
68
+ pass
69
+ node_docker.swarm.leave(force=True)
70
+ time.sleep(5)
71
+
72
+ node_docker.swarm.join([f"{docker_ip}:2377"], join_token)
73
+
74
+ retries = 10
75
+ while retries > 0:
76
+ if node_docker.info()["Swarm"]["LocalNodeState"] == "active":
77
+ break
78
+ logger.info("Waiting for node to be active...")
79
+ retries -= 1
80
+ time.sleep(2)
81
+ logger.info("Joining docker swarm > Done")
82
+ time.sleep(5)
83
+
84
+ except Exception as e:
85
+ raise e
86
+
87
+ logger.info("Adding management node object")
88
+ add_mgmt_node(DEV_IP, cluster_id)
89
+
90
+ # check if ha setting is required
91
+ nodes = db_controller.get_mgmt_nodes(cluster_id=cluster_id)
92
+ if len(nodes) >= 3:
93
+ logger.info("Waiting for FDB container to be active...")
94
+ fdb_cont = None
95
+ retries = 30
96
+ while retries > 0 and fdb_cont is None:
97
+ logger.info("Looking for FDB container...")
98
+ for cont in node_docker.containers.list(all=True):
99
+ logger.debug(cont.attrs['Name'])
100
+ if cont.attrs['Name'].startswith("/app_fdb"):
101
+ fdb_cont = cont
102
+ break
103
+ if fdb_cont:
104
+ logger.info("FDB container found")
105
+ break
106
+ else:
107
+ retries -= 1
108
+ time.sleep(5)
109
+
110
+ if not fdb_cont:
111
+ logger.warning("FDB container was not found")
112
+ else:
113
+ retries = 10
114
+ while retries > 0:
115
+ info = node_docker.containers.get(fdb_cont.attrs['Id'])
116
+ status = info.attrs['State']["Status"]
117
+ is_running = info.attrs['State']["Running"]
118
+ if not is_running:
119
+ logger.info("Container is not running, waiting...")
120
+ time.sleep(3)
121
+ retries -= 1
122
+ else:
123
+ logger.info(f"Container status: {status}, Is Running: {is_running}")
124
+ break
125
+
126
+ logger.info("Configuring Double DB...")
127
+ time.sleep(3)
128
+ scripts.set_db_config_double()
129
+ for cl in db_controller.get_clusters():
130
+ cl.ha_type = "ha"
131
+ cl.write_to_db(db_controller.kv_store)
132
+
133
+ logger.info("Node joined the cluster")
134
+ return True
135
+
136
+
137
+ def add_mgmt_node(mgmt_ip, cluster_id=None):
138
+ db_controller = DBController()
139
+ hostname = utils.get_hostname()
140
+ node = db_controller.get_mgmt_node_by_hostname(hostname)
141
+ if node:
142
+ logger.error("Node already exists in the cluster")
143
+ return False
144
+
145
+ node = MgmtNode()
146
+ node.uuid = str(uuid.uuid4())
147
+ node.hostname = hostname
148
+ node.docker_ip_port = f"{mgmt_ip}:2375"
149
+ node.cluster_id = cluster_id
150
+ node.mgmt_ip = mgmt_ip
151
+ node.status = MgmtNode.STATUS_ONLINE
152
+ node.write_to_db(db_controller.kv_store)
153
+
154
+ mgmt_events.mgmt_add(node)
155
+ logger.info("Done")
156
+ return True
157
+
158
+
159
+ def list_mgmt_nodes(is_json):
160
+ db_controller = DBController()
161
+ nodes = db_controller.get_mgmt_nodes()
162
+ data = []
163
+ output = ""
164
+
165
+ for node in nodes:
166
+ logging.debug(node)
167
+ logging.debug("*" * 20)
168
+ data.append({
169
+ "UUID": node.get_id(),
170
+ "Hostname": node.hostname,
171
+ "IP": node.mgmt_ip,
172
+ "Status": node.status,
173
+ })
174
+
175
+ if not data:
176
+ return output
177
+
178
+ if is_json:
179
+ output = json.dumps(data, indent=2)
180
+ else:
181
+ output = utils.print_table(data)
182
+ return output
183
+
184
+
185
+ def remove_mgmt_node(uuid):
186
+ db_controller = DBController()
187
+ snode = db_controller.get_mgmt_node_by_id(uuid)
188
+ if not snode:
189
+ logger.error("can not find node")
190
+ return False
191
+
192
+ logging.info("Removing mgmt node")
193
+ snode.remove(db_controller.kv_store)
194
+
195
+ logger.info("Leaving swarm...")
196
+ node_docker = docker.DockerClient(base_url=f"tcp://{snode.docker_ip_port}", version="auto")
197
+ node_docker.swarm.leave()
198
+
199
+ mgmt_events.mgmt_remove(snode)
200
+ logging.info("done")
201
+
@@ -17,15 +17,18 @@ bp = Blueprint("pool", __name__)
17
17
  db_controller = kv_store.DBController()
18
18
 
19
19
 
20
- @bp.route('/pool', defaults={'uuid': None}, methods=['GET'])
21
- @bp.route('/pool/<string:uuid>', methods=['GET'])
22
- def list_pools(uuid):
20
+ @bp.route('/pool', defaults={'uuid': None, "cluster_id": None}, methods=['GET'])
21
+ @bp.route('/pool/<string:uuid>', defaults={"cluster_id": None}, methods=['GET'])
22
+ @bp.route('/pool/cluster_id/<string:cluster_id>', defaults={'uuid': None,}, methods=['GET'])
23
+ def list_pools(uuid, cluster_id):
23
24
  if uuid:
24
25
  pool = db_controller.get_pool_by_id(uuid)
25
26
  if pool:
26
27
  pools = [pool]
27
28
  else:
28
29
  return utils.get_response_error(f"Pool not found: {uuid}", 404)
30
+ elif cluster_id:
31
+ pools = db_controller.get_pools(cluster_id)
29
32
  else:
30
33
  pools = db_controller.get_pools()
31
34
  data = []
@@ -1,80 +0,0 @@
1
- # coding=utf-8
2
- import json
3
- import logging
4
- import uuid
5
-
6
- import docker
7
-
8
- from simplyblock_core import utils
9
- from simplyblock_core.controllers import mgmt_events
10
- from simplyblock_core.kv_store import DBController
11
- from simplyblock_core.models.mgmt_node import MgmtNode
12
-
13
- logger = logging.getLogger()
14
-
15
-
16
- def add_mgmt_node(mgmt_ip, cluster_id=None):
17
- db_controller = DBController()
18
- hostname = utils.get_hostname()
19
- node = db_controller.get_mgmt_node_by_hostname(hostname)
20
- if node:
21
- logger.error("Node already exists in the cluster")
22
- return False
23
-
24
- node = MgmtNode()
25
- node.uuid = str(uuid.uuid4())
26
- node.hostname = hostname
27
- node.docker_ip_port = f"{mgmt_ip}:2375"
28
- node.cluster_id = cluster_id
29
- node.mgmt_ip = mgmt_ip
30
- node.status = MgmtNode.STATUS_ONLINE
31
- node.write_to_db(db_controller.kv_store)
32
-
33
- mgmt_events.mgmt_add(node)
34
- logger.info("Done")
35
- return True
36
-
37
-
38
- def list_mgmt_nodes(is_json):
39
- db_controller = DBController()
40
- nodes = db_controller.get_mgmt_nodes()
41
- data = []
42
- output = ""
43
-
44
- for node in nodes:
45
- logging.debug(node)
46
- logging.debug("*" * 20)
47
- data.append({
48
- "UUID": node.get_id(),
49
- "Hostname": node.hostname,
50
- "IP": node.mgmt_ip,
51
- "Status": node.status,
52
- })
53
-
54
- if not data:
55
- return output
56
-
57
- if is_json:
58
- output = json.dumps(data, indent=2)
59
- else:
60
- output = utils.print_table(data)
61
- return output
62
-
63
-
64
- def remove_mgmt_node(uuid):
65
- db_controller = DBController()
66
- snode = db_controller.get_mgmt_node_by_id(uuid)
67
- if not snode:
68
- logger.error("can not find node")
69
- return False
70
-
71
- logging.info("Removing mgmt node")
72
- snode.remove(db_controller.kv_store)
73
-
74
- logger.info("Leaving swarm...")
75
- node_docker = docker.DockerClient(base_url=f"tcp://{snode.docker_ip_port}", version="auto")
76
- node_docker.swarm.leave()
77
-
78
- mgmt_events.mgmt_remove(snode)
79
- logging.info("done")
80
-
File without changes
File without changes
File without changes
File without changes