osi-dump 0.1.3.3.4.3__py3-none-any.whl → 0.1.4__py3-none-any.whl
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/__main__.py +4 -4
- osi_dump/api/keystone.py +70 -70
- osi_dump/api/neutron.py +65 -65
- osi_dump/api/octavia.py +94 -94
- osi_dump/api/placement.py +41 -41
- osi_dump/batch_handler/__init__.py +6 -5
- osi_dump/batch_handler/external_port_batch_handler.py +55 -55
- osi_dump/batch_handler/flavor_batch_handler.py +51 -51
- osi_dump/batch_handler/floating_ip_batch_handler.py +57 -57
- osi_dump/batch_handler/hypervisor_batch_handler.py +55 -55
- osi_dump/batch_handler/image_batch_handler.py +51 -51
- osi_dump/batch_handler/instance_batch_handler.py +46 -54
- osi_dump/batch_handler/load_balancer_batch_handler.py +59 -59
- osi_dump/batch_handler/network_batch_handler.py +51 -51
- osi_dump/batch_handler/project_batch_handler.py +51 -51
- osi_dump/batch_handler/role_assignment_batch_handler.py +38 -61
- osi_dump/batch_handler/router_batch_handler.py +49 -49
- osi_dump/batch_handler/security_group_batch_handler.py +37 -0
- osi_dump/batch_handler/volume_batch_handler.py +45 -45
- osi_dump/cli.py +267 -257
- osi_dump/exporter/external_port/excel_external_port_exporter.py +34 -34
- osi_dump/exporter/external_port/external_port_exporter.py +7 -7
- osi_dump/exporter/flavor/excel_flavor_exporter.py +30 -30
- osi_dump/exporter/flavor/flavor_exporter.py +7 -7
- osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +30 -30
- osi_dump/exporter/floating_ip/floating_ip_exporter.py +7 -7
- osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +32 -32
- osi_dump/exporter/hypervisor/hypervisor_exporter.py +7 -7
- osi_dump/exporter/image/excel_image_exporter.py +28 -28
- osi_dump/exporter/image/image_exporter.py +7 -7
- osi_dump/exporter/instance/excel_instance_exporter.py +29 -29
- osi_dump/exporter/instance/instance_exporter.py +8 -7
- osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +36 -36
- osi_dump/exporter/load_balancer/load_balancer_exporter.py +7 -7
- osi_dump/exporter/network/excel_network_exporter.py +32 -32
- osi_dump/exporter/network/network_exporter.py +7 -7
- osi_dump/exporter/project/excel_project_exporter.py +30 -30
- osi_dump/exporter/project/project_exporter.py +7 -7
- osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +43 -35
- osi_dump/exporter/role_assignment/role_assignment_exporter.py +7 -7
- osi_dump/exporter/router/excel_router_exporter.py +30 -30
- osi_dump/exporter/router/router_exporter.py +7 -7
- osi_dump/exporter/security_group/excel_security_group_exporter.py +35 -0
- osi_dump/exporter/security_group/security_group_exporter.py +8 -0
- osi_dump/exporter/volume/excel_volume_exporter.py +29 -29
- osi_dump/exporter/volume/volume_exporter.py +7 -7
- osi_dump/importer/external_port/external_port_importer.py +9 -9
- osi_dump/importer/external_port/openstack_external_port_importer.py +177 -177
- osi_dump/importer/flavor/flavor_importer.py +9 -9
- osi_dump/importer/flavor/openstack_flavor_importer.py +64 -64
- osi_dump/importer/floating_ip/floating_ip_importer.py +9 -9
- osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +68 -68
- osi_dump/importer/hypervisor/hypervisor_importer.py +9 -9
- osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +137 -137
- osi_dump/importer/image/image_importer.py +9 -9
- osi_dump/importer/image/openstack_image_importer.py +81 -81
- osi_dump/importer/instance/instance_importer.py +8 -9
- osi_dump/importer/instance/openstack_instance_importer.py +136 -136
- osi_dump/importer/load_balancer/load_balancer_importer.py +9 -9
- osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +113 -113
- osi_dump/importer/network/network_importer.py +9 -9
- osi_dump/importer/network/openstack_network_importer.py +93 -93
- osi_dump/importer/project/openstack_project_importer.py +141 -141
- osi_dump/importer/project/project_importer.py +9 -9
- osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +117 -147
- osi_dump/importer/role_assignment/role_assignment_importer.py +16 -9
- osi_dump/importer/router/openstack_router_importer.py +87 -87
- osi_dump/importer/router/router_importer.py +9 -9
- osi_dump/importer/security_group/openstack_security_group_importer.py +54 -0
- osi_dump/importer/security_group/security_group_importer.py +8 -0
- osi_dump/importer/volume/openstack_volume_importer.py +81 -81
- osi_dump/importer/volume/volume_importer.py +9 -9
- osi_dump/model/authentication_info.py +15 -15
- osi_dump/model/external_port.py +30 -30
- osi_dump/model/flavor.py +20 -20
- osi_dump/model/floating_ip.py +24 -24
- osi_dump/model/hypervisor.py +24 -24
- osi_dump/model/image.py +27 -27
- osi_dump/model/instance.py +29 -29
- osi_dump/model/load_balancer.py +26 -26
- osi_dump/model/network.py +25 -25
- osi_dump/model/project.py +33 -33
- osi_dump/model/role_assignment.py +30 -23
- osi_dump/model/router.py +23 -23
- osi_dump/model/security_group.py +22 -0
- osi_dump/model/volume.py +25 -25
- osi_dump/os_connection/get_connections.py +67 -67
- osi_dump/util/__init__.py +7 -7
- osi_dump/util/create_file.py +11 -11
- osi_dump/util/excel_autosize_column.py +39 -39
- osi_dump/util/excel_sort_sheet.py +35 -35
- osi_dump/util/export_data_excel.py +36 -36
- osi_dump/util/extract_hostname.py +5 -5
- osi_dump/util/openstack_util.py +48 -48
- osi_dump/util/panda_excel.py +26 -26
- osi_dump/util/validate_dir_path.py +20 -20
- {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/METADATA +40 -40
- osi_dump-0.1.4.dist-info/RECORD +130 -0
- osi_dump-0.1.3.3.4.3.dist-info/RECORD +0 -124
- {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/WHEEL +0 -0
- {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/entry_points.txt +0 -0
- {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/top_level.txt +0 -0
@@ -1,87 +1,87 @@
|
|
1
|
-
import logging
|
2
|
-
|
3
|
-
import concurrent
|
4
|
-
|
5
|
-
from openstack.connection import Connection
|
6
|
-
from openstack.network.v2.router import Router as OSRouter
|
7
|
-
|
8
|
-
from osi_dump.importer.router.router_importer import (
|
9
|
-
RouterImporter,
|
10
|
-
)
|
11
|
-
from osi_dump.model.router import Router
|
12
|
-
|
13
|
-
logger = logging.getLogger(__name__)
|
14
|
-
|
15
|
-
|
16
|
-
class OpenStackRouterImporter(RouterImporter):
|
17
|
-
def __init__(self, connection: Connection):
|
18
|
-
self.connection = connection
|
19
|
-
|
20
|
-
def import_routers(self) -> list[Router]:
|
21
|
-
"""Import routers information from Openstack
|
22
|
-
|
23
|
-
Raises:
|
24
|
-
Exception: Raises exception if fetching router failed
|
25
|
-
|
26
|
-
Returns:
|
27
|
-
list[Router]: _description_
|
28
|
-
"""
|
29
|
-
|
30
|
-
logger.info(f"Importing routers for {self.connection.auth['auth_url']}")
|
31
|
-
|
32
|
-
try:
|
33
|
-
osrouters: list[OSRouter] = list(self.connection.network.routers())
|
34
|
-
except Exception as e:
|
35
|
-
raise Exception(
|
36
|
-
f"Can not fetch routers for {self.connection.auth['auth_url']}"
|
37
|
-
) from e
|
38
|
-
|
39
|
-
routers: list[Router] = []
|
40
|
-
|
41
|
-
with concurrent.futures.ThreadPoolExecutor() as executor:
|
42
|
-
futures = [
|
43
|
-
executor.submit(self._get_router_info, router) for router in osrouters
|
44
|
-
]
|
45
|
-
for future in concurrent.futures.as_completed(futures):
|
46
|
-
routers.append(future.result())
|
47
|
-
|
48
|
-
logger.info(f"Imported routers for {self.connection.auth['auth_url']}")
|
49
|
-
|
50
|
-
return routers
|
51
|
-
|
52
|
-
def _get_router_info(self, router: OSRouter) -> Router:
|
53
|
-
"""
|
54
|
-
{"network_id": "49760654-71d8-4967-8fdd-5a35d3ff78ef", "external_fixed_ips": [{"subnet_id": |
|
55
|
-
| | "c044a5c0-4b11-4d8d-ae5e-9ff4ce6c1be6", "ip_address": "10.0.2.188"}], "enable_snat": true}
|
56
|
-
"""
|
57
|
-
|
58
|
-
external_net_id = None
|
59
|
-
|
60
|
-
try:
|
61
|
-
external_net_id = router.external_gateway_info["network_id"]
|
62
|
-
except Exception as e:
|
63
|
-
logger.warning(f"Could not get external net id for router: {router.id}")
|
64
|
-
|
65
|
-
external_net_ip = None
|
66
|
-
|
67
|
-
try:
|
68
|
-
external_net_ip = router.external_gateway_info["external_fixed_ips"][0][
|
69
|
-
"ip_address"
|
70
|
-
]
|
71
|
-
|
72
|
-
except Exception as e:
|
73
|
-
logger.warning(f"Could not get external net ip for router {router.id}")
|
74
|
-
|
75
|
-
router_ret = Router(
|
76
|
-
router_id=router.id,
|
77
|
-
name=router.name,
|
78
|
-
external_net_id=external_net_id,
|
79
|
-
external_net_ip=external_net_ip,
|
80
|
-
status=router.status,
|
81
|
-
admin_state=router.is_admin_state_up,
|
82
|
-
project_id=router.project_id,
|
83
|
-
created_at=router.created_at,
|
84
|
-
updated_at=router.updated_at,
|
85
|
-
)
|
86
|
-
|
87
|
-
return router_ret
|
1
|
+
import logging
|
2
|
+
|
3
|
+
import concurrent
|
4
|
+
|
5
|
+
from openstack.connection import Connection
|
6
|
+
from openstack.network.v2.router import Router as OSRouter
|
7
|
+
|
8
|
+
from osi_dump.importer.router.router_importer import (
|
9
|
+
RouterImporter,
|
10
|
+
)
|
11
|
+
from osi_dump.model.router import Router
|
12
|
+
|
13
|
+
logger = logging.getLogger(__name__)
|
14
|
+
|
15
|
+
|
16
|
+
class OpenStackRouterImporter(RouterImporter):
|
17
|
+
def __init__(self, connection: Connection):
|
18
|
+
self.connection = connection
|
19
|
+
|
20
|
+
def import_routers(self) -> list[Router]:
|
21
|
+
"""Import routers information from Openstack
|
22
|
+
|
23
|
+
Raises:
|
24
|
+
Exception: Raises exception if fetching router failed
|
25
|
+
|
26
|
+
Returns:
|
27
|
+
list[Router]: _description_
|
28
|
+
"""
|
29
|
+
|
30
|
+
logger.info(f"Importing routers for {self.connection.auth['auth_url']}")
|
31
|
+
|
32
|
+
try:
|
33
|
+
osrouters: list[OSRouter] = list(self.connection.network.routers())
|
34
|
+
except Exception as e:
|
35
|
+
raise Exception(
|
36
|
+
f"Can not fetch routers for {self.connection.auth['auth_url']}"
|
37
|
+
) from e
|
38
|
+
|
39
|
+
routers: list[Router] = []
|
40
|
+
|
41
|
+
with concurrent.futures.ThreadPoolExecutor() as executor:
|
42
|
+
futures = [
|
43
|
+
executor.submit(self._get_router_info, router) for router in osrouters
|
44
|
+
]
|
45
|
+
for future in concurrent.futures.as_completed(futures):
|
46
|
+
routers.append(future.result())
|
47
|
+
|
48
|
+
logger.info(f"Imported routers for {self.connection.auth['auth_url']}")
|
49
|
+
|
50
|
+
return routers
|
51
|
+
|
52
|
+
def _get_router_info(self, router: OSRouter) -> Router:
|
53
|
+
"""
|
54
|
+
{"network_id": "49760654-71d8-4967-8fdd-5a35d3ff78ef", "external_fixed_ips": [{"subnet_id": |
|
55
|
+
| | "c044a5c0-4b11-4d8d-ae5e-9ff4ce6c1be6", "ip_address": "10.0.2.188"}], "enable_snat": true}
|
56
|
+
"""
|
57
|
+
|
58
|
+
external_net_id = None
|
59
|
+
|
60
|
+
try:
|
61
|
+
external_net_id = router.external_gateway_info["network_id"]
|
62
|
+
except Exception as e:
|
63
|
+
logger.warning(f"Could not get external net id for router: {router.id}")
|
64
|
+
|
65
|
+
external_net_ip = None
|
66
|
+
|
67
|
+
try:
|
68
|
+
external_net_ip = router.external_gateway_info["external_fixed_ips"][0][
|
69
|
+
"ip_address"
|
70
|
+
]
|
71
|
+
|
72
|
+
except Exception as e:
|
73
|
+
logger.warning(f"Could not get external net ip for router {router.id}")
|
74
|
+
|
75
|
+
router_ret = Router(
|
76
|
+
router_id=router.id,
|
77
|
+
name=router.name,
|
78
|
+
external_net_id=external_net_id,
|
79
|
+
external_net_ip=external_net_ip,
|
80
|
+
status=router.status,
|
81
|
+
admin_state=router.is_admin_state_up,
|
82
|
+
project_id=router.project_id,
|
83
|
+
created_at=router.created_at,
|
84
|
+
updated_at=router.updated_at,
|
85
|
+
)
|
86
|
+
|
87
|
+
return router_ret
|
@@ -1,9 +1,9 @@
|
|
1
|
-
from abc import ABC, abstractmethod
|
2
|
-
|
3
|
-
from osi_dump.model.router import Router
|
4
|
-
|
5
|
-
|
6
|
-
class RouterImporter(ABC):
|
7
|
-
@abstractmethod
|
8
|
-
def import_routers(self) -> list[Router]:
|
9
|
-
pass
|
1
|
+
from abc import ABC, abstractmethod
|
2
|
+
|
3
|
+
from osi_dump.model.router import Router
|
4
|
+
|
5
|
+
|
6
|
+
class RouterImporter(ABC):
|
7
|
+
@abstractmethod
|
8
|
+
def import_routers(self) -> list[Router]:
|
9
|
+
pass
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import logging
|
2
|
+
from typing import Generator
|
3
|
+
from openstack.connection import Connection
|
4
|
+
from openstack.network.v2.security_group import SecurityGroup as OSSecurityGroup
|
5
|
+
|
6
|
+
from osi_dump.importer.security_group.security_group_importer import SecurityGroupImporter
|
7
|
+
from osi_dump.model.security_group import SecurityGroup, SecurityGroupRule
|
8
|
+
|
9
|
+
logger = logging.getLogger(__name__)
|
10
|
+
|
11
|
+
class OpenStackSecurityGroupImporter(SecurityGroupImporter):
|
12
|
+
def __init__(self, connection: Connection):
|
13
|
+
self.connection = connection
|
14
|
+
|
15
|
+
def import_security_groups(self) -> Generator[SecurityGroup, None, None]:
|
16
|
+
logger.info(f"Importing security groups for {self.connection.auth['auth_url']}")
|
17
|
+
try:
|
18
|
+
os_sec_groups_iterator = self.connection.network.security_groups()
|
19
|
+
|
20
|
+
for os_sec_group in os_sec_groups_iterator:
|
21
|
+
yield self._get_sec_group_info(os_sec_group)
|
22
|
+
|
23
|
+
except Exception as e:
|
24
|
+
logger.error(f"Cannot fetch security groups for {self.connection.auth['auth_url']}: {e}")
|
25
|
+
return
|
26
|
+
|
27
|
+
logger.info(f"Finished importing security groups for {self.connection.auth['auth_url']}")
|
28
|
+
|
29
|
+
|
30
|
+
def _get_sec_group_info(self, os_sec_group: OSSecurityGroup) -> SecurityGroup:
|
31
|
+
rules = []
|
32
|
+
if hasattr(os_sec_group, 'security_group_rules'):
|
33
|
+
for rule in os_sec_group.security_group_rules:
|
34
|
+
port_range = None
|
35
|
+
if rule.get('port_range_min') is not None and rule.get('port_range_max') is not None:
|
36
|
+
port_range = f"{rule['port_range_min']}-{rule['port_range_max']}"
|
37
|
+
|
38
|
+
rules.append(SecurityGroupRule(
|
39
|
+
rule_id=rule['id'],
|
40
|
+
direction=rule['direction'],
|
41
|
+
protocol=rule.get('protocol'),
|
42
|
+
ethertype=rule['ethertype'],
|
43
|
+
port_range=port_range,
|
44
|
+
remote_ip_prefix=rule.get('remote_ip_prefix'),
|
45
|
+
remote_group_id=rule.get('remote_group_id')
|
46
|
+
))
|
47
|
+
|
48
|
+
return SecurityGroup(
|
49
|
+
security_group_id=os_sec_group.id,
|
50
|
+
name=os_sec_group.name,
|
51
|
+
project_id=os_sec_group.project_id,
|
52
|
+
description=os_sec_group.description,
|
53
|
+
rules=rules
|
54
|
+
)
|
@@ -1,81 +1,81 @@
|
|
1
|
-
import logging
|
2
|
-
|
3
|
-
import concurrent
|
4
|
-
|
5
|
-
from openstack.connection import Connection
|
6
|
-
|
7
|
-
from openstack.block_storage.v3.volume import Volume as OSVolume
|
8
|
-
|
9
|
-
from osi_dump.importer.volume.volume_importer import VolumeImporter
|
10
|
-
from osi_dump.model.volume import Volume
|
11
|
-
|
12
|
-
logger = logging.getLogger(__name__)
|
13
|
-
|
14
|
-
|
15
|
-
class OpenStackVolumeImporter(VolumeImporter):
|
16
|
-
def __init__(self, connection: Connection):
|
17
|
-
self.connection = connection
|
18
|
-
|
19
|
-
def import_volumes(self) -> list[Volume]:
|
20
|
-
"""Import hypervisors information from Openstack
|
21
|
-
|
22
|
-
Raises:
|
23
|
-
Exception: Raises exception if fetching hypervisor failed
|
24
|
-
|
25
|
-
Returns:
|
26
|
-
list[Hypervisor]: _description_
|
27
|
-
"""
|
28
|
-
|
29
|
-
logger.info(f"Importing volumes for {self.connection.auth['auth_url']}")
|
30
|
-
|
31
|
-
try:
|
32
|
-
osvolumes: list[OSVolume] = list(
|
33
|
-
self.connection.block_storage.volumes(details=True, all_projects=True)
|
34
|
-
)
|
35
|
-
except Exception as e:
|
36
|
-
raise Exception(
|
37
|
-
f"Can not fetch volumes for {self.connection.auth['auth_url']}"
|
38
|
-
) from e
|
39
|
-
|
40
|
-
volumes: list[Volume] = []
|
41
|
-
|
42
|
-
with concurrent.futures.ThreadPoolExecutor() as executor:
|
43
|
-
futures = [
|
44
|
-
executor.submit(self._get_volume_info, volume) for volume in osvolumes
|
45
|
-
]
|
46
|
-
for future in concurrent.futures.as_completed(futures):
|
47
|
-
volumes.append(future.result())
|
48
|
-
|
49
|
-
logger.info(f"Imported volumes for {self.connection.auth['auth_url']}")
|
50
|
-
|
51
|
-
return volumes
|
52
|
-
|
53
|
-
def _get_volume_info(self, volume: OSVolume) -> Volume:
|
54
|
-
|
55
|
-
snapshots = []
|
56
|
-
try:
|
57
|
-
snapshots = list(
|
58
|
-
self.connection.block_storage.snapshots(
|
59
|
-
details=False, all_projects=True, volume_id=volume.id
|
60
|
-
)
|
61
|
-
)
|
62
|
-
|
63
|
-
snapshots = [snapshot["id"] for snapshot in snapshots]
|
64
|
-
|
65
|
-
except Exception as e:
|
66
|
-
logger.warning(f"Fetching snapshots failed for {volume.id} error: {e}")
|
67
|
-
|
68
|
-
ret_volume = Volume(
|
69
|
-
volume_id=volume.id,
|
70
|
-
volume_name=volume.name,
|
71
|
-
project_id=volume.project_id,
|
72
|
-
status=volume.status,
|
73
|
-
attachments=[att["server_id"] for att in volume.attachments],
|
74
|
-
type=volume.volume_type,
|
75
|
-
size=volume.size,
|
76
|
-
snapshots=snapshots,
|
77
|
-
updated_at=volume.updated_at,
|
78
|
-
created_at=volume.created_at,
|
79
|
-
)
|
80
|
-
|
81
|
-
return ret_volume
|
1
|
+
import logging
|
2
|
+
|
3
|
+
import concurrent
|
4
|
+
|
5
|
+
from openstack.connection import Connection
|
6
|
+
|
7
|
+
from openstack.block_storage.v3.volume import Volume as OSVolume
|
8
|
+
|
9
|
+
from osi_dump.importer.volume.volume_importer import VolumeImporter
|
10
|
+
from osi_dump.model.volume import Volume
|
11
|
+
|
12
|
+
logger = logging.getLogger(__name__)
|
13
|
+
|
14
|
+
|
15
|
+
class OpenStackVolumeImporter(VolumeImporter):
|
16
|
+
def __init__(self, connection: Connection):
|
17
|
+
self.connection = connection
|
18
|
+
|
19
|
+
def import_volumes(self) -> list[Volume]:
|
20
|
+
"""Import hypervisors information from Openstack
|
21
|
+
|
22
|
+
Raises:
|
23
|
+
Exception: Raises exception if fetching hypervisor failed
|
24
|
+
|
25
|
+
Returns:
|
26
|
+
list[Hypervisor]: _description_
|
27
|
+
"""
|
28
|
+
|
29
|
+
logger.info(f"Importing volumes for {self.connection.auth['auth_url']}")
|
30
|
+
|
31
|
+
try:
|
32
|
+
osvolumes: list[OSVolume] = list(
|
33
|
+
self.connection.block_storage.volumes(details=True, all_projects=True)
|
34
|
+
)
|
35
|
+
except Exception as e:
|
36
|
+
raise Exception(
|
37
|
+
f"Can not fetch volumes for {self.connection.auth['auth_url']}"
|
38
|
+
) from e
|
39
|
+
|
40
|
+
volumes: list[Volume] = []
|
41
|
+
|
42
|
+
with concurrent.futures.ThreadPoolExecutor() as executor:
|
43
|
+
futures = [
|
44
|
+
executor.submit(self._get_volume_info, volume) for volume in osvolumes
|
45
|
+
]
|
46
|
+
for future in concurrent.futures.as_completed(futures):
|
47
|
+
volumes.append(future.result())
|
48
|
+
|
49
|
+
logger.info(f"Imported volumes for {self.connection.auth['auth_url']}")
|
50
|
+
|
51
|
+
return volumes
|
52
|
+
|
53
|
+
def _get_volume_info(self, volume: OSVolume) -> Volume:
|
54
|
+
|
55
|
+
snapshots = []
|
56
|
+
try:
|
57
|
+
snapshots = list(
|
58
|
+
self.connection.block_storage.snapshots(
|
59
|
+
details=False, all_projects=True, volume_id=volume.id
|
60
|
+
)
|
61
|
+
)
|
62
|
+
|
63
|
+
snapshots = [snapshot["id"] for snapshot in snapshots]
|
64
|
+
|
65
|
+
except Exception as e:
|
66
|
+
logger.warning(f"Fetching snapshots failed for {volume.id} error: {e}")
|
67
|
+
|
68
|
+
ret_volume = Volume(
|
69
|
+
volume_id=volume.id,
|
70
|
+
volume_name=volume.name,
|
71
|
+
project_id=volume.project_id,
|
72
|
+
status=volume.status,
|
73
|
+
attachments=[att["server_id"] for att in volume.attachments],
|
74
|
+
type=volume.volume_type,
|
75
|
+
size=volume.size,
|
76
|
+
snapshots=snapshots,
|
77
|
+
updated_at=volume.updated_at,
|
78
|
+
created_at=volume.created_at,
|
79
|
+
)
|
80
|
+
|
81
|
+
return ret_volume
|
@@ -1,9 +1,9 @@
|
|
1
|
-
from abc import ABC, abstractmethod
|
2
|
-
|
3
|
-
from osi_dump.model.volume import Volume
|
4
|
-
|
5
|
-
|
6
|
-
class VolumeImporter(ABC):
|
7
|
-
@abstractmethod
|
8
|
-
def import_volumes(self) -> list[Volume]:
|
9
|
-
pass
|
1
|
+
from abc import ABC, abstractmethod
|
2
|
+
|
3
|
+
from osi_dump.model.volume import Volume
|
4
|
+
|
5
|
+
|
6
|
+
class VolumeImporter(ABC):
|
7
|
+
@abstractmethod
|
8
|
+
def import_volumes(self) -> list[Volume]:
|
9
|
+
pass
|
@@ -1,15 +1,15 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
|
3
|
-
from pydantic import BaseModel, ConfigDict
|
4
|
-
|
5
|
-
|
6
|
-
class AuthenticationInfo(BaseModel):
|
7
|
-
model_config = ConfigDict(strict=True)
|
8
|
-
|
9
|
-
auth_url: str
|
10
|
-
project_name: str
|
11
|
-
username: str
|
12
|
-
password: str
|
13
|
-
user_domain_name: str
|
14
|
-
project_domain_name: str
|
15
|
-
interface: Optional[str] = "public"
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from pydantic import BaseModel, ConfigDict
|
4
|
+
|
5
|
+
|
6
|
+
class AuthenticationInfo(BaseModel):
|
7
|
+
model_config = ConfigDict(strict=True)
|
8
|
+
|
9
|
+
auth_url: str
|
10
|
+
project_name: str
|
11
|
+
username: str
|
12
|
+
password: str
|
13
|
+
user_domain_name: str
|
14
|
+
project_domain_name: str
|
15
|
+
interface: Optional[str] = "public"
|
osi_dump/model/external_port.py
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
|
3
|
-
from pydantic import BaseModel, ConfigDict, ValidationError
|
4
|
-
|
5
|
-
|
6
|
-
class ExternalPort(BaseModel):
|
7
|
-
model_config = ConfigDict(strict=True)
|
8
|
-
|
9
|
-
port_id: str
|
10
|
-
|
11
|
-
project_id: Optional[str]
|
12
|
-
|
13
|
-
subnet_id: Optional[str]
|
14
|
-
|
15
|
-
subnet_cidr: Optional[str]
|
16
|
-
|
17
|
-
ip_address: Optional[str]
|
18
|
-
|
19
|
-
network_name: Optional[str]
|
20
|
-
network_id: Optional[str]
|
21
|
-
|
22
|
-
allowed_address_pairs: Optional[list[dict]]
|
23
|
-
|
24
|
-
device_id: Optional[str]
|
25
|
-
|
26
|
-
device_owner: Optional[str]
|
27
|
-
|
28
|
-
status: Optional[str]
|
29
|
-
|
30
|
-
vlan_id: Optional[int]
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from pydantic import BaseModel, ConfigDict, ValidationError
|
4
|
+
|
5
|
+
|
6
|
+
class ExternalPort(BaseModel):
|
7
|
+
model_config = ConfigDict(strict=True)
|
8
|
+
|
9
|
+
port_id: str
|
10
|
+
|
11
|
+
project_id: Optional[str]
|
12
|
+
|
13
|
+
subnet_id: Optional[str]
|
14
|
+
|
15
|
+
subnet_cidr: Optional[str]
|
16
|
+
|
17
|
+
ip_address: Optional[str]
|
18
|
+
|
19
|
+
network_name: Optional[str]
|
20
|
+
network_id: Optional[str]
|
21
|
+
|
22
|
+
allowed_address_pairs: Optional[list[dict]]
|
23
|
+
|
24
|
+
device_id: Optional[str]
|
25
|
+
|
26
|
+
device_owner: Optional[str]
|
27
|
+
|
28
|
+
status: Optional[str]
|
29
|
+
|
30
|
+
vlan_id: Optional[int]
|
osi_dump/model/flavor.py
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
|
3
|
-
from pydantic import BaseModel, ConfigDict
|
4
|
-
|
5
|
-
|
6
|
-
class Flavor(BaseModel):
|
7
|
-
model_config = ConfigDict(strict=True)
|
8
|
-
|
9
|
-
flavor_id: str
|
10
|
-
|
11
|
-
flavor_name: str
|
12
|
-
|
13
|
-
properties: Optional[dict]
|
14
|
-
|
15
|
-
ram: int
|
16
|
-
vcpus: int
|
17
|
-
disk: int
|
18
|
-
swap: Optional[int]
|
19
|
-
|
20
|
-
public: bool
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from pydantic import BaseModel, ConfigDict
|
4
|
+
|
5
|
+
|
6
|
+
class Flavor(BaseModel):
|
7
|
+
model_config = ConfigDict(strict=True)
|
8
|
+
|
9
|
+
flavor_id: str
|
10
|
+
|
11
|
+
flavor_name: str
|
12
|
+
|
13
|
+
properties: Optional[dict]
|
14
|
+
|
15
|
+
ram: int
|
16
|
+
vcpus: int
|
17
|
+
disk: int
|
18
|
+
swap: Optional[int]
|
19
|
+
|
20
|
+
public: bool
|
osi_dump/model/floating_ip.py
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
|
3
|
-
from pydantic import BaseModel, ConfigDict, ValidationError
|
4
|
-
|
5
|
-
|
6
|
-
class FloatingIP(BaseModel):
|
7
|
-
model_config = ConfigDict(strict=True)
|
8
|
-
|
9
|
-
floating_ip_id: str
|
10
|
-
project_id: Optional[str]
|
11
|
-
|
12
|
-
floating_network: str
|
13
|
-
|
14
|
-
floating_ip_address: str
|
15
|
-
|
16
|
-
fixed_ip_address: Optional[str]
|
17
|
-
|
18
|
-
router_id: Optional[str]
|
19
|
-
|
20
|
-
port_id: Optional[str]
|
21
|
-
|
22
|
-
status: str
|
23
|
-
created_at: str
|
24
|
-
updated_at: str
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from pydantic import BaseModel, ConfigDict, ValidationError
|
4
|
+
|
5
|
+
|
6
|
+
class FloatingIP(BaseModel):
|
7
|
+
model_config = ConfigDict(strict=True)
|
8
|
+
|
9
|
+
floating_ip_id: str
|
10
|
+
project_id: Optional[str]
|
11
|
+
|
12
|
+
floating_network: str
|
13
|
+
|
14
|
+
floating_ip_address: str
|
15
|
+
|
16
|
+
fixed_ip_address: Optional[str]
|
17
|
+
|
18
|
+
router_id: Optional[str]
|
19
|
+
|
20
|
+
port_id: Optional[str]
|
21
|
+
|
22
|
+
status: str
|
23
|
+
created_at: str
|
24
|
+
updated_at: str
|
osi_dump/model/hypervisor.py
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
from pydantic import BaseModel, ConfigDict, ValidationError
|
3
|
-
|
4
|
-
|
5
|
-
class Hypervisor(BaseModel):
|
6
|
-
hypervisor_id: str
|
7
|
-
hypervisor_type: str
|
8
|
-
name: str
|
9
|
-
state: str
|
10
|
-
status: str
|
11
|
-
|
12
|
-
vcpus: int
|
13
|
-
vcpus_usage: int
|
14
|
-
|
15
|
-
memory_size: int
|
16
|
-
memory_usage: int
|
17
|
-
|
18
|
-
local_disk_usage: int
|
19
|
-
local_disk_size: int
|
20
|
-
|
21
|
-
aggregates: Optional[list[dict]] # id, name, az
|
22
|
-
availability_zone: Optional[str]
|
23
|
-
|
24
|
-
vm_count: int
|
1
|
+
from typing import Optional
|
2
|
+
from pydantic import BaseModel, ConfigDict, ValidationError
|
3
|
+
|
4
|
+
|
5
|
+
class Hypervisor(BaseModel):
|
6
|
+
hypervisor_id: str
|
7
|
+
hypervisor_type: str
|
8
|
+
name: str
|
9
|
+
state: str
|
10
|
+
status: str
|
11
|
+
|
12
|
+
vcpus: int
|
13
|
+
vcpus_usage: int
|
14
|
+
|
15
|
+
memory_size: int
|
16
|
+
memory_usage: int
|
17
|
+
|
18
|
+
local_disk_usage: int
|
19
|
+
local_disk_size: int
|
20
|
+
|
21
|
+
aggregates: Optional[list[dict]] # id, name, az
|
22
|
+
availability_zone: Optional[str]
|
23
|
+
|
24
|
+
vm_count: int
|