osi-dump 0.1.2__tar.gz → 0.1.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/PKG-INFO +1 -1
  2. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/pyproject.toml +1 -1
  3. osi_dump-0.1.2.2/src/osi_dump/api/octavia.py +34 -0
  4. osi_dump-0.1.2.2/src/osi_dump/batch_handler/flavor_batch_handler.py +51 -0
  5. osi_dump-0.1.2.2/src/osi_dump/batch_handler/image_batch_handler.py +51 -0
  6. osi_dump-0.1.2.2/src/osi_dump/batch_handler/load_balancer_batch_handler.py +59 -0
  7. osi_dump-0.1.2.2/src/osi_dump/batch_handler/role_assignment_batch_handler.py +61 -0
  8. osi_dump-0.1.2.2/src/osi_dump/batch_handler/router_batch_handler.py +49 -0
  9. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/cli.py +71 -0
  10. osi_dump-0.1.2.2/src/osi_dump/exporter/flavor/excel_flavor_exporter.py +30 -0
  11. osi_dump-0.1.2.2/src/osi_dump/exporter/flavor/flavor_exporter.py +7 -0
  12. osi_dump-0.1.2.2/src/osi_dump/exporter/image/excel_image_exporter.py +28 -0
  13. osi_dump-0.1.2.2/src/osi_dump/exporter/image/image_exporter.py +7 -0
  14. osi_dump-0.1.2.2/src/osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +35 -0
  15. osi_dump-0.1.2.2/src/osi_dump/exporter/load_balancer/load_balancer_exporter.py +7 -0
  16. osi_dump-0.1.2.2/src/osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +35 -0
  17. osi_dump-0.1.2.2/src/osi_dump/exporter/role_assignment/role_assignment_exporter.py +7 -0
  18. osi_dump-0.1.2.2/src/osi_dump/exporter/router/excel_router_exporter.py +30 -0
  19. osi_dump-0.1.2.2/src/osi_dump/exporter/router/router_exporter.py +7 -0
  20. osi_dump-0.1.2.2/src/osi_dump/importer/flavor/flavor_importer.py +9 -0
  21. osi_dump-0.1.2.2/src/osi_dump/importer/flavor/openstack_flavor_importer.py +64 -0
  22. osi_dump-0.1.2.2/src/osi_dump/importer/hypervisor/__init__.py +0 -0
  23. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +10 -1
  24. osi_dump-0.1.2.2/src/osi_dump/importer/image/__init__.py +0 -0
  25. osi_dump-0.1.2.2/src/osi_dump/importer/image/image_importer.py +9 -0
  26. osi_dump-0.1.2.2/src/osi_dump/importer/image/openstack_image_importer.py +77 -0
  27. osi_dump-0.1.2.2/src/osi_dump/importer/instance/__init__.py +0 -0
  28. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/instance/openstack_instance_importer.py +1 -0
  29. osi_dump-0.1.2.2/src/osi_dump/importer/load_balancer/__init__.py +0 -0
  30. osi_dump-0.1.2.2/src/osi_dump/importer/load_balancer/load_balancer_importer.py +9 -0
  31. osi_dump-0.1.2.2/src/osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +72 -0
  32. osi_dump-0.1.2.2/src/osi_dump/importer/project/__init__.py +0 -0
  33. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/project/openstack_project_importer.py +6 -6
  34. osi_dump-0.1.2.2/src/osi_dump/importer/role_assignment/__init__.py +0 -0
  35. osi_dump-0.1.2.2/src/osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +100 -0
  36. osi_dump-0.1.2.2/src/osi_dump/importer/role_assignment/role_assignment_importer.py +9 -0
  37. osi_dump-0.1.2.2/src/osi_dump/importer/router/__init__.py +0 -0
  38. osi_dump-0.1.2.2/src/osi_dump/importer/router/openstack_router_importer.py +86 -0
  39. osi_dump-0.1.2.2/src/osi_dump/importer/router/router_importer.py +9 -0
  40. osi_dump-0.1.2.2/src/osi_dump/importer/volume/__init__.py +0 -0
  41. osi_dump-0.1.2.2/src/osi_dump/model/__init__.py +0 -0
  42. osi_dump-0.1.2.2/src/osi_dump/model/flavor.py +20 -0
  43. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/hypervisor.py +2 -0
  44. osi_dump-0.1.2.2/src/osi_dump/model/image.py +26 -0
  45. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/instance.py +1 -0
  46. osi_dump-0.1.2.2/src/osi_dump/model/load_balancer.py +17 -0
  47. osi_dump-0.1.2.2/src/osi_dump/model/role_assignment.py +17 -0
  48. osi_dump-0.1.2.2/src/osi_dump/model/router.py +20 -0
  49. osi_dump-0.1.2.2/src/osi_dump/os_connection/__init__.py +0 -0
  50. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/__init__.py +1 -0
  51. osi_dump-0.1.2.2/src/osi_dump/util/panda_excel.py +22 -0
  52. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/PKG-INFO +1 -1
  53. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/SOURCES.txt +42 -0
  54. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/README.md +0 -0
  55. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/setup.cfg +0 -0
  56. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/__init__.py +0 -0
  57. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/__main__.py +0 -0
  58. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/api/__init__.py +0 -0
  59. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/api/placement.py +0 -0
  60. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/__init__.py +0 -0
  61. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/floating_ip_batch_handler.py +0 -0
  62. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/hypervisor_batch_handler.py +0 -0
  63. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/instance_batch_handler.py +0 -0
  64. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/project_batch_handler.py +0 -0
  65. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/volume_batch_handler.py +0 -0
  66. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/__init__.py +0 -0
  67. {osi_dump-0.1.2/src/osi_dump/exporter/floating_ip → osi_dump-0.1.2.2/src/osi_dump/exporter/flavor}/__init__.py +0 -0
  68. {osi_dump-0.1.2/src/osi_dump/exporter/hypervisor → osi_dump-0.1.2.2/src/osi_dump/exporter/floating_ip}/__init__.py +0 -0
  69. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +0 -0
  70. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +0 -0
  71. {osi_dump-0.1.2/src/osi_dump/exporter/instance → osi_dump-0.1.2.2/src/osi_dump/exporter/hypervisor}/__init__.py +0 -0
  72. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +0 -0
  73. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +0 -0
  74. {osi_dump-0.1.2/src/osi_dump/exporter/project → osi_dump-0.1.2.2/src/osi_dump/exporter/image}/__init__.py +0 -0
  75. {osi_dump-0.1.2/src/osi_dump/exporter/volume → osi_dump-0.1.2.2/src/osi_dump/exporter/instance}/__init__.py +0 -0
  76. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/instance/excel_instance_exporter.py +0 -0
  77. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/instance/instance_exporter.py +0 -0
  78. {osi_dump-0.1.2/src/osi_dump/importer/floating_ip → osi_dump-0.1.2.2/src/osi_dump/exporter/load_balancer}/__init__.py +0 -0
  79. {osi_dump-0.1.2/src/osi_dump/importer/hypervisor → osi_dump-0.1.2.2/src/osi_dump/exporter/project}/__init__.py +0 -0
  80. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/project/excel_project_exporter.py +0 -0
  81. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/project/project_exporter.py +0 -0
  82. {osi_dump-0.1.2/src/osi_dump/importer/instance → osi_dump-0.1.2.2/src/osi_dump/exporter/role_assignment}/__init__.py +0 -0
  83. {osi_dump-0.1.2/src/osi_dump/importer/project → osi_dump-0.1.2.2/src/osi_dump/exporter/router}/__init__.py +0 -0
  84. {osi_dump-0.1.2/src/osi_dump/importer → osi_dump-0.1.2.2/src/osi_dump/exporter}/volume/__init__.py +0 -0
  85. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/volume/excel_volume_exporter.py +0 -0
  86. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/volume/volume_exporter.py +0 -0
  87. {osi_dump-0.1.2/src/osi_dump/model → osi_dump-0.1.2.2/src/osi_dump/importer/flavor}/__init__.py +0 -0
  88. {osi_dump-0.1.2/src/osi_dump/os_connection → osi_dump-0.1.2.2/src/osi_dump/importer/floating_ip}/__init__.py +0 -0
  89. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/floating_ip/floating_ip_importer.py +0 -0
  90. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +0 -0
  91. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/hypervisor/hypervisor_importer.py +0 -0
  92. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/instance/instance_importer.py +0 -0
  93. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/project/project_importer.py +0 -0
  94. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/volume/openstack_volume_importer.py +0 -0
  95. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/volume/volume_importer.py +0 -0
  96. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/authentication_info.py +0 -0
  97. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/floating_ip.py +0 -0
  98. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/project.py +0 -0
  99. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/volume.py +0 -0
  100. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/os_connection/get_connections.py +0 -0
  101. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/create_file.py +0 -0
  102. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/excel_autosize_column.py +0 -0
  103. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/excel_sort_sheet.py +0 -0
  104. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/export_data_excel.py +0 -0
  105. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/extract_hostname.py +0 -0
  106. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/validate_dir_path.py +0 -0
  107. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/dependency_links.txt +0 -0
  108. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/entry_points.txt +0 -0
  109. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/requires.txt +0 -0
  110. {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osi-dump
3
- Version: 0.1.2
3
+ Version: 0.1.2.2
4
4
  Summary: OpenStack instances information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "osi-dump"
3
- version = "0.1.2"
3
+ version = "0.1.2.2"
4
4
  description = "OpenStack instances information dump tool"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "TVKain" }]
@@ -0,0 +1,34 @@
1
+ from openstack.connection import Connection
2
+ from openstack.identity.v3.service import Service
3
+ from openstack.load_balancer.v2.load_balancer import LoadBalancer
4
+
5
+
6
+ def get_load_balancers(connection: Connection) -> list[LoadBalancer]:
7
+ octavia_endpoint = connection.endpoint_for(
8
+ service_type="load-balancer", interface="public"
9
+ )
10
+
11
+ url = f"{octavia_endpoint}/v2.0/lbaas/loadbalancers"
12
+
13
+ response = connection.session.get(url)
14
+
15
+ data = response.json()
16
+
17
+ return data["loadbalancers"]
18
+
19
+
20
+ def get_amphoraes(connection: Connection, load_balancer_id: str) -> list[str]:
21
+
22
+ octavia_endpoint = connection.endpoint_for(
23
+ service_type="load-balancer", interface="public"
24
+ )
25
+
26
+ url = f"{octavia_endpoint}/v2/octavia/amphorae?load_balancer_id={load_balancer_id}&fields=id&fields=compute_id"
27
+
28
+ response = connection.session.get(url)
29
+
30
+ data = response.json()
31
+
32
+ amphoraes = data["amphorae"]
33
+
34
+ return [amphorae["compute_id"] for amphorae in amphoraes]
@@ -0,0 +1,51 @@
1
+ import logging
2
+
3
+ from openstack.connection import Connection
4
+
5
+ from osi_dump.exporter.flavor.flavor_exporter import FlavorExporter
6
+ from osi_dump.exporter.flavor.excel_flavor_exporter import (
7
+ ExcelFlavorExporter,
8
+ )
9
+
10
+ from osi_dump.importer.flavor.flavor_importer import FlavorImporter
11
+ from osi_dump.importer.flavor.openstack_flavor_importer import (
12
+ OpenStackFlavorImporter,
13
+ )
14
+
15
+
16
+ from osi_dump import util
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ class FlavorBatchHandler:
22
+ def __init__(self):
23
+ self._importer_exporter_list: list[tuple[FlavorImporter, FlavorExporter]] = []
24
+
25
+ def add_importer_exporter_from_openstack_connections(
26
+ self, connections: list[Connection], output_file: str
27
+ ):
28
+ for connection in connections:
29
+ importer = OpenStackFlavorImporter(connection)
30
+
31
+ sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-flavor"
32
+ exporter = ExcelFlavorExporter(
33
+ sheet_name=sheet_name, output_file=output_file
34
+ )
35
+
36
+ self.add_importer_exporter(importer=importer, exporter=exporter)
37
+
38
+ def add_importer_exporter(self, importer: FlavorImporter, exporter: FlavorExporter):
39
+ self._importer_exporter_list.append((importer, exporter))
40
+
41
+ def process(self):
42
+
43
+ for importer, exporter in self._importer_exporter_list:
44
+ try:
45
+
46
+ flavors = importer.import_flavors()
47
+
48
+ exporter.export_flavors(flavors=flavors)
49
+ except Exception as e:
50
+ logger.warning(e)
51
+ logger.warning("Skipping...")
@@ -0,0 +1,51 @@
1
+ import logging
2
+
3
+ from openstack.connection import Connection
4
+
5
+ from osi_dump.exporter.image.image_exporter import ImageExporter
6
+ from osi_dump.exporter.image.excel_image_exporter import (
7
+ ExcelImageExporter,
8
+ )
9
+
10
+ from osi_dump.importer.image.image_importer import ImageImporter
11
+ from osi_dump.importer.image.openstack_image_importer import (
12
+ OpenStackImageImporter,
13
+ )
14
+
15
+
16
+ from osi_dump import util
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ class ImageBatchHandler:
22
+ def __init__(self):
23
+ self._importer_exporter_list: list[tuple[ImageImporter, ImageExporter]] = []
24
+
25
+ def add_importer_exporter_from_openstack_connections(
26
+ self, connections: list[Connection], output_file: str
27
+ ):
28
+ for connection in connections:
29
+ importer = OpenStackImageImporter(connection)
30
+
31
+ sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-image"
32
+ exporter = ExcelImageExporter(
33
+ sheet_name=sheet_name, output_file=output_file
34
+ )
35
+
36
+ self.add_importer_exporter(importer=importer, exporter=exporter)
37
+
38
+ def add_importer_exporter(self, importer: ImageImporter, exporter: ImageExporter):
39
+ self._importer_exporter_list.append((importer, exporter))
40
+
41
+ def process(self):
42
+
43
+ for importer, exporter in self._importer_exporter_list:
44
+ try:
45
+
46
+ images = importer.import_images()
47
+
48
+ exporter.export_images(images=images)
49
+ except Exception as e:
50
+ logger.warning(e)
51
+ logger.warning("Skipping...")
@@ -0,0 +1,59 @@
1
+ import logging
2
+
3
+ from openstack.connection import Connection
4
+
5
+ from osi_dump.exporter.load_balancer.load_balancer_exporter import (
6
+ LoadBalancerExporter,
7
+ )
8
+ from osi_dump.exporter.load_balancer.excel_load_balancer_exporter import (
9
+ ExcelLoadBalancerExporter,
10
+ )
11
+
12
+ from osi_dump.importer.load_balancer.load_balancer_importer import (
13
+ LoadBalancerImporter,
14
+ )
15
+ from osi_dump.importer.load_balancer.openstack_load_balancer_importer import (
16
+ OpenStackLoadBalancerImporter,
17
+ )
18
+
19
+
20
+ from osi_dump import util
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ class LoadBalancerBatchHandler:
26
+ def __init__(self):
27
+ self._importer_exporter_list: list[
28
+ tuple[LoadBalancerImporter, LoadBalancerExporter]
29
+ ] = []
30
+
31
+ def add_importer_exporter_from_openstack_connections(
32
+ self, connections: list[Connection], output_file: str
33
+ ):
34
+ for connection in connections:
35
+ importer = OpenStackLoadBalancerImporter(connection)
36
+
37
+ sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-lb"
38
+ exporter = ExcelLoadBalancerExporter(
39
+ sheet_name=sheet_name, output_file=output_file
40
+ )
41
+
42
+ self.add_importer_exporter(importer=importer, exporter=exporter)
43
+
44
+ def add_importer_exporter(
45
+ self, importer: LoadBalancerImporter, exporter: LoadBalancerExporter
46
+ ):
47
+ self._importer_exporter_list.append((importer, exporter))
48
+
49
+ def process(self):
50
+
51
+ for importer, exporter in self._importer_exporter_list:
52
+ try:
53
+
54
+ load_balancers = importer.import_load_balancers()
55
+
56
+ exporter.export_load_balancers(load_balancers=load_balancers)
57
+ except Exception as e:
58
+ logger.warning(e)
59
+ logger.warning("Skipping...")
@@ -0,0 +1,61 @@
1
+ import logging
2
+
3
+ from openstack.connection import Connection
4
+
5
+ from osi_dump.exporter.role_assignment.role_assignment_exporter import (
6
+ RoleAssignmentExporter,
7
+ )
8
+ from osi_dump.exporter.role_assignment.excel_role_assignment_exporter import (
9
+ ExcelRoleAssignmentExporter,
10
+ )
11
+
12
+ from osi_dump.importer.role_assignment.role_assignment_importer import (
13
+ RoleAssignmentImporter,
14
+ )
15
+ from osi_dump.importer.role_assignment.openstack_role_assignment_importer import (
16
+ OpenStackRoleAssignmentImporter,
17
+ )
18
+
19
+
20
+ from osi_dump import util
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ class RoleAssignmentBatchHandler:
26
+ def __init__(self):
27
+ self._importer_exporter_list: list[
28
+ tuple[RoleAssignmentImporter, RoleAssignmentExporter]
29
+ ] = []
30
+
31
+ def add_importer_exporter_from_openstack_connections(
32
+ self, connections: list[Connection], output_file: str
33
+ ):
34
+ for connection in connections:
35
+ importer = OpenStackRoleAssignmentImporter(connection)
36
+
37
+ sheet_name = (
38
+ f"{util.extract_hostname(connection.auth['auth_url'])}-role_ass"
39
+ )
40
+ exporter = ExcelRoleAssignmentExporter(
41
+ sheet_name=sheet_name, output_file=output_file
42
+ )
43
+
44
+ self.add_importer_exporter(importer=importer, exporter=exporter)
45
+
46
+ def add_importer_exporter(
47
+ self, importer: RoleAssignmentImporter, exporter: RoleAssignmentExporter
48
+ ):
49
+ self._importer_exporter_list.append((importer, exporter))
50
+
51
+ def process(self):
52
+
53
+ for importer, exporter in self._importer_exporter_list:
54
+ try:
55
+
56
+ role_assignments = importer.import_role_assignments()
57
+
58
+ exporter.export_role_assignments(role_assignments=role_assignments)
59
+ except Exception as e:
60
+ logger.warning(e)
61
+ logger.warning("Skipping...")
@@ -0,0 +1,49 @@
1
+ import logging
2
+
3
+ from openstack.connection import Connection
4
+
5
+ from osi_dump.exporter.router.router_exporter import (
6
+ RouterExporter,
7
+ )
8
+ from osi_dump.exporter.router.excel_router_exporter import ExcelRouterExporter
9
+
10
+ from osi_dump.importer.router.router_importer import RouterImporter
11
+ from osi_dump.importer.router.openstack_router_importer import (
12
+ OpenStackRouterImporter,
13
+ )
14
+
15
+
16
+ from osi_dump import util
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ class RouterBatchHandler:
22
+ def __init__(self):
23
+ self._importer_exporter_list: list[tuple[RouterImporter, RouterExporter]] = []
24
+
25
+ def add_importer_exporter_from_openstack_connections(
26
+ self, connections: list[Connection], output_file: str
27
+ ):
28
+ for connection in connections:
29
+ importer = OpenStackRouterImporter(connection)
30
+
31
+ sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-router"
32
+ exporter = ExcelRouterExporter(
33
+ sheet_name=sheet_name, output_file=output_file
34
+ )
35
+
36
+ self.add_importer_exporter(importer=importer, exporter=exporter)
37
+
38
+ def add_importer_exporter(self, importer: RouterImporter, exporter: RouterExporter):
39
+ self._importer_exporter_list.append((importer, exporter))
40
+
41
+ def process(self):
42
+ for importer, exporter in self._importer_exporter_list:
43
+ try:
44
+ routers = importer.import_routers()
45
+
46
+ exporter.export_routers(routers=routers)
47
+ except Exception as e:
48
+ logger.warning(e)
49
+ logger.warning("Skipping...")
@@ -8,9 +8,17 @@ import typer
8
8
 
9
9
  from typing_extensions import Annotated
10
10
 
11
+ from osi_dump.batch_handler.load_balancer_batch_handler import LoadBalancerBatchHandler
12
+ from osi_dump.batch_handler.role_assignment_batch_handler import (
13
+ RoleAssignmentBatchHandler,
14
+ )
15
+ from osi_dump.batch_handler.router_batch_handler import RouterBatchHandler
16
+
11
17
  app = typer.Typer()
12
18
 
13
19
 
20
+ from osi_dump.batch_handler.flavor_batch_handler import FlavorBatchHandler
21
+ from osi_dump.batch_handler.image_batch_handler import ImageBatchHandler
14
22
  from osi_dump.batch_handler.volume_batch_handler import VolumeBatchHandler
15
23
  from osi_dump.os_connection.get_connections import get_connections
16
24
 
@@ -76,6 +84,56 @@ def _hypervisor(connections, output_path: str):
76
84
  hypervisor_batch_handler.process()
77
85
 
78
86
 
87
+ def _image(connections, output_path: str):
88
+ image_batch_handler = ImageBatchHandler()
89
+
90
+ image_batch_handler.add_importer_exporter_from_openstack_connections(
91
+ connections, output_file=output_path
92
+ )
93
+
94
+ image_batch_handler.process()
95
+
96
+
97
+ def _flavor(connections, output_path: str):
98
+ flavor_batch_handler = FlavorBatchHandler()
99
+
100
+ flavor_batch_handler.add_importer_exporter_from_openstack_connections(
101
+ connections, output_file=output_path
102
+ )
103
+
104
+ flavor_batch_handler.process()
105
+
106
+
107
+ def _role_assignment(connections, output_path: str):
108
+ _role_assignment_batch_handler = RoleAssignmentBatchHandler()
109
+
110
+ _role_assignment_batch_handler.add_importer_exporter_from_openstack_connections(
111
+ connections, output_file=output_path
112
+ )
113
+
114
+ _role_assignment_batch_handler.process()
115
+
116
+
117
+ def _load_balancer(connections, output_path: str):
118
+ _load_balancer_batch_handler = LoadBalancerBatchHandler()
119
+
120
+ _load_balancer_batch_handler.add_importer_exporter_from_openstack_connections(
121
+ connections, output_file=output_path
122
+ )
123
+
124
+ _load_balancer_batch_handler.process()
125
+
126
+
127
+ def _router(connections, output_path: str):
128
+ _router_batch_handler = RouterBatchHandler()
129
+
130
+ _router_batch_handler.add_importer_exporter_from_openstack_connections(
131
+ connections, output_file=output_path
132
+ )
133
+
134
+ _router_batch_handler.process()
135
+
136
+
79
137
  def inner_main(file_path: str, output_path: str):
80
138
 
81
139
  logger = logging.getLogger(__name__)
@@ -92,6 +150,16 @@ def inner_main(file_path: str, output_path: str):
92
150
 
93
151
  _project(connections=connections, output_path=output_path)
94
152
 
153
+ _image(connections=connections, output_path=output_path)
154
+
155
+ _flavor(connections=connections, output_path=output_path)
156
+
157
+ _role_assignment(connections=connections, output_path=output_path)
158
+
159
+ _load_balancer(connections=connections, output_path=output_path)
160
+
161
+ _router(connections=connections, output_path=output_path)
162
+
95
163
  util.excel_autosize_column(output_path)
96
164
 
97
165
  util.excel_sort_sheet(output_path)
@@ -141,6 +209,9 @@ Path of the output file, will override if file already exists
141
209
  level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
142
210
  )
143
211
 
212
+ # Suppress pool limit warning will investigate later
213
+ logging.getLogger("urllib3").propagate = False
214
+
144
215
  logger = logging.getLogger(__name__)
145
216
 
146
217
  if util.validate_dir_path(file_path=output_path) is False:
@@ -0,0 +1,30 @@
1
+ import logging
2
+
3
+
4
+ import pandas as pd
5
+
6
+
7
+ from osi_dump.exporter.flavor.flavor_exporter import FlavorExporter
8
+
9
+ from osi_dump.model.flavor import Flavor
10
+
11
+ from osi_dump import util
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class ExcelFlavorExporter(FlavorExporter):
17
+ def __init__(self, sheet_name: str, output_file: str):
18
+ self.sheet_name = sheet_name
19
+ self.output_file = output_file
20
+
21
+ def export_flavors(self, flavors: list[Flavor]):
22
+ df = pd.json_normalize([flavor.model_dump() for flavor in flavors])
23
+
24
+ logger.info(f"Exporting flavors for {self.sheet_name}")
25
+ try:
26
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
+
28
+ logger.info(f"Exported flavors for {self.sheet_name}")
29
+ except Exception as e:
30
+ logger.warning(f"Exporting floating ips for {self.sheet_name} error: {e}")
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class FlavorExporter(ABC):
5
+ @abstractmethod
6
+ def export_flavors(self, flavors, output_file: str):
7
+ pass
@@ -0,0 +1,28 @@
1
+ import pandas as pd
2
+
3
+ import logging
4
+
5
+
6
+ from osi_dump import util
7
+ from osi_dump.exporter.image.image_exporter import ImageExporter
8
+
9
+ from osi_dump.model.image import Image
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ class ExcelImageExporter(ImageExporter):
15
+ def __init__(self, sheet_name: str, output_file: str):
16
+ self.sheet_name = sheet_name
17
+ self.output_file = output_file
18
+
19
+ def export_images(self, images: list[Image]):
20
+ df = pd.json_normalize([image.model_dump() for image in images])
21
+
22
+ logger.info(f"Exporting images for {self.sheet_name}")
23
+ try:
24
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
25
+
26
+ logger.info(f"Exported images for {self.sheet_name}")
27
+ except Exception as e:
28
+ logger.warning(f"Exporting images for {self.sheet_name} error: {e}")
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class ImageExporter(ABC):
5
+ @abstractmethod
6
+ def export_images(self, images, output_file: str):
7
+ pass
@@ -0,0 +1,35 @@
1
+ import pandas as pd
2
+
3
+ import logging
4
+
5
+
6
+ from osi_dump import util
7
+
8
+ from osi_dump.exporter.load_balancer.load_balancer_exporter import (
9
+ LoadBalancerExporter,
10
+ )
11
+
12
+ from osi_dump.model.load_balancer import LoadBalancer
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class ExcelLoadBalancerExporter(LoadBalancerExporter):
18
+ def __init__(self, sheet_name: str, output_file: str):
19
+ self.sheet_name = sheet_name
20
+ self.output_file = output_file
21
+
22
+ def export_load_balancers(self, load_balancers: list[LoadBalancer]):
23
+ df = pd.json_normalize(
24
+ [load_balancer.model_dump() for load_balancer in load_balancers]
25
+ )
26
+
27
+ df = util.expand_list_column(df, "amphoraes")
28
+
29
+ logger.info(f"Exporting load_balancers for {self.sheet_name}")
30
+ try:
31
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
32
+
33
+ logger.info(f"Exported load_balancers for {self.sheet_name}")
34
+ except Exception as e:
35
+ logger.warning(f"Exporting load_balancers for {self.sheet_name} error: {e}")
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class LoadBalancerExporter(ABC):
5
+ @abstractmethod
6
+ def export_load_balancers(self, load_balancers, output_file: str):
7
+ pass
@@ -0,0 +1,35 @@
1
+ import pandas as pd
2
+
3
+ import logging
4
+
5
+
6
+ from osi_dump import util
7
+
8
+ from osi_dump.exporter.role_assignment.role_assignment_exporter import (
9
+ RoleAssignmentExporter,
10
+ )
11
+
12
+ from osi_dump.model.role_assignment import RoleAssignment
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class ExcelRoleAssignmentExporter(RoleAssignmentExporter):
18
+ def __init__(self, sheet_name: str, output_file: str):
19
+ self.sheet_name = sheet_name
20
+ self.output_file = output_file
21
+
22
+ def export_role_assignments(self, role_assignments: list[RoleAssignment]):
23
+ df = pd.json_normalize(
24
+ [role_assignment.model_dump() for role_assignment in role_assignments]
25
+ )
26
+
27
+ logger.info(f"Exporting role_assignments for {self.sheet_name}")
28
+ try:
29
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
30
+
31
+ logger.info(f"Exported role_assignments for {self.sheet_name}")
32
+ except Exception as e:
33
+ logger.warning(
34
+ f"Exporting role_assignments for {self.sheet_name} error: {e}"
35
+ )
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class RoleAssignmentExporter(ABC):
5
+ @abstractmethod
6
+ def export_role_assignments(self, role_assignments, output_file: str):
7
+ pass
@@ -0,0 +1,30 @@
1
+ import pandas as pd
2
+
3
+ import logging
4
+
5
+ from openpyxl import load_workbook
6
+
7
+ from osi_dump import util
8
+ from osi_dump.exporter.router.router_exporter import RouterExporter
9
+
10
+ from osi_dump.model.router import Router
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class ExcelRouterExporter(RouterExporter):
16
+ def __init__(self, sheet_name: str, output_file: str):
17
+ self.sheet_name = sheet_name
18
+ self.output_file = output_file
19
+
20
+ def export_routers(self, routers: list[Router]):
21
+
22
+ df = pd.DataFrame([router.model_dump() for router in routers])
23
+
24
+ logger.info(f"Exporting routers for {self.sheet_name}")
25
+ try:
26
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
+
28
+ logger.info(f"Exported routers for {self.sheet_name}")
29
+ except Exception as e:
30
+ logger.warning(f"Exporting routers for {self.sheet_name} error: {e}")
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class RouterExporter(ABC):
5
+ @abstractmethod
6
+ def export_routers(self, routers, output_file: str):
7
+ pass
@@ -0,0 +1,9 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ from osi_dump.model.flavor import Flavor
4
+
5
+
6
+ class FlavorImporter(ABC):
7
+ @abstractmethod
8
+ def import_flavors(self) -> list[Flavor]:
9
+ pass