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.
- {osi_dump-0.1.5 → osi_dump-0.1.6}/PKG-INFO +1 -1
- {osi_dump-0.1.5 → osi_dump-0.1.6}/pyproject.toml +1 -1
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/external_port_batch_handler.py +8 -26
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/flavor_batch_handler.py +4 -18
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/hypervisor_batch_handler.py +5 -17
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/image_batch_handler.py +4 -18
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/network_batch_handler.py +5 -19
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/project_batch_handler.py +5 -17
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/router_batch_handler.py +4 -16
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/volume_batch_handler.py +4 -10
- osi_dump-0.1.6/src/osi_dump/exporter/external_port/excel_external_port_exporter.py +39 -0
- osi_dump-0.1.6/src/osi_dump/exporter/external_port/external_port_exporter.py +8 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/flavor/excel_flavor_exporter.py +10 -9
- osi_dump-0.1.6/src/osi_dump/exporter/flavor/flavor_exporter.py +9 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +17 -11
- osi_dump-0.1.6/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +9 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +14 -13
- osi_dump-0.1.6/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +8 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/image/excel_image_exporter.py +10 -7
- osi_dump-0.1.6/src/osi_dump/exporter/image/image_exporter.py +9 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/network/excel_network_exporter.py +13 -11
- osi_dump-0.1.6/src/osi_dump/exporter/network/network_exporter.py +8 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/project/excel_project_exporter.py +11 -11
- osi_dump-0.1.6/src/osi_dump/exporter/project/project_exporter.py +8 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/router/excel_router_exporter.py +9 -8
- osi_dump-0.1.6/src/osi_dump/exporter/router/router_exporter.py +8 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/volume/excel_volume_exporter.py +10 -8
- osi_dump-0.1.6/src/osi_dump/exporter/volume/volume_exporter.py +9 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/external_port/external_port_importer.py +3 -4
- osi_dump-0.1.6/src/osi_dump/importer/external_port/openstack_external_port_importer.py +90 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/flavor/flavor_importer.py +3 -3
- osi_dump-0.1.6/src/osi_dump/importer/flavor/openstack_flavor_importer.py +42 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/floating_ip/floating_ip_importer.py +3 -3
- osi_dump-0.1.6/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +41 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/hypervisor/hypervisor_importer.py +3 -4
- osi_dump-0.1.6/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +93 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/image/image_importer.py +3 -3
- osi_dump-0.1.6/src/osi_dump/importer/image/openstack_image_importer.py +53 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/network/network_importer.py +3 -4
- osi_dump-0.1.6/src/osi_dump/importer/network/openstack_network_importer.py +65 -0
- osi_dump-0.1.6/src/osi_dump/importer/project/openstack_project_importer.py +103 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/project/project_importer.py +3 -4
- osi_dump-0.1.6/src/osi_dump/importer/router/openstack_router_importer.py +52 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/router/router_importer.py +2 -3
- osi_dump-0.1.6/src/osi_dump/importer/volume/openstack_volume_importer.py +51 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/volume/volume_importer.py +3 -4
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/PKG-INFO +1 -1
- osi_dump-0.1.5/src/osi_dump/exporter/external_port/excel_external_port_exporter.py +0 -34
- osi_dump-0.1.5/src/osi_dump/exporter/external_port/external_port_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/exporter/flavor/flavor_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/exporter/image/image_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/exporter/network/network_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/exporter/project/project_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/exporter/router/router_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/exporter/volume/volume_exporter.py +0 -7
- osi_dump-0.1.5/src/osi_dump/importer/external_port/openstack_external_port_importer.py +0 -177
- osi_dump-0.1.5/src/osi_dump/importer/flavor/openstack_flavor_importer.py +0 -64
- osi_dump-0.1.5/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +0 -68
- osi_dump-0.1.5/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +0 -137
- osi_dump-0.1.5/src/osi_dump/importer/image/openstack_image_importer.py +0 -81
- osi_dump-0.1.5/src/osi_dump/importer/network/openstack_network_importer.py +0 -94
- osi_dump-0.1.5/src/osi_dump/importer/project/openstack_project_importer.py +0 -141
- osi_dump-0.1.5/src/osi_dump/importer/router/openstack_router_importer.py +0 -87
- osi_dump-0.1.5/src/osi_dump/importer/volume/openstack_volume_importer.py +0 -81
- {osi_dump-0.1.5 → osi_dump-0.1.6}/README.md +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/setup.cfg +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/__main__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/keystone.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/neutron.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/octavia.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/api/placement.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/floating_ip_batch_handler.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/instance_batch_handler.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/load_balancer_batch_handler.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/role_assignment_batch_handler.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/batch_handler/security_group_batch_handler.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/cli.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/external_port/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/flavor/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/floating_ip/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/hypervisor/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/image/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/instance/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/instance/excel_instance_exporter.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/instance/instance_exporter.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/load_balancer/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/load_balancer/load_balancer_exporter.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/network/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/project/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/role_assignment/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/role_assignment/role_assignment_exporter.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/router/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/security_group/excel_security_group_exporter.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/security_group/security_group_exporter.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/volume/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/external_port/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/flavor/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/floating_ip/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/hypervisor/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/image/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/instance/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/instance/instance_importer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/instance/openstack_instance_importer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/load_balancer/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/load_balancer/load_balancer_importer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/network/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/project/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/role_assignment/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/role_assignment/role_assignment_importer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/router/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/security_group/openstack_security_group_importer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/security_group/security_group_importer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/importer/volume/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/authentication_info.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/external_port.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/flavor.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/floating_ip.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/hypervisor.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/image.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/instance.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/load_balancer.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/network.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/project.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/role_assignment.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/router.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/security_group.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/model/volume.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/os_connection/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/os_connection/get_connections.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/__init__.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/create_file.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/excel_autosize_column.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/excel_sort_sheet.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/export_data_excel.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/extract_hostname.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/openstack_util.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/panda_excel.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/util/validate_dir_path.py +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/SOURCES.txt +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/dependency_links.txt +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/entry_points.txt +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/requires.txt +0 -0
- {osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump.egg-info/top_level.txt +0 -0
@@ -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
|
-
|
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
|
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
|
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
|
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
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
41
|
-
|
42
|
-
|
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:
|
22
|
-
df = pd.json_normalize(
|
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}")
|
{osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py
RENAMED
@@ -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:
|
22
|
-
df = pd.DataFrame(
|
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}")
|
{osi_dump-0.1.5 → osi_dump-0.1.6}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py
RENAMED
@@ -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:
|
22
|
-
df = pd.DataFrame(
|
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
|
-
|
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}")
|