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,113 +1,113 @@
|
|
1
|
-
import logging
|
2
|
-
|
3
|
-
import concurrent
|
4
|
-
|
5
|
-
from openstack.connection import Connection
|
6
|
-
|
7
|
-
from openstack.load_balancer.v2.load_balancer import LoadBalancer as OSLoadBalancer
|
8
|
-
|
9
|
-
from osi_dump.importer.load_balancer.load_balancer_importer import (
|
10
|
-
LoadBalancerImporter,
|
11
|
-
)
|
12
|
-
from osi_dump.model.load_balancer import LoadBalancer
|
13
|
-
|
14
|
-
import osi_dump.api.octavia as octavia_api
|
15
|
-
|
16
|
-
logger = logging.getLogger(__name__)
|
17
|
-
|
18
|
-
|
19
|
-
class OpenStackLoadBalancerImporter(LoadBalancerImporter):
|
20
|
-
def __init__(self, connection: Connection):
|
21
|
-
self.connection = connection
|
22
|
-
|
23
|
-
def import_load_balancers(self) -> list[LoadBalancer]:
|
24
|
-
"""Import load_balancers information from Openstack
|
25
|
-
|
26
|
-
Raises:
|
27
|
-
Exception: Raises exception if fetching load_balancer failed
|
28
|
-
|
29
|
-
Returns:
|
30
|
-
list[LoadBalancer]: _description_
|
31
|
-
"""
|
32
|
-
|
33
|
-
logger.info(f"Importing load_balancers for {self.connection.auth['auth_url']}")
|
34
|
-
|
35
|
-
try:
|
36
|
-
osload_balancers: list[OSLoadBalancer] = octavia_api.get_load_balancers(
|
37
|
-
connection=self.connection
|
38
|
-
)
|
39
|
-
except Exception as e:
|
40
|
-
raise Exception(
|
41
|
-
f"Can not fetch load_balancers for {self.connection.auth['auth_url']} {e}"
|
42
|
-
) from e
|
43
|
-
|
44
|
-
load_balancers: list[LoadBalancer] = []
|
45
|
-
|
46
|
-
with concurrent.futures.ThreadPoolExecutor() as executor:
|
47
|
-
futures = []
|
48
|
-
|
49
|
-
for load_balancer in osload_balancers:
|
50
|
-
logger.info("Importing load_balancer: %s", load_balancer["id"])
|
51
|
-
if load_balancer["id"] != None:
|
52
|
-
futures.append(executor.submit(self._get_load_balancer_info, load_balancer))
|
53
|
-
|
54
|
-
for future in concurrent.futures.as_completed(futures):
|
55
|
-
result = future.result()
|
56
|
-
|
57
|
-
if result != None:
|
58
|
-
load_balancers.append(result)
|
59
|
-
|
60
|
-
logger.info(f"Imported load_balancers for {self.connection.auth['auth_url']}")
|
61
|
-
|
62
|
-
return load_balancers
|
63
|
-
|
64
|
-
def _get_load_balancer_info(self, load_balancer: OSLoadBalancer) -> LoadBalancer:
|
65
|
-
|
66
|
-
lb_flavor_name = None
|
67
|
-
lb_flavor_description = None
|
68
|
-
|
69
|
-
try:
|
70
|
-
lb_flavor = octavia_api.get_load_balancer_flavor(
|
71
|
-
connection=self.connection,
|
72
|
-
flavor_id=load_balancer["flavor_id"]
|
73
|
-
)
|
74
|
-
|
75
|
-
if lb_flavor:
|
76
|
-
lb_flavor_name = lb_flavor["name"]
|
77
|
-
lb_flavor_description = lb_flavor["description"]
|
78
|
-
else:
|
79
|
-
raise Exception(f'No flavor id found for {load_balancer["id"]}')
|
80
|
-
except Exception as e:
|
81
|
-
logger.warning(f"Get load balancer flavor failed {e}")
|
82
|
-
|
83
|
-
try:
|
84
|
-
amphoraes = octavia_api.get_amphoraes(
|
85
|
-
connection=self.connection, load_balancer_id=load_balancer["id"]
|
86
|
-
)
|
87
|
-
|
88
|
-
for amphorae in amphoraes:
|
89
|
-
flavor = self.connection.get_flavor_by_id(amphorae["compute_flavor"])
|
90
|
-
amphorae["ram"] = flavor.ram
|
91
|
-
amphorae["vcpus"] = flavor.vcpus
|
92
|
-
amphorae["flavor_name"] = flavor.name
|
93
|
-
amphorae["flavor_description"] = flavor.description
|
94
|
-
|
95
|
-
load_balancer_ret = LoadBalancer(
|
96
|
-
id=load_balancer["id"],
|
97
|
-
load_balancer_name=load_balancer["name"],
|
98
|
-
operating_status=load_balancer["operating_status"],
|
99
|
-
project_id=load_balancer["project_id"],
|
100
|
-
provisioning_status=load_balancer["provisioning_status"],
|
101
|
-
created_at=load_balancer["created_at"],
|
102
|
-
updated_at=load_balancer["updated_at"],
|
103
|
-
amphoraes=amphoraes,
|
104
|
-
vip=load_balancer["vip_address"],
|
105
|
-
flavor_name=lb_flavor_name,
|
106
|
-
flavor_description=lb_flavor_description
|
107
|
-
)
|
108
|
-
|
109
|
-
return load_balancer_ret
|
110
|
-
except Exception as e:
|
111
|
-
logger.warning(f"Getting lb failed {e}")
|
112
|
-
|
113
|
-
return None
|
1
|
+
import logging
|
2
|
+
|
3
|
+
import concurrent
|
4
|
+
|
5
|
+
from openstack.connection import Connection
|
6
|
+
|
7
|
+
from openstack.load_balancer.v2.load_balancer import LoadBalancer as OSLoadBalancer
|
8
|
+
|
9
|
+
from osi_dump.importer.load_balancer.load_balancer_importer import (
|
10
|
+
LoadBalancerImporter,
|
11
|
+
)
|
12
|
+
from osi_dump.model.load_balancer import LoadBalancer
|
13
|
+
|
14
|
+
import osi_dump.api.octavia as octavia_api
|
15
|
+
|
16
|
+
logger = logging.getLogger(__name__)
|
17
|
+
|
18
|
+
|
19
|
+
class OpenStackLoadBalancerImporter(LoadBalancerImporter):
|
20
|
+
def __init__(self, connection: Connection):
|
21
|
+
self.connection = connection
|
22
|
+
|
23
|
+
def import_load_balancers(self) -> list[LoadBalancer]:
|
24
|
+
"""Import load_balancers information from Openstack
|
25
|
+
|
26
|
+
Raises:
|
27
|
+
Exception: Raises exception if fetching load_balancer failed
|
28
|
+
|
29
|
+
Returns:
|
30
|
+
list[LoadBalancer]: _description_
|
31
|
+
"""
|
32
|
+
|
33
|
+
logger.info(f"Importing load_balancers for {self.connection.auth['auth_url']}")
|
34
|
+
|
35
|
+
try:
|
36
|
+
osload_balancers: list[OSLoadBalancer] = octavia_api.get_load_balancers(
|
37
|
+
connection=self.connection
|
38
|
+
)
|
39
|
+
except Exception as e:
|
40
|
+
raise Exception(
|
41
|
+
f"Can not fetch load_balancers for {self.connection.auth['auth_url']} {e}"
|
42
|
+
) from e
|
43
|
+
|
44
|
+
load_balancers: list[LoadBalancer] = []
|
45
|
+
|
46
|
+
with concurrent.futures.ThreadPoolExecutor() as executor:
|
47
|
+
futures = []
|
48
|
+
|
49
|
+
for load_balancer in osload_balancers:
|
50
|
+
logger.info("Importing load_balancer: %s", load_balancer["id"])
|
51
|
+
if load_balancer["id"] != None:
|
52
|
+
futures.append(executor.submit(self._get_load_balancer_info, load_balancer))
|
53
|
+
|
54
|
+
for future in concurrent.futures.as_completed(futures):
|
55
|
+
result = future.result()
|
56
|
+
|
57
|
+
if result != None:
|
58
|
+
load_balancers.append(result)
|
59
|
+
|
60
|
+
logger.info(f"Imported load_balancers for {self.connection.auth['auth_url']}")
|
61
|
+
|
62
|
+
return load_balancers
|
63
|
+
|
64
|
+
def _get_load_balancer_info(self, load_balancer: OSLoadBalancer) -> LoadBalancer:
|
65
|
+
|
66
|
+
lb_flavor_name = None
|
67
|
+
lb_flavor_description = None
|
68
|
+
|
69
|
+
try:
|
70
|
+
lb_flavor = octavia_api.get_load_balancer_flavor(
|
71
|
+
connection=self.connection,
|
72
|
+
flavor_id=load_balancer["flavor_id"]
|
73
|
+
)
|
74
|
+
|
75
|
+
if lb_flavor:
|
76
|
+
lb_flavor_name = lb_flavor["name"]
|
77
|
+
lb_flavor_description = lb_flavor["description"]
|
78
|
+
else:
|
79
|
+
raise Exception(f'No flavor id found for {load_balancer["id"]}')
|
80
|
+
except Exception as e:
|
81
|
+
logger.warning(f"Get load balancer flavor failed {e}")
|
82
|
+
|
83
|
+
try:
|
84
|
+
amphoraes = octavia_api.get_amphoraes(
|
85
|
+
connection=self.connection, load_balancer_id=load_balancer["id"]
|
86
|
+
)
|
87
|
+
|
88
|
+
for amphorae in amphoraes:
|
89
|
+
flavor = self.connection.get_flavor_by_id(amphorae["compute_flavor"])
|
90
|
+
amphorae["ram"] = flavor.ram
|
91
|
+
amphorae["vcpus"] = flavor.vcpus
|
92
|
+
amphorae["flavor_name"] = flavor.name
|
93
|
+
amphorae["flavor_description"] = flavor.description
|
94
|
+
|
95
|
+
load_balancer_ret = LoadBalancer(
|
96
|
+
id=load_balancer["id"],
|
97
|
+
load_balancer_name=load_balancer["name"],
|
98
|
+
operating_status=load_balancer["operating_status"],
|
99
|
+
project_id=load_balancer["project_id"],
|
100
|
+
provisioning_status=load_balancer["provisioning_status"],
|
101
|
+
created_at=load_balancer["created_at"],
|
102
|
+
updated_at=load_balancer["updated_at"],
|
103
|
+
amphoraes=amphoraes,
|
104
|
+
vip=load_balancer["vip_address"],
|
105
|
+
flavor_name=lb_flavor_name,
|
106
|
+
flavor_description=lb_flavor_description
|
107
|
+
)
|
108
|
+
|
109
|
+
return load_balancer_ret
|
110
|
+
except Exception as e:
|
111
|
+
logger.warning(f"Getting lb failed {e}")
|
112
|
+
|
113
|
+
return None
|
@@ -1,9 +1,9 @@
|
|
1
|
-
from abc import ABC, abstractmethod
|
2
|
-
|
3
|
-
from osi_dump.model.network import Network
|
4
|
-
|
5
|
-
|
6
|
-
class NetworkImporter(ABC):
|
7
|
-
@abstractmethod
|
8
|
-
def import_networks(self) -> list[Network]:
|
9
|
-
pass
|
1
|
+
from abc import ABC, abstractmethod
|
2
|
+
|
3
|
+
from osi_dump.model.network import Network
|
4
|
+
|
5
|
+
|
6
|
+
class NetworkImporter(ABC):
|
7
|
+
@abstractmethod
|
8
|
+
def import_networks(self) -> list[Network]:
|
9
|
+
pass
|
@@ -1,94 +1,94 @@
|
|
1
|
-
import logging
|
2
|
-
|
3
|
-
import concurrent
|
4
|
-
|
5
|
-
from openstack.network.v2.network import Network as OSNetwork
|
6
|
-
from openstack.network.v2.subnet import Subnet as OSSubnet
|
7
|
-
|
8
|
-
from openstack.connection import Connection
|
9
|
-
|
10
|
-
from osi_dump.importer.network.network_importer import NetworkImporter
|
11
|
-
from osi_dump.model.network import Network
|
12
|
-
|
13
|
-
|
14
|
-
logger = logging.getLogger(__name__)
|
15
|
-
|
16
|
-
|
17
|
-
class OpenStackNetworkImporter(NetworkImporter):
|
18
|
-
def __init__(self, connection: Connection):
|
19
|
-
self.connection = connection
|
20
|
-
|
21
|
-
def import_networks(self) -> list[Network]:
|
22
|
-
"""Import networks information from Openstack
|
23
|
-
|
24
|
-
Raises:
|
25
|
-
Exception: Raises exception if fetching networks failed
|
26
|
-
|
27
|
-
Returns:
|
28
|
-
list[Network]: _description_
|
29
|
-
"""
|
30
|
-
|
31
|
-
try:
|
32
|
-
os_networks: list[OSNetwork] = list(self.connection.list_networks())
|
33
|
-
except Exception as e:
|
34
|
-
raise Exception(
|
35
|
-
f"Can not fetch hypervisor for {self.connection.auth['auth_url']}"
|
36
|
-
) from e
|
37
|
-
|
38
|
-
networks: list[Network] = []
|
39
|
-
|
40
|
-
with concurrent.futures.ThreadPoolExecutor() as executor:
|
41
|
-
futures = [
|
42
|
-
executor.submit(self._get_network_info, network)
|
43
|
-
for network in os_networks
|
44
|
-
]
|
45
|
-
for future in concurrent.futures.as_completed(futures):
|
46
|
-
networks.append(future.result())
|
47
|
-
|
48
|
-
logger.info(f"Imported networks for {self.connection.auth['auth_url']}")
|
49
|
-
|
50
|
-
return networks
|
51
|
-
|
52
|
-
|
53
|
-
def _get_network_info(
|
54
|
-
self, network: OSNetwork,
|
55
|
-
) -> Network:
|
56
|
-
|
57
|
-
subnets = self._get_subnets_info(subnet_ids=network.subnet_ids)
|
58
|
-
|
59
|
-
return Network(
|
60
|
-
network_id=network.id,
|
61
|
-
project_id=network.project_id,
|
62
|
-
name=network.name,
|
63
|
-
mtu=network.mtu,
|
64
|
-
port_security_enabled=network.is_port_security_enabled,
|
65
|
-
network_type=network.provider_network_type,
|
66
|
-
physical_network=network.provider_physical_network,
|
67
|
-
segmentation_id=network.provider_segmentation_id,
|
68
|
-
status=network.status,
|
69
|
-
shared=network.is_shared,
|
70
|
-
created_at=network.created_at,
|
71
|
-
updated_at=network.updated_at,
|
72
|
-
subnets=subnets
|
73
|
-
)
|
74
|
-
|
75
|
-
|
76
|
-
def _get_subnets_info(self, subnet_ids: list[str]) -> list[dict]:
|
77
|
-
subnets = []
|
78
|
-
|
79
|
-
for subnet_id in subnet_ids:
|
80
|
-
os_subnet: OSSubnet = self.connection.get_subnet(name_or_id=subnet_id)
|
81
|
-
|
82
|
-
if not os_subnet:
|
83
|
-
continue
|
84
|
-
|
85
|
-
subnets.append({
|
86
|
-
"id": os_subnet.id,
|
87
|
-
"cidr": os_subnet.cidr
|
88
|
-
})
|
89
|
-
|
90
|
-
return subnets
|
91
|
-
|
92
|
-
|
93
|
-
|
1
|
+
import logging
|
2
|
+
|
3
|
+
import concurrent
|
4
|
+
|
5
|
+
from openstack.network.v2.network import Network as OSNetwork
|
6
|
+
from openstack.network.v2.subnet import Subnet as OSSubnet
|
7
|
+
|
8
|
+
from openstack.connection import Connection
|
9
|
+
|
10
|
+
from osi_dump.importer.network.network_importer import NetworkImporter
|
11
|
+
from osi_dump.model.network import Network
|
12
|
+
|
13
|
+
|
14
|
+
logger = logging.getLogger(__name__)
|
15
|
+
|
16
|
+
|
17
|
+
class OpenStackNetworkImporter(NetworkImporter):
|
18
|
+
def __init__(self, connection: Connection):
|
19
|
+
self.connection = connection
|
20
|
+
|
21
|
+
def import_networks(self) -> list[Network]:
|
22
|
+
"""Import networks information from Openstack
|
23
|
+
|
24
|
+
Raises:
|
25
|
+
Exception: Raises exception if fetching networks failed
|
26
|
+
|
27
|
+
Returns:
|
28
|
+
list[Network]: _description_
|
29
|
+
"""
|
30
|
+
|
31
|
+
try:
|
32
|
+
os_networks: list[OSNetwork] = list(self.connection.list_networks())
|
33
|
+
except Exception as e:
|
34
|
+
raise Exception(
|
35
|
+
f"Can not fetch hypervisor for {self.connection.auth['auth_url']}"
|
36
|
+
) from e
|
37
|
+
|
38
|
+
networks: list[Network] = []
|
39
|
+
|
40
|
+
with concurrent.futures.ThreadPoolExecutor() as executor:
|
41
|
+
futures = [
|
42
|
+
executor.submit(self._get_network_info, network)
|
43
|
+
for network in os_networks
|
44
|
+
]
|
45
|
+
for future in concurrent.futures.as_completed(futures):
|
46
|
+
networks.append(future.result())
|
47
|
+
|
48
|
+
logger.info(f"Imported networks for {self.connection.auth['auth_url']}")
|
49
|
+
|
50
|
+
return networks
|
51
|
+
|
52
|
+
|
53
|
+
def _get_network_info(
|
54
|
+
self, network: OSNetwork,
|
55
|
+
) -> Network:
|
56
|
+
|
57
|
+
subnets = self._get_subnets_info(subnet_ids=network.subnet_ids)
|
58
|
+
|
59
|
+
return Network(
|
60
|
+
network_id=network.id,
|
61
|
+
project_id=network.project_id,
|
62
|
+
name=network.name,
|
63
|
+
mtu=network.mtu,
|
64
|
+
port_security_enabled=network.is_port_security_enabled,
|
65
|
+
network_type=network.provider_network_type,
|
66
|
+
physical_network=network.provider_physical_network,
|
67
|
+
segmentation_id=network.provider_segmentation_id,
|
68
|
+
status=network.status,
|
69
|
+
shared=network.is_shared,
|
70
|
+
created_at=network.created_at,
|
71
|
+
updated_at=network.updated_at,
|
72
|
+
subnets=subnets
|
73
|
+
)
|
74
|
+
|
75
|
+
|
76
|
+
def _get_subnets_info(self, subnet_ids: list[str]) -> list[dict]:
|
77
|
+
subnets = []
|
78
|
+
|
79
|
+
for subnet_id in subnet_ids:
|
80
|
+
os_subnet: OSSubnet = self.connection.get_subnet(name_or_id=subnet_id)
|
81
|
+
|
82
|
+
if not os_subnet:
|
83
|
+
continue
|
84
|
+
|
85
|
+
subnets.append({
|
86
|
+
"id": os_subnet.id,
|
87
|
+
"cidr": os_subnet.cidr
|
88
|
+
})
|
89
|
+
|
90
|
+
return subnets
|
91
|
+
|
92
|
+
|
93
|
+
|
94
94
|
|