osi-dump 0.1.3.3.3.9__py3-none-any.whl → 0.1.3.3.4.1__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/api/keystone.py CHANGED
@@ -9,6 +9,29 @@ import osi_dump.util.openstack_util as os_util
9
9
  logger = logging.getLogger(__name__)
10
10
 
11
11
 
12
+ def get_users(connection: Connection):
13
+
14
+ keystone_endpoints = os_util.get_endpoints(connection=connection, service_type="identity", interface="public")
15
+
16
+ for keystone_endpoint in keystone_endpoints:
17
+ try:
18
+ if "v3" not in keystone_endpoint:
19
+ url = f"{keystone_endpoint}/v3/users"
20
+ else:
21
+ url = f"{keystone_endpoint}/users"
22
+
23
+ response = connection.session.get(url)
24
+ if response.status_code == 200:
25
+ break
26
+ except Exception as e:
27
+ logger.info(e)
28
+
29
+
30
+ if response is None:
31
+ return []
32
+
33
+ return response.json()["users"]
34
+
12
35
  def get_role_assignments(connection: Connection):
13
36
  keystone_endpoint = connection.endpoint_for(service_type="identity", interface="public")
14
37
 
@@ -0,0 +1,51 @@
1
+ import logging
2
+
3
+ from openstack.connection import Connection
4
+
5
+ from osi_dump.exporter.network.network_exporter import NetworkExporter
6
+ from osi_dump.exporter.network.excel_network_exporter import (
7
+ ExcelNetworkExporter,
8
+ )
9
+
10
+ from osi_dump.importer.network.network_importer import NetworkImporter
11
+ from osi_dump.importer.network.openstack_network_importer import (
12
+ OpenStackNetworkImporter,
13
+ )
14
+
15
+
16
+ from osi_dump import util
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ class NetworkBatchHandler:
22
+ def __init__(self):
23
+ self._importer_exporter_list: list[tuple[NetworkImporter, NetworkExporter]] = []
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 = OpenStackNetworkImporter(connection)
30
+
31
+ sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-network"
32
+ exporter = ExcelNetworkExporter(
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: NetworkImporter, exporter: NetworkExporter):
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
+ networks = importer.import_networks()
47
+
48
+ exporter.export_networks(networks=networks)
49
+ except Exception as e:
50
+ logger.warning(e)
51
+ logger.warning("Skipping...")
osi_dump/cli.py CHANGED
@@ -19,6 +19,8 @@ app = typer.Typer()
19
19
 
20
20
 
21
21
  from osi_dump.batch_handler.flavor_batch_handler import FlavorBatchHandler
22
+ from osi_dump.batch_handler.network_batch_handler import NetworkBatchHandler
23
+
22
24
  from osi_dump.batch_handler.image_batch_handler import ImageBatchHandler
23
25
  from osi_dump.batch_handler.volume_batch_handler import VolumeBatchHandler
24
26
  from osi_dump.os_connection.get_connections import get_connections
@@ -149,6 +151,14 @@ def _external_port(connections, output_path: str):
149
151
 
150
152
  _external_batch_handler.process()
151
153
 
154
+ def _network(connections, output_path: str):
155
+ _network_batch_handler = NetworkBatchHandler()
156
+
157
+ _network_batch_handler.add_importer_exporter_from_openstack_connections(
158
+ connections, output_file=output_path
159
+ )
160
+
161
+ _network_batch_handler.process()
152
162
 
153
163
  def inner_main(file_path: str, output_path: str):
154
164
 
@@ -156,27 +166,29 @@ def inner_main(file_path: str, output_path: str):
156
166
 
157
167
  connections = get_connections(file_path=file_path)
158
168
 
159
- _instance(connections=connections, output_path=output_path)
169
+ #_instance(connections=connections, output_path=output_path)
160
170
 
161
- _floating_ip(connections=connections, output_path=output_path)
171
+ #_floating_ip(connections=connections, output_path=output_path)
162
172
 
163
- _volume(connections=connections, output_path=output_path)
173
+ #_volume(connections=connections, output_path=output_path)
164
174
 
165
- _hypervisor(connections=connections, output_path=output_path)
175
+ #_hypervisor(connections=connections, output_path=output_path)
166
176
 
167
- _project(connections=connections, output_path=output_path)
177
+ #_project(connections=connections, output_path=output_path)
168
178
 
169
- _image(connections=connections, output_path=output_path)
179
+ #_image(connections=connections, output_path=output_path)
170
180
 
171
- _flavor(connections=connections, output_path=output_path)
181
+ #_flavor(connections=connections, output_path=output_path)
172
182
 
173
183
  _role_assignment(connections=connections, output_path=output_path)
174
184
 
175
- _load_balancer(connections=connections, output_path=output_path)
185
+ #_load_balancer(connections=connections, output_path=output_path)
186
+
187
+ #_router(connections=connections, output_path=output_path)
176
188
 
177
- _router(connections=connections, output_path=output_path)
189
+ #_external_port(connections=connections, output_path=output_path)
178
190
 
179
- _external_port(connections=connections, output_path=output_path)
191
+ #_network(connections=connections, output_path=output_path)
180
192
 
181
193
  util.excel_autosize_column(output_path)
182
194
 
@@ -27,4 +27,4 @@ class ExcelFlavorExporter(FlavorExporter):
27
27
 
28
28
  logger.info(f"Exported flavors for {self.sheet_name}")
29
29
  except Exception as e:
30
- logger.warning(f"Exporting floating ips for {self.sheet_name} error: {e}")
30
+ logger.warning(f"Exporting flavors for {self.sheet_name} error: {e}")
File without changes
@@ -0,0 +1,32 @@
1
+ import logging
2
+
3
+
4
+ import pandas as pd
5
+
6
+
7
+ from osi_dump.exporter.network.network_exporter import NetworkExporter
8
+
9
+ from osi_dump.model.network import Network
10
+
11
+ from osi_dump import util
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class ExcelNetworkExporter(NetworkExporter):
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_networks(self, networks: list[Network]):
22
+ df = pd.json_normalize([network.model_dump() for network in networks])
23
+
24
+ df = util.expand_list_column(df, "subnets")
25
+
26
+ logger.info(f"Exporting networks for {self.sheet_name}")
27
+ try:
28
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
29
+
30
+ logger.info(f"Exported networks for {self.sheet_name}")
31
+ except Exception as e:
32
+ logger.warning(f"Exporting networks for {self.sheet_name} error: {e}")
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class NetworkExporter(ABC):
5
+ @abstractmethod
6
+ def export_networks(self, networks, output_file: str):
7
+ pass
@@ -56,6 +56,23 @@ class OpenStackHypervisorImporter(HypervisorImporter):
56
56
 
57
57
  return hypervisors
58
58
 
59
+
60
+ def _normalize_hypervisor_aggregate(self, hypervisors: list[Hypervisor]):
61
+
62
+ aggregate_id_map = {
63
+
64
+ }
65
+
66
+ aggregates: list[list[dict]] = [
67
+
68
+ ]
69
+
70
+ for hypervisor in hypervisors:
71
+ aggregates.append(hypervisor.aggregates)
72
+
73
+ def _swap_element(array, i, j):
74
+ array[i], array[j] = array[j], array[i]
75
+
59
76
  def _get_hypervisor_info(
60
77
  self, hypervisor: OSHypervisor, aggregates: list[OSAggregate]
61
78
  ) -> Hypervisor:
File without changes
@@ -0,0 +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
@@ -0,0 +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
+
94
+
@@ -4,13 +4,15 @@ import concurrent
4
4
 
5
5
  from openstack.connection import Connection
6
6
  from openstack.identity.v3.role_assignment import RoleAssignment as OSRoleAssignment
7
+ from openstack.identity.v3.user import User as OSUser
8
+
7
9
 
8
10
  from osi_dump.importer.role_assignment.role_assignment_importer import (
9
11
  RoleAssignmentImporter,
10
12
  )
11
13
  from osi_dump.model.role_assignment import RoleAssignment
12
14
 
13
- from osi_dump.api.keystone import get_role_assignments
15
+ from osi_dump.api.keystone import get_role_assignments, get_users
14
16
 
15
17
  logger = logging.getLogger(__name__)
16
18
 
@@ -19,14 +21,14 @@ class OpenStackRoleAssignmentImporter(RoleAssignmentImporter):
19
21
  def __init__(self, connection: Connection):
20
22
  self.connection = connection
21
23
 
22
- self.users = {}
24
+ self.users: dict[str, dict] = {}
23
25
  self.roles = {}
24
26
 
25
27
  def _get_users(self):
26
- os_users = self.connection.identity.users()
28
+ os_users = get_users(self.connection)
27
29
 
28
30
  for os_user in os_users:
29
- self.users[os_user.id] = os_user.name
31
+ self.users[os_user["id"]] = os_user
30
32
 
31
33
  def _get_roles(self):
32
34
  os_roles = self.connection.identity.roles()
@@ -90,7 +92,7 @@ class OpenStackRoleAssignmentImporter(RoleAssignmentImporter):
90
92
  role_id = None
91
93
 
92
94
  try:
93
- user_id = role_assignment["user"]["id"]
95
+ user_id: str = role_assignment["user"]["id"]
94
96
  except Exception as e:
95
97
  logger.warning(f"Can not get user id: {e}")
96
98
 
@@ -102,8 +104,11 @@ class OpenStackRoleAssignmentImporter(RoleAssignmentImporter):
102
104
  user_name = None
103
105
  role_name = None
104
106
 
107
+ password_expires_at = None
108
+ options = None
109
+
105
110
  try:
106
- user_name = self.users[user_id]
111
+ user_name = self.users[user_id]["name"]
107
112
  except Exception as e:
108
113
  logger.warning(f"Can not get user name: {e}")
109
114
 
@@ -112,12 +117,25 @@ class OpenStackRoleAssignmentImporter(RoleAssignmentImporter):
112
117
  except Exception as e:
113
118
  logger.warning(f"Can not get role name: {e}")
114
119
 
120
+ try:
121
+ password_expires_at = self.users[user_id]["password_expires_at"]
122
+ except Exception as e:
123
+ logger.warning(f"Can not get password expires at: {e}")
124
+
125
+
126
+ try:
127
+ options = self.users[user_id]["options"]
128
+ except Exception as e:
129
+ logger.warning(f"Can not get option")
130
+
115
131
  role_assignment_ret = RoleAssignment(
116
132
  user_id=user_id,
117
133
  user_name=user_name,
118
134
  role_id=role_id,
119
135
  role_name=role_name,
120
136
  scope=role_assignment["scope"],
137
+ password_expires_at=password_expires_at,
138
+ options=options
121
139
  )
122
140
 
123
141
  return role_assignment_ret
@@ -0,0 +1,26 @@
1
+ from typing import Optional
2
+ from pydantic import BaseModel, ConfigDict
3
+
4
+
5
+
6
+ class Network(BaseModel):
7
+ model_config = ConfigDict(strict=True)
8
+
9
+ network_id: str
10
+ project_id: str
11
+ name: Optional[str]
12
+
13
+ subnets: Optional[list[dict]] # {"id": str, "cidr": "str"}
14
+ mtu: int
15
+
16
+ port_security_enabled: Optional[bool]
17
+
18
+ network_type: str
19
+ segmentation_id: Optional[int]
20
+ physical_network: Optional[str]
21
+
22
+ status: Optional[str]
23
+ shared: Optional[bool]
24
+
25
+ created_at: Optional[str]
26
+ updated_at: Optional[str]
@@ -14,4 +14,8 @@ class RoleAssignment(BaseModel):
14
14
 
15
15
  role_name: Optional[str]
16
16
 
17
+ options: Optional[dict]
18
+
19
+ password_expires_at: Optional[str]
20
+
17
21
  scope: Optional[dict]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: osi-dump
3
- Version: 0.1.3.3.3.9
3
+ Version: 0.1.3.3.4.1
4
4
  Summary: OpenStack information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -1,8 +1,8 @@
1
1
  osi_dump/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  osi_dump/__main__.py,sha256=fCVTLFipB-P0872_4j7iOJNNosOMBj3YdHr8TH_fhRY,71
3
- osi_dump/cli.py,sha256=vLijmcrWieCVK4cSLN2sK9ltWlercw9Zg6yBEvZtPkg,6379
3
+ osi_dump/cli.py,sha256=4fMPhzFrVg2qbDolP9LJchsSoOzAuHLTffBNiAiB5eU,6795
4
4
  osi_dump/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- osi_dump/api/keystone.py,sha256=3oCqzf1cHKs3THOiq6t39_OXNHHTVK9hwCnLVlP8FYg,1446
5
+ osi_dump/api/keystone.py,sha256=HgHBJL5c6BTXNhT6pPf2XM2tL7Uu6V4HokXnjHGQ_wg,2111
6
6
  osi_dump/api/neutron.py,sha256=pag_d6MsxA1gOUit4bvVUaTiTrPqLJjwz9KU_QSpxwM,1788
7
7
  osi_dump/api/octavia.py,sha256=XqG406SuoJUGohAtREsTcBatLCANUM-dFSdXvdQ740I,2586
8
8
  osi_dump/api/placement.py,sha256=yoWzg39b8nK2E1nrxDhLxLsa7FcBTw57gfy8b5F5ijc,1096
@@ -14,6 +14,7 @@ osi_dump/batch_handler/hypervisor_batch_handler.py,sha256=vkv6SAx1arPNVvFJ6RyvbJ
14
14
  osi_dump/batch_handler/image_batch_handler.py,sha256=aGF_jnHXuBc7IRFoLLCrSFD8h4TP0g98T_NtBXkZjd4,1564
15
15
  osi_dump/batch_handler/instance_batch_handler.py,sha256=tiHAdhH76BT9-ymnTmTr962cMUTqpPpAQyPSePKEgSM,1761
16
16
  osi_dump/batch_handler/load_balancer_batch_handler.py,sha256=rpbi-n-KsYPGDmlRND5zqcVW6DYVgffmE5najUf2wT4,1796
17
+ osi_dump/batch_handler/network_batch_handler.py,sha256=Ra4Sz3IpjG7-k5-VGHL1W7pIsrfdMOo6dR35CozGcOs,1614
17
18
  osi_dump/batch_handler/project_batch_handler.py,sha256=uMHx_s-Z4tO1MBah5X-T5d6tLr0qUJuPIR_7RHJ64ck,1626
18
19
  osi_dump/batch_handler/role_assignment_batch_handler.py,sha256=45TtVDDRjp9scpW9GCxbl-b6MoTm_kp0YHchEz630Zk,1882
19
20
  osi_dump/batch_handler/router_batch_handler.py,sha256=XelVNw_2u00Rdnz20SI2HIPPJKwz3623BbceMGnDS8Q,1587
@@ -23,7 +24,7 @@ osi_dump/exporter/external_port/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
23
24
  osi_dump/exporter/external_port/excel_external_port_exporter.py,sha256=FgLQersxmb-g2el02PxMFWSO0Chn5YdxEMXfDM_Jtn4,1108
24
25
  osi_dump/exporter/external_port/external_port_exporter.py,sha256=LK7r_Do87ZONgmlH8FdtB-k1C_tT0ie3I0dCQyb6OUA,169
25
26
  osi_dump/exporter/flavor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- osi_dump/exporter/flavor/excel_flavor_exporter.py,sha256=_wNVToj0FsIkaLbqn7-TWETrtUftBM1Pjr-0WaBJtBI,876
27
+ osi_dump/exporter/flavor/excel_flavor_exporter.py,sha256=1-RJTG-fY2faK1L4B1nHTl1PRPWKgiX_c_CKPXIvbnA,871
27
28
  osi_dump/exporter/flavor/flavor_exporter.py,sha256=-zQ8776yk7vHpiZUOcX61V8KxA40AAq8foV7fD0i1g0,155
28
29
  osi_dump/exporter/floating_ip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
30
  osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py,sha256=Bn1yZTvZ8dP3EhVHW-Pr4O9TC2Cz2RbJaz_vRE66xTQ,975
@@ -40,6 +41,9 @@ osi_dump/exporter/instance/instance_exporter.py,sha256=5CuKKvTa5S2_Ds7fap6tle4go
40
41
  osi_dump/exporter/load_balancer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
42
  osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py,sha256=gffLcLr8uvSbaf7rwZDgNRCPKh8bMIs2ShHtyotpKmw,1105
42
43
  osi_dump/exporter/load_balancer/load_balancer_exporter.py,sha256=Z5uvEKz1UG_dpAw5KVh-IX5PWLzlPt7pV9773bkgjXs,175
44
+ osi_dump/exporter/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ osi_dump/exporter/network/excel_network_exporter.py,sha256=O007PFFPSmDzOagsGGv-zcSEZQVVLRIBLIOSuMl4vYY,950
46
+ osi_dump/exporter/network/network_exporter.py,sha256=IprGl-jTLKxslEd1skiMzEQ2Qvl9Yu5yNm2uijqlFnA,158
43
47
  osi_dump/exporter/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
48
  osi_dump/exporter/project/excel_project_exporter.py,sha256=2U3Tvn_Bk4xEQk3Tmh-oj5WXAG1bfxI6m7WVPF1upQw,916
45
49
  osi_dump/exporter/project/project_exporter.py,sha256=q3VAmtmBP4iq9YEW9Eescm3vjAVM4Ev3BDjzkGz9Pgo,158
@@ -63,7 +67,7 @@ osi_dump/importer/floating_ip/floating_ip_importer.py,sha256=2_lCZYF-r2dgdL4Yzws
63
67
  osi_dump/importer/floating_ip/openstack_floating_ip_importer.py,sha256=xuALHyiyb4LdRgFN0hZvOx0pImKpGsLUtPWW_1q52gc,2286
64
68
  osi_dump/importer/hypervisor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
69
  osi_dump/importer/hypervisor/hypervisor_importer.py,sha256=JuoJBltqFYhH-Ql9TLUPHX2YurS0JFV7Augrc6bDJ5Q,206
66
- osi_dump/importer/hypervisor/openstack_hypervisor_importer.py,sha256=lVxVGWKNlNAPhEHC_nWg9cxIGz8Lv6AVQXwIgQsWnP0,3923
70
+ osi_dump/importer/hypervisor/openstack_hypervisor_importer.py,sha256=Y5JYSfmkwXMljdqhDyFk2LHGL7kHN9YDKjHnlhaiG-o,4284
67
71
  osi_dump/importer/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
72
  osi_dump/importer/image/image_importer.py,sha256=6zwAMnS58S2HGwARwebqf4VE9IBQBv5Ot6nmcn9H4fY,181
69
73
  osi_dump/importer/image/openstack_image_importer.py,sha256=dqQAsNDPljTDN82YPEjBbPDjvLOCtad_hgRWhIpCWXw,2585
@@ -73,11 +77,14 @@ osi_dump/importer/instance/openstack_instance_importer.py,sha256=HvA1hYLAneY0KtD
73
77
  osi_dump/importer/load_balancer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
78
  osi_dump/importer/load_balancer/load_balancer_importer.py,sha256=fzInBlkscqlbhCATeQYXvufc-WHq2pbofTJJifN0zaY,218
75
79
  osi_dump/importer/load_balancer/openstack_load_balancer_importer.py,sha256=ocZ8JcjXoxPL_6esNetapaeOrXUVs5tNqb83hL6ih-U,4033
80
+ osi_dump/importer/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ osi_dump/importer/network/network_importer.py,sha256=LVak9W8NEu3cWHytttaJlmJ8FrtwaLerY85ZSzAAxOc,191
82
+ osi_dump/importer/network/openstack_network_importer.py,sha256=1Z74Yb3dA8Z0UmFUHMna2suwB8GZxQ06O5Vfpx0usxo,2703
76
83
  osi_dump/importer/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
84
  osi_dump/importer/project/openstack_project_importer.py,sha256=nQRInUb0vtm57dQNLxSoUFnGrNbAytK2Zl0FaUMPqBc,4964
78
85
  osi_dump/importer/project/project_importer.py,sha256=jwEvxteFbSwyWMV8hKAtf5Lo2bZysWkQ1L_NVUE8XOQ,191
79
86
  osi_dump/importer/role_assignment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- osi_dump/importer/role_assignment/openstack_role_assignment_importer.py,sha256=p7Ocn27Esh-QipqNyQCviO6xt4TTWuIbqiNQ8oAPVpY,3557
87
+ osi_dump/importer/role_assignment/openstack_role_assignment_importer.py,sha256=KACI5Yyzk2L3O0yC9MdDpStOOL11EaxTfqD8A0qvZiI,4125
81
88
  osi_dump/importer/role_assignment/role_assignment_importer.py,sha256=Faorx0qsgdXjv5y2t-7obpV3wFfbmByx_-8b9yBr7L8,228
82
89
  osi_dump/importer/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
90
  osi_dump/importer/router/openstack_router_importer.py,sha256=T_Wr45nJrCcp2OOdRawmdQkNBDzczA-3DPx9dlewd4g,2781
@@ -94,8 +101,9 @@ osi_dump/model/hypervisor.py,sha256=6dWEMVrrjOQolX936FqY994S7RAXpMPATpsLPVNeCyk,
94
101
  osi_dump/model/image.py,sha256=JUr90XQgA6d3EyoZyV-Cyz4Y1GkEBIDhALsf-_eoR-Y,524
95
102
  osi_dump/model/instance.py,sha256=8puhIKWWfoAaTURXb7XUpjG0lQ4nb0UwrsrTQdDaFbs,639
96
103
  osi_dump/model/load_balancer.py,sha256=3v4j949FM8jAwroWKE1ubaii2eM2XW9DWKl7HjtCdno,571
104
+ osi_dump/model/network.py,sha256=xwLwayfZ_7Ql8ZDHQhgTFC8LA8yjydtL8uefo-AXMuE,540
97
105
  osi_dump/model/project.py,sha256=S5BtjeMoxZfiJ7z7G_5jYfp5mMTzlPi7DWT5fuBGCTw,749
98
- osi_dump/model/role_assignment.py,sha256=fNt05y4aFF6b71Yps_EHzWavv8wF-jYx7gd3WAhqy6Y,310
106
+ osi_dump/model/role_assignment.py,sha256=Azz5qYMfoUeot5GTZr7NTz3nYBeuIEXIhx3oWRLR_cg,379
99
107
  osi_dump/model/router.py,sha256=K8B6w97DYcFNRPmXN6CAZatm_0XSo2qIFVTvgdMfufY,417
100
108
  osi_dump/model/volume.py,sha256=C1WdZ_GwlL-iaBqrFpgPMfIQZj3ST2KQHzwXceYxRZg,423
101
109
  osi_dump/os_connection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -109,8 +117,8 @@ osi_dump/util/extract_hostname.py,sha256=IpdklGHevmtRu67xeSRE_5n2mvWGI1sDsnJwExo
109
117
  osi_dump/util/openstack_util.py,sha256=_o8LiRmQKtxQ8hU3rbrMNwIAxt0-aWD2rjq-NvVdK9E,1299
110
118
  osi_dump/util/panda_excel.py,sha256=owr8AffIxqN3yY8kIv55Ox4j2dRz7kXZvSZFZeft8dw,734
111
119
  osi_dump/util/validate_dir_path.py,sha256=pL_OrY8JnNwk3vj6Zp6bsZtgHXhszSGRoqIt-1G5S90,507
112
- osi_dump-0.1.3.3.3.9.dist-info/METADATA,sha256=MxINaxAttblycPdR50wAa0D7qsgbOBbjaeGB4WV0SdE,685
113
- osi_dump-0.1.3.3.3.9.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
114
- osi_dump-0.1.3.3.3.9.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
115
- osi_dump-0.1.3.3.3.9.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
116
- osi_dump-0.1.3.3.3.9.dist-info/RECORD,,
120
+ osi_dump-0.1.3.3.4.1.dist-info/METADATA,sha256=uxG89PHVOyNmjStjLeL3viz1uKNq0UgwxPN4hwpBVvw,685
121
+ osi_dump-0.1.3.3.4.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
122
+ osi_dump-0.1.3.3.4.1.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
123
+ osi_dump-0.1.3.3.4.1.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
124
+ osi_dump-0.1.3.3.4.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5