osi-dump 0.1.5__tar.gz → 0.1.6__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 (154) hide show
  1. {osi_dump-0.1.5 → osi_dump-0.1.6}/PKG-INFO +1 -1
  2. {osi_dump-0.1.5 → osi_dump-0.1.6}/pyproject.toml +1 -1
  3. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/external_port_batch_handler.py +8 -26
  4. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/flavor_batch_handler.py +4 -18
  5. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/hypervisor_batch_handler.py +5 -17
  6. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/image_batch_handler.py +4 -18
  7. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/network_batch_handler.py +5 -19
  8. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/project_batch_handler.py +5 -17
  9. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/router_batch_handler.py +4 -16
  10. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/volume_batch_handler.py +4 -10
  11. osi_dump-0.1.6/src/osi_dump/exporter/external_port/excel_external_port_exporter.py +39 -0
  12. osi_dump-0.1.6/src/osi_dump/exporter/external_port/external_port_exporter.py +8 -0
  13. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/flavor/excel_flavor_exporter.py +10 -9
  14. osi_dump-0.1.6/src/osi_dump/exporter/flavor/flavor_exporter.py +9 -0
  15. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +17 -11
  16. osi_dump-0.1.6/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +9 -0
  17. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +14 -13
  18. osi_dump-0.1.6/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +8 -0
  19. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/image/excel_image_exporter.py +10 -7
  20. osi_dump-0.1.6/src/osi_dump/exporter/image/image_exporter.py +9 -0
  21. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/network/excel_network_exporter.py +13 -11
  22. osi_dump-0.1.6/src/osi_dump/exporter/network/network_exporter.py +8 -0
  23. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/project/excel_project_exporter.py +11 -11
  24. osi_dump-0.1.6/src/osi_dump/exporter/project/project_exporter.py +8 -0
  25. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/router/excel_router_exporter.py +9 -8
  26. osi_dump-0.1.6/src/osi_dump/exporter/router/router_exporter.py +8 -0
  27. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/volume/excel_volume_exporter.py +10 -8
  28. osi_dump-0.1.6/src/osi_dump/exporter/volume/volume_exporter.py +9 -0
  29. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/external_port/external_port_importer.py +3 -4
  30. osi_dump-0.1.6/src/osi_dump/importer/external_port/openstack_external_port_importer.py +90 -0
  31. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/flavor/flavor_importer.py +3 -3
  32. osi_dump-0.1.6/src/osi_dump/importer/flavor/openstack_flavor_importer.py +42 -0
  33. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/floating_ip/floating_ip_importer.py +3 -3
  34. osi_dump-0.1.6/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +41 -0
  35. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/hypervisor/hypervisor_importer.py +3 -4
  36. osi_dump-0.1.6/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +93 -0
  37. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/image/image_importer.py +3 -3
  38. osi_dump-0.1.6/src/osi_dump/importer/image/openstack_image_importer.py +53 -0
  39. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/network/network_importer.py +3 -4
  40. osi_dump-0.1.6/src/osi_dump/importer/network/openstack_network_importer.py +65 -0
  41. osi_dump-0.1.6/src/osi_dump/importer/project/openstack_project_importer.py +103 -0
  42. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/project/project_importer.py +3 -4
  43. osi_dump-0.1.6/src/osi_dump/importer/router/openstack_router_importer.py +52 -0
  44. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/router/router_importer.py +2 -3
  45. osi_dump-0.1.6/src/osi_dump/importer/volume/openstack_volume_importer.py +51 -0
  46. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/volume/volume_importer.py +3 -4
  47. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/PKG-INFO +1 -1
  48. osi_dump-0.1.5/src/osi_dump/exporter/external_port/excel_external_port_exporter.py +0 -34
  49. osi_dump-0.1.5/src/osi_dump/exporter/external_port/external_port_exporter.py +0 -7
  50. osi_dump-0.1.5/src/osi_dump/exporter/flavor/flavor_exporter.py +0 -7
  51. osi_dump-0.1.5/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +0 -7
  52. osi_dump-0.1.5/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +0 -7
  53. osi_dump-0.1.5/src/osi_dump/exporter/image/image_exporter.py +0 -7
  54. osi_dump-0.1.5/src/osi_dump/exporter/network/network_exporter.py +0 -7
  55. osi_dump-0.1.5/src/osi_dump/exporter/project/project_exporter.py +0 -7
  56. osi_dump-0.1.5/src/osi_dump/exporter/router/router_exporter.py +0 -7
  57. osi_dump-0.1.5/src/osi_dump/exporter/volume/volume_exporter.py +0 -7
  58. osi_dump-0.1.5/src/osi_dump/importer/external_port/openstack_external_port_importer.py +0 -177
  59. osi_dump-0.1.5/src/osi_dump/importer/flavor/openstack_flavor_importer.py +0 -64
  60. osi_dump-0.1.5/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +0 -68
  61. osi_dump-0.1.5/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +0 -137
  62. osi_dump-0.1.5/src/osi_dump/importer/image/openstack_image_importer.py +0 -81
  63. osi_dump-0.1.5/src/osi_dump/importer/network/openstack_network_importer.py +0 -94
  64. osi_dump-0.1.5/src/osi_dump/importer/project/openstack_project_importer.py +0 -141
  65. osi_dump-0.1.5/src/osi_dump/importer/router/openstack_router_importer.py +0 -87
  66. osi_dump-0.1.5/src/osi_dump/importer/volume/openstack_volume_importer.py +0 -81
  67. {osi_dump-0.1.5 → osi_dump-0.1.6}/README.md +0 -0
  68. {osi_dump-0.1.5 → osi_dump-0.1.6}/setup.cfg +0 -0
  69. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/__init__.py +0 -0
  70. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/__main__.py +0 -0
  71. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/__init__.py +0 -0
  72. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/keystone.py +0 -0
  73. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/neutron.py +0 -0
  74. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/octavia.py +0 -0
  75. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/placement.py +0 -0
  76. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/__init__.py +0 -0
  77. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/floating_ip_batch_handler.py +0 -0
  78. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/instance_batch_handler.py +0 -0
  79. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/load_balancer_batch_handler.py +0 -0
  80. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/role_assignment_batch_handler.py +0 -0
  81. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/security_group_batch_handler.py +0 -0
  82. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/cli.py +0 -0
  83. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/__init__.py +0 -0
  84. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/external_port/__init__.py +0 -0
  85. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/flavor/__init__.py +0 -0
  86. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/floating_ip/__init__.py +0 -0
  87. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/hypervisor/__init__.py +0 -0
  88. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/image/__init__.py +0 -0
  89. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/instance/__init__.py +0 -0
  90. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/instance/excel_instance_exporter.py +0 -0
  91. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/instance/instance_exporter.py +0 -0
  92. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/load_balancer/__init__.py +0 -0
  93. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +0 -0
  94. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/load_balancer/load_balancer_exporter.py +0 -0
  95. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/network/__init__.py +0 -0
  96. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/project/__init__.py +0 -0
  97. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/role_assignment/__init__.py +0 -0
  98. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +0 -0
  99. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/role_assignment/role_assignment_exporter.py +0 -0
  100. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/router/__init__.py +0 -0
  101. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/security_group/excel_security_group_exporter.py +0 -0
  102. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/security_group/security_group_exporter.py +0 -0
  103. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/volume/__init__.py +0 -0
  104. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/external_port/__init__.py +0 -0
  105. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/flavor/__init__.py +0 -0
  106. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/floating_ip/__init__.py +0 -0
  107. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/hypervisor/__init__.py +0 -0
  108. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/image/__init__.py +0 -0
  109. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/instance/__init__.py +0 -0
  110. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/instance/instance_importer.py +0 -0
  111. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/instance/openstack_instance_importer.py +0 -0
  112. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/load_balancer/__init__.py +0 -0
  113. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/load_balancer/load_balancer_importer.py +0 -0
  114. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +0 -0
  115. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/network/__init__.py +0 -0
  116. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/project/__init__.py +0 -0
  117. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/role_assignment/__init__.py +0 -0
  118. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +0 -0
  119. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/role_assignment/role_assignment_importer.py +0 -0
  120. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/router/__init__.py +0 -0
  121. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/security_group/openstack_security_group_importer.py +0 -0
  122. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/security_group/security_group_importer.py +0 -0
  123. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/volume/__init__.py +0 -0
  124. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/__init__.py +0 -0
  125. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/authentication_info.py +0 -0
  126. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/external_port.py +0 -0
  127. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/flavor.py +0 -0
  128. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/floating_ip.py +0 -0
  129. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/hypervisor.py +0 -0
  130. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/image.py +0 -0
  131. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/instance.py +0 -0
  132. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/load_balancer.py +0 -0
  133. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/network.py +0 -0
  134. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/project.py +0 -0
  135. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/role_assignment.py +0 -0
  136. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/router.py +0 -0
  137. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/security_group.py +0 -0
  138. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/volume.py +0 -0
  139. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/os_connection/__init__.py +0 -0
  140. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/os_connection/get_connections.py +0 -0
  141. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/__init__.py +0 -0
  142. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/create_file.py +0 -0
  143. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/excel_autosize_column.py +0 -0
  144. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/excel_sort_sheet.py +0 -0
  145. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/export_data_excel.py +0 -0
  146. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/extract_hostname.py +0 -0
  147. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/openstack_util.py +0 -0
  148. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/panda_excel.py +0 -0
  149. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/validate_dir_path.py +0 -0
  150. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/SOURCES.txt +0 -0
  151. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/dependency_links.txt +0 -0
  152. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/entry_points.txt +0 -0
  153. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/requires.txt +0 -0
  154. {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: osi-dump
3
- Version: 0.1.5
3
+ Version: 0.1.6
4
4
  Summary: OpenStack 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.5"
3
+ version = "0.1.6"
4
4
  description = "OpenStack information dump tool"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "TVKain" }]
@@ -1,55 +1,37 @@
1
1
  import logging
2
-
3
2
  from openstack.connection import Connection
4
-
5
- from osi_dump.exporter.external_port.external_port_exporter import ExternalPortExporter
6
- from osi_dump.exporter.external_port.excel_external_port_exporter import (
7
- ExcelExternalPortExporter,
8
- )
9
-
10
- from osi_dump.importer.external_port.external_port_importer import ExternalPortImporter
3
+ from osi_dump import util
11
4
  from osi_dump.importer.external_port.openstack_external_port_importer import (
12
5
  OpenStackExternalPortImporter,
13
6
  )
14
-
15
-
16
- from osi_dump import util
17
-
7
+ from osi_dump.exporter.external_port.excel_external_port_exporter import (
8
+ ExcelExternalPortExporter,
9
+ )
18
10
  logger = logging.getLogger(__name__)
19
11
 
20
-
21
12
  class ExternalPortBatchHandler:
22
13
  def __init__(self):
23
- self._importer_exporter_list: list[
24
- tuple[ExternalPortImporter, ExternalPortExporter]
25
- ] = []
14
+ self._importer_exporter_list = []
26
15
 
27
16
  def add_importer_exporter_from_openstack_connections(
28
17
  self, connections: list[Connection], output_file: str
29
18
  ):
30
19
  for connection in connections:
31
20
  importer = OpenStackExternalPortImporter(connection)
32
-
33
21
  sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-ex-port"
34
22
  exporter = ExcelExternalPortExporter(
35
23
  sheet_name=sheet_name, output_file=output_file
36
24
  )
37
-
38
25
  self.add_importer_exporter(importer=importer, exporter=exporter)
39
26
 
40
- def add_importer_exporter(
41
- self, importer: ExternalPortImporter, exporter: ExternalPortExporter
42
- ):
27
+ def add_importer_exporter(self, importer, exporter):
43
28
  self._importer_exporter_list.append((importer, exporter))
44
29
 
45
30
  def process(self):
46
-
47
31
  for importer, exporter in self._importer_exporter_list:
48
32
  try:
49
-
50
- external_ports = importer.import_external_ports()
51
-
52
- exporter.export_external_ports(external_ports=external_ports)
33
+ ports_generator = importer.import_external_ports()
34
+ exporter.export_external_ports(external_ports=ports_generator)
53
35
  except Exception as e:
54
36
  logger.warning(e)
55
37
  logger.warning("Skipping...")
@@ -1,23 +1,14 @@
1
1
  import logging
2
-
3
2
  from openstack.connection import Connection
4
3
 
5
4
  from osi_dump.exporter.flavor.flavor_exporter import FlavorExporter
6
- from osi_dump.exporter.flavor.excel_flavor_exporter import (
7
- ExcelFlavorExporter,
8
- )
9
-
5
+ from osi_dump.exporter.flavor.excel_flavor_exporter import ExcelFlavorExporter
10
6
  from osi_dump.importer.flavor.flavor_importer import FlavorImporter
11
- from osi_dump.importer.flavor.openstack_flavor_importer import (
12
- OpenStackFlavorImporter,
13
- )
14
-
15
-
7
+ from osi_dump.importer.flavor.openstack_flavor_importer import OpenStackFlavorImporter
16
8
  from osi_dump import util
17
9
 
18
10
  logger = logging.getLogger(__name__)
19
11
 
20
-
21
12
  class FlavorBatchHandler:
22
13
  def __init__(self):
23
14
  self._importer_exporter_list: list[tuple[FlavorImporter, FlavorExporter]] = []
@@ -27,25 +18,20 @@ class FlavorBatchHandler:
27
18
  ):
28
19
  for connection in connections:
29
20
  importer = OpenStackFlavorImporter(connection)
30
-
31
21
  sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-flavor"
32
22
  exporter = ExcelFlavorExporter(
33
23
  sheet_name=sheet_name, output_file=output_file
34
24
  )
35
-
36
25
  self.add_importer_exporter(importer=importer, exporter=exporter)
37
26
 
38
27
  def add_importer_exporter(self, importer: FlavorImporter, exporter: FlavorExporter):
39
28
  self._importer_exporter_list.append((importer, exporter))
40
29
 
41
30
  def process(self):
42
-
43
31
  for importer, exporter in self._importer_exporter_list:
44
32
  try:
45
-
46
- flavors = importer.import_flavors()
47
-
48
- exporter.export_flavors(flavors=flavors)
33
+ flavors_generator = importer.import_flavors()
34
+ exporter.export_flavors(flavors=flavors_generator)
49
35
  except Exception as e:
50
36
  logger.warning(e)
51
37
  logger.warning("Skipping...")
@@ -1,23 +1,14 @@
1
1
  import logging
2
-
3
2
  from openstack.connection import Connection
4
3
 
5
4
  from osi_dump.exporter.hypervisor.hypervisor_exporter import HypervisorExporter
6
- from osi_dump.exporter.hypervisor.excel_hypervisor_exporter import (
7
- ExcelHypervisorExporter,
8
- )
9
-
5
+ from osi_dump.exporter.hypervisor.excel_hypervisor_exporter import ExcelHypervisorExporter
10
6
  from osi_dump.importer.hypervisor.hypervisor_importer import HypervisorImporter
11
- from osi_dump.importer.hypervisor.openstack_hypervisor_importer import (
12
- OpenStackHypervisorImporter,
13
- )
14
-
15
-
7
+ from osi_dump.importer.hypervisor.openstack_hypervisor_importer import OpenStackHypervisorImporter
16
8
  from osi_dump import util
17
9
 
18
10
  logger = logging.getLogger(__name__)
19
11
 
20
-
21
12
  class HypervisorBatchHandler:
22
13
  def __init__(self):
23
14
  self._importer_exporter_list: list[
@@ -29,14 +20,12 @@ class HypervisorBatchHandler:
29
20
  ):
30
21
  for connection in connections:
31
22
  importer = OpenStackHypervisorImporter(connection)
32
-
33
23
  sheet_name = (
34
24
  f"{util.extract_hostname(connection.auth['auth_url'])}-hypervisor"
35
25
  )
36
26
  exporter = ExcelHypervisorExporter(
37
27
  sheet_name=sheet_name, output_file=output_file
38
28
  )
39
-
40
29
  self.add_importer_exporter(importer=importer, exporter=exporter)
41
30
 
42
31
  def add_importer_exporter(
@@ -47,9 +36,8 @@ class HypervisorBatchHandler:
47
36
  def process(self):
48
37
  for importer, exporter in self._importer_exporter_list:
49
38
  try:
50
- hypervisors = importer.import_hypervisors()
51
-
52
- exporter.export_hypervisors(hypervisors=hypervisors)
39
+ hypervisors_generator = importer.import_hypervisors()
40
+ exporter.export_hypervisors(hypervisors=hypervisors_generator)
53
41
  except Exception as e:
54
42
  logger.warning(e)
55
- logger.warning("Skipping...")
43
+ logger.warning("Skipping...")
@@ -1,23 +1,14 @@
1
1
  import logging
2
-
3
2
  from openstack.connection import Connection
4
3
 
5
4
  from osi_dump.exporter.image.image_exporter import ImageExporter
6
- from osi_dump.exporter.image.excel_image_exporter import (
7
- ExcelImageExporter,
8
- )
9
-
5
+ from osi_dump.exporter.image.excel_image_exporter import ExcelImageExporter
10
6
  from osi_dump.importer.image.image_importer import ImageImporter
11
- from osi_dump.importer.image.openstack_image_importer import (
12
- OpenStackImageImporter,
13
- )
14
-
15
-
7
+ from osi_dump.importer.image.openstack_image_importer import OpenStackImageImporter
16
8
  from osi_dump import util
17
9
 
18
10
  logger = logging.getLogger(__name__)
19
11
 
20
-
21
12
  class ImageBatchHandler:
22
13
  def __init__(self):
23
14
  self._importer_exporter_list: list[tuple[ImageImporter, ImageExporter]] = []
@@ -27,25 +18,20 @@ class ImageBatchHandler:
27
18
  ):
28
19
  for connection in connections:
29
20
  importer = OpenStackImageImporter(connection)
30
-
31
21
  sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-image"
32
22
  exporter = ExcelImageExporter(
33
23
  sheet_name=sheet_name, output_file=output_file
34
24
  )
35
-
36
25
  self.add_importer_exporter(importer=importer, exporter=exporter)
37
26
 
38
27
  def add_importer_exporter(self, importer: ImageImporter, exporter: ImageExporter):
39
28
  self._importer_exporter_list.append((importer, exporter))
40
29
 
41
30
  def process(self):
42
-
43
31
  for importer, exporter in self._importer_exporter_list:
44
32
  try:
45
-
46
- images = importer.import_images()
47
-
48
- exporter.export_images(images=images)
33
+ images_generator = importer.import_images()
34
+ exporter.export_images(images=images_generator)
49
35
  except Exception as e:
50
36
  logger.warning(e)
51
37
  logger.warning("Skipping...")
@@ -1,23 +1,14 @@
1
1
  import logging
2
-
3
2
  from openstack.connection import Connection
4
3
 
5
4
  from osi_dump.exporter.network.network_exporter import NetworkExporter
6
- from osi_dump.exporter.network.excel_network_exporter import (
7
- ExcelNetworkExporter,
8
- )
9
-
5
+ from osi_dump.exporter.network.excel_network_exporter import ExcelNetworkExporter
10
6
  from osi_dump.importer.network.network_importer import NetworkImporter
11
- from osi_dump.importer.network.openstack_network_importer import (
12
- OpenStackNetworkImporter,
13
- )
14
-
15
-
7
+ from osi_dump.importer.network.openstack_network_importer import OpenStackNetworkImporter
16
8
  from osi_dump import util
17
9
 
18
10
  logger = logging.getLogger(__name__)
19
11
 
20
-
21
12
  class NetworkBatchHandler:
22
13
  def __init__(self):
23
14
  self._importer_exporter_list: list[tuple[NetworkImporter, NetworkExporter]] = []
@@ -27,25 +18,20 @@ class NetworkBatchHandler:
27
18
  ):
28
19
  for connection in connections:
29
20
  importer = OpenStackNetworkImporter(connection)
30
-
31
21
  sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-network"
32
22
  exporter = ExcelNetworkExporter(
33
23
  sheet_name=sheet_name, output_file=output_file
34
24
  )
35
-
36
25
  self.add_importer_exporter(importer=importer, exporter=exporter)
37
26
 
38
27
  def add_importer_exporter(self, importer: NetworkImporter, exporter: NetworkExporter):
39
28
  self._importer_exporter_list.append((importer, exporter))
40
29
 
41
30
  def process(self):
42
-
43
31
  for importer, exporter in self._importer_exporter_list:
44
32
  try:
45
-
46
- networks = importer.import_networks()
47
-
48
- exporter.export_networks(networks=networks)
33
+ networks_generator = importer.import_networks()
34
+ exporter.export_networks(networks=networks_generator)
49
35
  except Exception as e:
50
36
  logger.warning(e)
51
- logger.warning("Skipping...")
37
+ logger.warning("Skipping...")
@@ -1,23 +1,14 @@
1
1
  import logging
2
-
3
2
  from openstack.connection import Connection
4
3
 
5
- from osi_dump.exporter.project.project_exporter import (
6
- ProjectExporter,
7
- )
4
+ from osi_dump.exporter.project.project_exporter import ProjectExporter
8
5
  from osi_dump.exporter.project.excel_project_exporter import ExcelProjectExporter
9
-
10
6
  from osi_dump.importer.project.project_importer import ProjectImporter
11
- from osi_dump.importer.project.openstack_project_importer import (
12
- OpenStackProjectImporter,
13
- )
14
-
15
-
7
+ from osi_dump.importer.project.openstack_project_importer import OpenStackProjectImporter
16
8
  from osi_dump import util
17
9
 
18
10
  logger = logging.getLogger(__name__)
19
11
 
20
-
21
12
  class ProjectBatchHandler:
22
13
  def __init__(self):
23
14
  self._importer_exporter_list: list[tuple[ProjectImporter, ProjectExporter]] = []
@@ -27,12 +18,10 @@ class ProjectBatchHandler:
27
18
  ):
28
19
  for connection in connections:
29
20
  importer = OpenStackProjectImporter(connection)
30
-
31
21
  sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-project"
32
22
  exporter = ExcelProjectExporter(
33
23
  sheet_name=sheet_name, output_file=output_file
34
24
  )
35
-
36
25
  self.add_importer_exporter(importer=importer, exporter=exporter)
37
26
 
38
27
  def add_importer_exporter(
@@ -43,9 +32,8 @@ class ProjectBatchHandler:
43
32
  def process(self):
44
33
  for importer, exporter in self._importer_exporter_list:
45
34
  try:
46
- projects = importer.import_projects()
47
-
48
- exporter.export_projects(projects=projects)
35
+ projects_generator = importer.import_projects()
36
+ exporter.export_projects(projects=projects_generator)
49
37
  except Exception as e:
50
38
  logger.warning(e)
51
- logger.warning("Skipping...")
39
+ logger.warning("Skipping...")
@@ -1,23 +1,14 @@
1
1
  import logging
2
-
3
2
  from openstack.connection import Connection
4
3
 
5
- from osi_dump.exporter.router.router_exporter import (
6
- RouterExporter,
7
- )
4
+ from osi_dump.exporter.router.router_exporter import RouterExporter
8
5
  from osi_dump.exporter.router.excel_router_exporter import ExcelRouterExporter
9
-
10
6
  from osi_dump.importer.router.router_importer import RouterImporter
11
- from osi_dump.importer.router.openstack_router_importer import (
12
- OpenStackRouterImporter,
13
- )
14
-
15
-
7
+ from osi_dump.importer.router.openstack_router_importer import OpenStackRouterImporter
16
8
  from osi_dump import util
17
9
 
18
10
  logger = logging.getLogger(__name__)
19
11
 
20
-
21
12
  class RouterBatchHandler:
22
13
  def __init__(self):
23
14
  self._importer_exporter_list: list[tuple[RouterImporter, RouterExporter]] = []
@@ -27,12 +18,10 @@ class RouterBatchHandler:
27
18
  ):
28
19
  for connection in connections:
29
20
  importer = OpenStackRouterImporter(connection)
30
-
31
21
  sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-router"
32
22
  exporter = ExcelRouterExporter(
33
23
  sheet_name=sheet_name, output_file=output_file
34
24
  )
35
-
36
25
  self.add_importer_exporter(importer=importer, exporter=exporter)
37
26
 
38
27
  def add_importer_exporter(self, importer: RouterImporter, exporter: RouterExporter):
@@ -41,9 +30,8 @@ class RouterBatchHandler:
41
30
  def process(self):
42
31
  for importer, exporter in self._importer_exporter_list:
43
32
  try:
44
- routers = importer.import_routers()
45
-
46
- exporter.export_routers(routers=routers)
33
+ routers_generator = importer.import_routers()
34
+ exporter.export_routers(routers=routers_generator)
47
35
  except Exception as e:
48
36
  logger.warning(e)
49
37
  logger.warning("Skipping...")
@@ -1,19 +1,14 @@
1
1
  import logging
2
-
3
2
  from openstack.connection import Connection
4
3
 
5
-
6
4
  from osi_dump.exporter.volume.excel_volume_exporter import ExcelVolumeExporter
7
5
  from osi_dump.exporter.volume.volume_exporter import VolumeExporter
8
-
9
-
10
6
  from osi_dump import util
11
7
  from osi_dump.importer.volume.openstack_volume_importer import OpenStackVolumeImporter
12
8
  from osi_dump.importer.volume.volume_importer import VolumeImporter
13
9
 
14
10
  logger = logging.getLogger(__name__)
15
11
 
16
-
17
12
  class VolumeBatchHandler:
18
13
  def __init__(self):
19
14
  self._importer_exporter_list: list[tuple[VolumeImporter, VolumeExporter]] = []
@@ -23,12 +18,10 @@ class VolumeBatchHandler:
23
18
  ):
24
19
  for connection in connections:
25
20
  importer = OpenStackVolumeImporter(connection)
26
-
27
21
  sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-volume"
28
22
  exporter = ExcelVolumeExporter(
29
23
  sheet_name=sheet_name, output_file=output_file
30
24
  )
31
-
32
25
  self.add_importer_exporter(importer=importer, exporter=exporter)
33
26
 
34
27
  def add_importer_exporter(self, importer: VolumeImporter, exporter: VolumeExporter):
@@ -37,9 +30,10 @@ class VolumeBatchHandler:
37
30
  def process(self):
38
31
  for importer, exporter in self._importer_exporter_list:
39
32
  try:
40
- volumes = importer.import_volumes()
41
-
42
- exporter.export_volumes(volumes=volumes)
33
+ # Lấy về "dây chuyền" (generator)
34
+ volumes_generator = importer.import_volumes()
35
+ # Giao "dây chuyền" cho Exporter xử lý
36
+ exporter.export_volumes(volumes=volumes_generator)
43
37
  except Exception as e:
44
38
  logger.warning(e)
45
39
  logger.warning("Skipping...")
@@ -0,0 +1,39 @@
1
+ import pandas as pd
2
+ import logging
3
+ import ipaddress
4
+ from typing import Generator
5
+
6
+ from osi_dump import util
7
+ from osi_dump.exporter.external_port.external_port_exporter import ExternalPortExporter
8
+ from osi_dump.model.external_port import ExternalPort
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+ class ExcelExternalPortExporter(ExternalPortExporter):
13
+ def __init__(self, sheet_name: str, output_file: str):
14
+ self.sheet_name = sheet_name
15
+ self.output_file = output_file
16
+
17
+ def export_external_ports(self, external_ports: Generator[ExternalPort, None, None]):
18
+ df = util.panda_excel.expand_list_column(
19
+ pd.DataFrame(port.model_dump() for port in external_ports),
20
+ "allowed_address_pairs"
21
+ )
22
+
23
+ if df.empty:
24
+ logger.info(f"No external ports to export for {self.sheet_name}")
25
+ return
26
+
27
+ if 'network_id' in df.columns and 'ip_address' in df.columns:
28
+ df['ip_sort_key'] = df['ip_address'].apply(
29
+ lambda ip: ipaddress.ip_address(ip) if ip else ipaddress.ip_address('0.0.0.0')
30
+ )
31
+ df.sort_values(by=['network_id', 'ip_sort_key'], inplace=True, na_position='last')
32
+ df.drop(columns=['ip_sort_key'], inplace=True)
33
+
34
+ logger.info(f"Exporting external_ports for {self.sheet_name}")
35
+ try:
36
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
37
+ logger.info(f"Exported external_ports for {self.sheet_name}")
38
+ except Exception as e:
39
+ logger.warning(f"Exporting external_ports for {self.sheet_name} error: {e}")
@@ -0,0 +1,8 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Generator
3
+ from osi_dump.model.external_port import ExternalPort
4
+
5
+ class ExternalPortExporter(ABC):
6
+ @abstractmethod
7
+ def export_external_ports(self, external_ports: Generator[ExternalPort, None, None]):
8
+ pass
@@ -1,30 +1,31 @@
1
1
  import logging
2
-
3
-
4
2
  import pandas as pd
5
-
3
+ from typing import Generator
6
4
 
7
5
  from osi_dump.exporter.flavor.flavor_exporter import FlavorExporter
8
-
9
6
  from osi_dump.model.flavor import Flavor
10
-
11
7
  from osi_dump import util
12
8
 
13
9
  logger = logging.getLogger(__name__)
14
10
 
15
-
16
11
  class ExcelFlavorExporter(FlavorExporter):
17
12
  def __init__(self, sheet_name: str, output_file: str):
18
13
  self.sheet_name = sheet_name
19
14
  self.output_file = output_file
20
15
 
21
- def export_flavors(self, flavors: list[Flavor]):
22
- df = pd.json_normalize([flavor.model_dump() for flavor in flavors])
16
+ def export_flavors(self, flavors: Generator[Flavor, None, None]):
17
+ df = pd.json_normalize(flavor.model_dump() for flavor in flavors)
18
+
19
+ if df.empty:
20
+ logger.info(f"No flavors to export for {self.sheet_name}")
21
+ return
22
+
23
+ if 'flavor_name' in df.columns:
24
+ df.sort_values(by='flavor_name', inplace=True, na_position='last')
23
25
 
24
26
  logger.info(f"Exporting flavors for {self.sheet_name}")
25
27
  try:
26
28
  util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
-
28
29
  logger.info(f"Exported flavors for {self.sheet_name}")
29
30
  except Exception as e:
30
31
  logger.warning(f"Exporting flavors for {self.sheet_name} error: {e}")
@@ -0,0 +1,9 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Generator
3
+ from osi_dump.model.flavor import Flavor
4
+
5
+ class FlavorExporter(ABC):
6
+ @abstractmethod
7
+ def export_flavors(self, flavors: Generator[Flavor, None, None]):
8
+ pass
9
+
@@ -1,30 +1,36 @@
1
1
  import logging
2
-
3
- from openpyxl import load_workbook
4
2
  import pandas as pd
3
+ from typing import Generator
4
+ import ipaddress
5
5
 
6
-
6
+ from osi_dump import util
7
7
  from osi_dump.exporter.floating_ip.floating_ip_exporter import FloatingIPExporter
8
-
9
8
  from osi_dump.model.floating_ip import FloatingIP
10
9
 
11
- from osi_dump import util
12
-
13
10
  logger = logging.getLogger(__name__)
14
11
 
15
-
16
12
  class ExcelFloatingIPExporter(FloatingIPExporter):
17
13
  def __init__(self, sheet_name: str, output_file: str):
18
14
  self.sheet_name = sheet_name
19
15
  self.output_file = output_file
20
16
 
21
- def export_floating_ips(self, floating_ips: list[FloatingIP]):
22
- df = pd.DataFrame([floating_ip.model_dump() for floating_ip in floating_ips])
17
+ def export_floating_ips(self, floating_ips: Generator[FloatingIP, None, None]):
18
+ df = pd.DataFrame(fip.model_dump() for fip in floating_ips)
19
+
20
+ if df.empty:
21
+ logger.info(f"No floating IPs to export for {self.sheet_name}")
22
+ return
23
+
24
+ if 'floating_ip_address' in df.columns:
25
+ df['sort_key'] = df['floating_ip_address'].apply(
26
+ lambda ip: ipaddress.ip_address(ip) if ip else ipaddress.ip_address('0.0.0.0')
27
+ )
28
+ df.sort_values(by='sort_key', inplace=True)
29
+ df.drop(columns='sort_key', inplace=True)
23
30
 
24
31
  logger.info(f"Exporting floating ips for {self.sheet_name}")
25
32
  try:
26
33
  util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
27
-
28
34
  logger.info(f"Exported floating ips for {self.sheet_name}")
29
35
  except Exception as e:
30
- logger.warning(f"Exporting floating ips for {self.sheet_name} error: {e}")
36
+ logger.warning(f"Exporting floating ips for {self.sheet_name} error: {e}")
@@ -0,0 +1,9 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Generator
3
+ from osi_dump.model.floating_ip import FloatingIP
4
+
5
+ class FloatingIPExporter(ABC):
6
+ @abstractmethod
7
+ def export_floating_ips(self, floating_ips: Generator[FloatingIP, None, None]):
8
+ pass
9
+
@@ -1,32 +1,33 @@
1
1
  import logging
2
-
3
- from openpyxl import load_workbook
4
2
  import pandas as pd
5
-
6
-
3
+ from typing import Generator
4
+ from osi_dump import util
7
5
  from osi_dump.exporter.hypervisor.hypervisor_exporter import HypervisorExporter
8
-
9
6
  from osi_dump.model.hypervisor import Hypervisor
10
7
 
11
- from osi_dump import util
12
-
13
8
  logger = logging.getLogger(__name__)
14
9
 
15
-
16
10
  class ExcelHypervisorExporter(HypervisorExporter):
17
11
  def __init__(self, sheet_name: str, output_file: str):
18
12
  self.sheet_name = sheet_name
19
13
  self.output_file = output_file
20
14
 
21
- def export_hypervisors(self, hypervisors: list[Hypervisor]):
22
- df = pd.DataFrame([hypervisor.model_dump() for hypervisor in hypervisors])
15
+ def export_hypervisors(self, hypervisors: Generator[Hypervisor, None, None]):
16
+ df = pd.DataFrame(h.model_dump() for h in hypervisors)
17
+
18
+ if df.empty:
19
+ logger.info(f"No hypervisors to export for {self.sheet_name}")
20
+ return
21
+
22
+ if 'aggregates' in df.columns:
23
+ df = util.expand_list_column(df, "aggregates")
23
24
 
24
- df = util.expand_list_column(df, "aggregates")
25
+ if 'name' in df.columns:
26
+ df.sort_values(by='name', inplace=True, na_position='last')
25
27
 
26
28
  logger.info(f"Exporting hypervisors for {self.sheet_name}")
27
29
  try:
28
30
  util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
29
-
30
31
  logger.info(f"Exported hypervisors for {self.sheet_name}")
31
32
  except Exception as e:
32
- logger.warning(f"Exporting hypervisors for {self.sheet_name} error: {e}")
33
+ logger.warning(f"Exporting hypervisors for {self.sheet_name} error: {e}")
@@ -0,0 +1,8 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Generator
3
+ from osi_dump.model.hypervisor import Hypervisor
4
+
5
+ class HypervisorExporter(ABC):
6
+ @abstractmethod
7
+ def export_hypervisors(self, hypervisors: Generator[Hypervisor, None, None]):
8
+ pass