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.
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/PKG-INFO +1 -1
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/pyproject.toml +1 -1
- osi_dump-0.1.2.2/src/osi_dump/api/octavia.py +34 -0
- osi_dump-0.1.2.2/src/osi_dump/batch_handler/flavor_batch_handler.py +51 -0
- osi_dump-0.1.2.2/src/osi_dump/batch_handler/image_batch_handler.py +51 -0
- osi_dump-0.1.2.2/src/osi_dump/batch_handler/load_balancer_batch_handler.py +59 -0
- osi_dump-0.1.2.2/src/osi_dump/batch_handler/role_assignment_batch_handler.py +61 -0
- osi_dump-0.1.2.2/src/osi_dump/batch_handler/router_batch_handler.py +49 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/cli.py +71 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/flavor/excel_flavor_exporter.py +30 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/flavor/flavor_exporter.py +7 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/image/excel_image_exporter.py +28 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/image/image_exporter.py +7 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +35 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/load_balancer/load_balancer_exporter.py +7 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +35 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/role_assignment/role_assignment_exporter.py +7 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/router/excel_router_exporter.py +30 -0
- osi_dump-0.1.2.2/src/osi_dump/exporter/router/router_exporter.py +7 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/flavor/flavor_importer.py +9 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/flavor/openstack_flavor_importer.py +64 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/hypervisor/__init__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +10 -1
- osi_dump-0.1.2.2/src/osi_dump/importer/image/__init__.py +0 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/image/image_importer.py +9 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/image/openstack_image_importer.py +77 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/instance/__init__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/instance/openstack_instance_importer.py +1 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/load_balancer/__init__.py +0 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/load_balancer/load_balancer_importer.py +9 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +72 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/project/__init__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/project/openstack_project_importer.py +6 -6
- osi_dump-0.1.2.2/src/osi_dump/importer/role_assignment/__init__.py +0 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +100 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/role_assignment/role_assignment_importer.py +9 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/router/__init__.py +0 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/router/openstack_router_importer.py +86 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/router/router_importer.py +9 -0
- osi_dump-0.1.2.2/src/osi_dump/importer/volume/__init__.py +0 -0
- osi_dump-0.1.2.2/src/osi_dump/model/__init__.py +0 -0
- osi_dump-0.1.2.2/src/osi_dump/model/flavor.py +20 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/hypervisor.py +2 -0
- osi_dump-0.1.2.2/src/osi_dump/model/image.py +26 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/instance.py +1 -0
- osi_dump-0.1.2.2/src/osi_dump/model/load_balancer.py +17 -0
- osi_dump-0.1.2.2/src/osi_dump/model/role_assignment.py +17 -0
- osi_dump-0.1.2.2/src/osi_dump/model/router.py +20 -0
- osi_dump-0.1.2.2/src/osi_dump/os_connection/__init__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/__init__.py +1 -0
- osi_dump-0.1.2.2/src/osi_dump/util/panda_excel.py +22 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/PKG-INFO +1 -1
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/SOURCES.txt +42 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/README.md +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/setup.cfg +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/__init__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/__main__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/api/__init__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/api/placement.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/__init__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/floating_ip_batch_handler.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/hypervisor_batch_handler.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/instance_batch_handler.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/project_batch_handler.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/batch_handler/volume_batch_handler.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/__init__.py +0 -0
- {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
- {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
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +0 -0
- {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
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +0 -0
- {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
- {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
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/instance/excel_instance_exporter.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/instance/instance_exporter.py +0 -0
- {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
- {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
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/project/excel_project_exporter.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/project/project_exporter.py +0 -0
- {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
- {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
- {osi_dump-0.1.2/src/osi_dump/importer → osi_dump-0.1.2.2/src/osi_dump/exporter}/volume/__init__.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/volume/excel_volume_exporter.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/exporter/volume/volume_exporter.py +0 -0
- {osi_dump-0.1.2/src/osi_dump/model → osi_dump-0.1.2.2/src/osi_dump/importer/flavor}/__init__.py +0 -0
- {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
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/floating_ip/floating_ip_importer.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/hypervisor/hypervisor_importer.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/instance/instance_importer.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/project/project_importer.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/volume/openstack_volume_importer.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/importer/volume/volume_importer.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/authentication_info.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/floating_ip.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/project.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/model/volume.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/os_connection/get_connections.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/create_file.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/excel_autosize_column.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/excel_sort_sheet.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/export_data_excel.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/extract_hostname.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump/util/validate_dir_path.py +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/dependency_links.txt +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/entry_points.txt +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/requires.txt +0 -0
- {osi_dump-0.1.2 → osi_dump-0.1.2.2}/src/osi_dump.egg-info/top_level.txt +0 -0
@@ -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,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,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,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,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}")
|