osi-dump 0.1.2.9__py3-none-any.whl → 0.1.3.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/neutron.py +44 -0
- osi_dump/api/octavia.py +7 -4
- osi_dump/api/placement.py +4 -2
- osi_dump/importer/external_port/openstack_external_port_importer.py +10 -4
- osi_dump/importer/instance/openstack_instance_importer.py +24 -0
- osi_dump/importer/router/openstack_router_importer.py +1 -0
- osi_dump/model/image.py +2 -2
- osi_dump/model/instance.py +2 -0
- osi_dump/model/router.py +4 -2
- osi_dump/model/volume.py +2 -2
- osi_dump/util/openstack_util.py +20 -0
- {osi_dump-0.1.2.9.dist-info → osi_dump-0.1.3.1.dist-info}/METADATA +1 -1
- {osi_dump-0.1.2.9.dist-info → osi_dump-0.1.3.1.dist-info}/RECORD +16 -14
- {osi_dump-0.1.2.9.dist-info → osi_dump-0.1.3.1.dist-info}/WHEEL +1 -1
- {osi_dump-0.1.2.9.dist-info → osi_dump-0.1.3.1.dist-info}/entry_points.txt +0 -0
- {osi_dump-0.1.2.9.dist-info → osi_dump-0.1.3.1.dist-info}/top_level.txt +0 -0
osi_dump/api/neutron.py
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from openstack.connection import Connection
|
4
|
+
from openstack.identity.v3.service import Service
|
5
|
+
from openstack.load_balancer.v2.load_balancer import LoadBalancer
|
6
|
+
|
7
|
+
import osi_dump.util.openstack_util as os_util
|
8
|
+
|
9
|
+
logger = logging.getLogger(__name__)
|
10
|
+
|
11
|
+
|
12
|
+
def get_floating_ip_project(connection: Connection, floating_ip_id: str):
|
13
|
+
neutron_endpoint = os_util.get_endpoint(
|
14
|
+
connection=connection, service_type="network", interface="public"
|
15
|
+
)
|
16
|
+
|
17
|
+
try:
|
18
|
+
url = f"{neutron_endpoint}/v2.0/floatingips/{floating_ip_id}?fields=project_id"
|
19
|
+
response = connection.session.get(url)
|
20
|
+
|
21
|
+
except Exception as e:
|
22
|
+
print(e)
|
23
|
+
|
24
|
+
data = response.json()
|
25
|
+
|
26
|
+
return data["floatingip"]["project_id"]
|
27
|
+
|
28
|
+
|
29
|
+
def get_router_project(connection: Connection, router_id: str):
|
30
|
+
neutron_endpoint = os_util.get_endpoint(
|
31
|
+
connection=connection, service_type="network", interface="internal"
|
32
|
+
)
|
33
|
+
|
34
|
+
try:
|
35
|
+
url = f"{neutron_endpoint}/v2.0/routers/{router_id}?fields=project_id"
|
36
|
+
|
37
|
+
response = connection.session.get(url)
|
38
|
+
|
39
|
+
except Exception as e:
|
40
|
+
print(e)
|
41
|
+
|
42
|
+
data = response.json()
|
43
|
+
|
44
|
+
return data["router"]["project_id"]
|
osi_dump/api/octavia.py
CHANGED
@@ -3,9 +3,12 @@ from openstack.identity.v3.service import Service
|
|
3
3
|
from openstack.load_balancer.v2.load_balancer import LoadBalancer
|
4
4
|
|
5
5
|
|
6
|
+
import osi_dump.util.openstack_util as os_util
|
7
|
+
|
8
|
+
|
6
9
|
def get_load_balancers(connection: Connection) -> list[LoadBalancer]:
|
7
|
-
octavia_endpoint =
|
8
|
-
service_type="load-balancer", interface="public"
|
10
|
+
octavia_endpoint = os_util.get_endpoint(
|
11
|
+
connection=connection, service_type="load-balancer", interface="public"
|
9
12
|
)
|
10
13
|
|
11
14
|
url = f"{octavia_endpoint}/v2.0/lbaas/loadbalancers"
|
@@ -19,8 +22,8 @@ def get_load_balancers(connection: Connection) -> list[LoadBalancer]:
|
|
19
22
|
|
20
23
|
def get_amphoraes(connection: Connection, load_balancer_id: str) -> list[dict]:
|
21
24
|
|
22
|
-
octavia_endpoint =
|
23
|
-
service_type="load-balancer", interface="public"
|
25
|
+
octavia_endpoint = os_util.get_endpoint(
|
26
|
+
connection=connection, service_type="load-balancer", interface="public"
|
24
27
|
)
|
25
28
|
|
26
29
|
url = f"{octavia_endpoint}/v2/octavia/amphorae?load_balancer_id={load_balancer_id}&fields=status&fields=compute_id"
|
osi_dump/api/placement.py
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
from openstack.connection import Connection
|
2
2
|
from openstack.identity.v3.service import Service
|
3
3
|
|
4
|
+
import osi_dump.util.openstack_util as os_util
|
5
|
+
|
4
6
|
|
5
7
|
def get_usage(connection: Connection, resource_provider_id: str):
|
6
8
|
|
7
|
-
placement_endpoint =
|
8
|
-
service_type="placement", interface="public"
|
9
|
+
placement_endpoint = os_util.get_endpoint(
|
10
|
+
connection=connection, service_type="placement", interface="public"
|
9
11
|
)
|
10
12
|
|
11
13
|
url = f"{placement_endpoint}/resource_providers/{resource_provider_id}/usages"
|
@@ -15,6 +15,8 @@ from openstack.network.v2.router import Router as OSRouter
|
|
15
15
|
from osi_dump.importer.external_port.external_port_importer import ExternalPortImporter
|
16
16
|
from osi_dump.model.external_port import ExternalPort
|
17
17
|
|
18
|
+
import osi_dump.api.neutron as osi_neutron
|
19
|
+
|
18
20
|
logger = logging.getLogger(__name__)
|
19
21
|
|
20
22
|
|
@@ -146,11 +148,15 @@ class OpenStackExternalPortImporter(ExternalPortImporter):
|
|
146
148
|
return ""
|
147
149
|
|
148
150
|
def _map_project_id_router(self, device_id: str) -> str:
|
149
|
-
|
151
|
+
project_id = osi_neutron.get_router_project(
|
152
|
+
self.connection, router_id=device_id
|
153
|
+
)
|
150
154
|
|
151
|
-
return
|
155
|
+
return project_id
|
152
156
|
|
153
157
|
def _map_project_id_floating(self, device_id: str) -> str:
|
154
|
-
|
158
|
+
project_id = osi_neutron.get_floating_ip_project(
|
159
|
+
self.connection, floating_ip_id=device_id
|
160
|
+
)
|
155
161
|
|
156
|
-
return
|
162
|
+
return project_id
|
@@ -5,6 +5,8 @@ import concurrent
|
|
5
5
|
from openstack.connection import Connection
|
6
6
|
from openstack.compute.v2.server import Server
|
7
7
|
|
8
|
+
from openstack.compute.v2.flavor import Flavor as OSFlavor
|
9
|
+
|
8
10
|
from osi_dump.importer.instance.instance_importer import InstanceImporter
|
9
11
|
from osi_dump.model.instance import Instance
|
10
12
|
|
@@ -87,6 +89,26 @@ class OpenStackInstanceImporter(InstanceImporter):
|
|
87
89
|
f"Unable to obtain IP address information for instance {server.name}: {e}"
|
88
90
|
)
|
89
91
|
|
92
|
+
vgpus = None
|
93
|
+
vgpu_type = None
|
94
|
+
|
95
|
+
vgpu_metadata_property = "pci_passthrough:alias"
|
96
|
+
|
97
|
+
try:
|
98
|
+
flavor: OSFlavor = self.connection.get_flavor(
|
99
|
+
name_or_id=server.flavor["id"]
|
100
|
+
)
|
101
|
+
|
102
|
+
vgpu_prop: str = flavor.extra_specs[vgpu_metadata_property]
|
103
|
+
|
104
|
+
vgpu_props = vgpu_prop.split(":")
|
105
|
+
|
106
|
+
vgpu_type = vgpu_props[0]
|
107
|
+
vgpus = int(vgpu_props[1])
|
108
|
+
|
109
|
+
except Exception as e:
|
110
|
+
pass
|
111
|
+
|
90
112
|
instance = Instance(
|
91
113
|
instance_id=server.id,
|
92
114
|
instance_name=server.name,
|
@@ -101,6 +123,8 @@ class OpenStackInstanceImporter(InstanceImporter):
|
|
101
123
|
vcpus=server.flavor["vcpus"],
|
102
124
|
created_at=server.created_at,
|
103
125
|
updated_at=server.updated_at,
|
126
|
+
vgpus=vgpus,
|
127
|
+
vgpu_type=vgpu_type,
|
104
128
|
)
|
105
129
|
|
106
130
|
return instance
|
@@ -78,6 +78,7 @@ class OpenStackRouterImporter(RouterImporter):
|
|
78
78
|
external_net_id=external_net_id,
|
79
79
|
external_net_ip=external_net_ip,
|
80
80
|
status=router.status,
|
81
|
+
admin_state=router.is_admin_state_up,
|
81
82
|
project_id=router.project_id,
|
82
83
|
created_at=router.created_at,
|
83
84
|
updated_at=router.updated_at,
|
osi_dump/model/image.py
CHANGED
osi_dump/model/instance.py
CHANGED
osi_dump/model/router.py
CHANGED
@@ -13,8 +13,10 @@ class Router(BaseModel):
|
|
13
13
|
external_net_id: Optional[str]
|
14
14
|
external_net_ip: Optional[str]
|
15
15
|
|
16
|
+
admin_state: Optional[bool]
|
17
|
+
|
16
18
|
status: str
|
17
19
|
project_id: Optional[str]
|
18
20
|
|
19
|
-
created_at: str
|
20
|
-
updated_at: str
|
21
|
+
created_at: Optional[str]
|
22
|
+
updated_at: Optional[str]
|
osi_dump/model/volume.py
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
import urllib
|
2
|
+
import urllib.parse
|
3
|
+
|
4
|
+
from openstack.connection import Connection
|
5
|
+
|
6
|
+
|
7
|
+
def get_endpoint(connection: Connection, service_type: str, interface: str) -> str:
|
8
|
+
endpoint = connection.endpoint_for(service_type=service_type, interface=interface)
|
9
|
+
|
10
|
+
parsed_endpoint = urllib.parse.urlparse(endpoint)
|
11
|
+
|
12
|
+
new_hostname = urllib.parse.urlparse(connection.auth["auth_url"]).hostname
|
13
|
+
|
14
|
+
port = parsed_endpoint.port
|
15
|
+
|
16
|
+
ret = urllib.parse.urlunparse(
|
17
|
+
parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")
|
18
|
+
)
|
19
|
+
|
20
|
+
return ret
|
@@ -2,8 +2,9 @@ osi_dump/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
osi_dump/__main__.py,sha256=fCVTLFipB-P0872_4j7iOJNNosOMBj3YdHr8TH_fhRY,71
|
3
3
|
osi_dump/cli.py,sha256=vLijmcrWieCVK4cSLN2sK9ltWlercw9Zg6yBEvZtPkg,6379
|
4
4
|
osi_dump/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
-
osi_dump/api/
|
6
|
-
osi_dump/api/
|
5
|
+
osi_dump/api/neutron.py,sha256=xRhNkEBDzOoUQHSWmkoI_Tdbcs8kvdS0UpPNkzxQv3g,1170
|
6
|
+
osi_dump/api/octavia.py,sha256=sOFoH89knyuI_gkIxvHfjuZ9mCFzc4zBw8GHN_kb794,1039
|
7
|
+
osi_dump/api/placement.py,sha256=UvIGwAvowmCLobVARut8WnLVV-IdCDniyW9y16l2B_I,523
|
7
8
|
osi_dump/batch_handler/__init__.py,sha256=wsiE42GCjbKgXBzpiahWEDF_-IXCKzr6PyrLn0oEKSc,288
|
8
9
|
osi_dump/batch_handler/external_port_batch_handler.py,sha256=iGm0htGbLkpTX5RFPcrvXrVVn0eeTpavN3u4s58Z_pE,1783
|
9
10
|
osi_dump/batch_handler/flavor_batch_handler.py,sha256=Cxf-rkuW5MrrOyiKi9N3InsdDGku7Bf0CAaPNhhM0hE,1589
|
@@ -52,7 +53,7 @@ osi_dump/exporter/volume/excel_volume_exporter.py,sha256=BhesTGXMQF3BAwHgJMYfnxF
|
|
52
53
|
osi_dump/exporter/volume/volume_exporter.py,sha256=YoPvytC0ctWeWwVcG6pb0XwkF4N0QcGAoUHa3QldkEg,155
|
53
54
|
osi_dump/importer/external_port/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
55
|
osi_dump/importer/external_port/external_port_importer.py,sha256=mLFNwjaYiUNk3DO74GUCXC1eCaWbymGjKJKex3O2z-U,218
|
55
|
-
osi_dump/importer/external_port/openstack_external_port_importer.py,sha256=
|
56
|
+
osi_dump/importer/external_port/openstack_external_port_importer.py,sha256=lAcNOZA_dlFU4ncrRf_07GaA25PP61ynEwrj1r0Xau8,5172
|
56
57
|
osi_dump/importer/flavor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
58
|
osi_dump/importer/flavor/flavor_importer.py,sha256=IfU2L8N8EO4eESnEDirwe9U-GXSTuTcsdrlDxD95tcQ,186
|
58
59
|
osi_dump/importer/flavor/openstack_flavor_importer.py,sha256=y3uFCls7H-l1tu11T_PaEoWghhdxINsf7baRAShXC1w,1876
|
@@ -67,7 +68,7 @@ osi_dump/importer/image/image_importer.py,sha256=6zwAMnS58S2HGwARwebqf4VE9IBQBv5
|
|
67
68
|
osi_dump/importer/image/openstack_image_importer.py,sha256=ffc13qnIGu07OXnIPaKiVxGdufep82RfQoKqLb1bwHc,2455
|
68
69
|
osi_dump/importer/instance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
69
70
|
osi_dump/importer/instance/instance_importer.py,sha256=TaaPgEFVVMRT3mSXrzQkSaSIBPBwwANpEaWCgRsgImc,196
|
70
|
-
osi_dump/importer/instance/openstack_instance_importer.py,sha256=
|
71
|
+
osi_dump/importer/instance/openstack_instance_importer.py,sha256=o5ld1weNM8X4ibZMQYhfhckTkea5TqVEsG4Zs0q2T90,4049
|
71
72
|
osi_dump/importer/load_balancer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
73
|
osi_dump/importer/load_balancer/load_balancer_importer.py,sha256=fzInBlkscqlbhCATeQYXvufc-WHq2pbofTJJifN0zaY,218
|
73
74
|
osi_dump/importer/load_balancer/openstack_load_balancer_importer.py,sha256=sX5ZMHT-QPIuAD4YBwitxj8l5fMvbOsA-BOQxLL84lU,2392
|
@@ -78,7 +79,7 @@ osi_dump/importer/role_assignment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
78
79
|
osi_dump/importer/role_assignment/openstack_role_assignment_importer.py,sha256=bff9rutp2835KA0ibVsvtCZStNgtiTkc7IKUsCmaXRo,3003
|
79
80
|
osi_dump/importer/role_assignment/role_assignment_importer.py,sha256=Faorx0qsgdXjv5y2t-7obpV3wFfbmByx_-8b9yBr7L8,228
|
80
81
|
osi_dump/importer/router/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
|
-
osi_dump/importer/router/openstack_router_importer.py,sha256
|
82
|
+
osi_dump/importer/router/openstack_router_importer.py,sha256=T_Wr45nJrCcp2OOdRawmdQkNBDzczA-3DPx9dlewd4g,2781
|
82
83
|
osi_dump/importer/router/router_importer.py,sha256=L2i0Fnh3iZEsP_PFtx1j0yWTpkmgHsc6Pobii8lDRCo,186
|
83
84
|
osi_dump/importer/volume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
84
85
|
osi_dump/importer/volume/openstack_volume_importer.py,sha256=Tte9fX91oxEoRcUZPJd7g6oH6izcWy8WwFCapg_ZY1M,2454
|
@@ -89,13 +90,13 @@ osi_dump/model/external_port.py,sha256=4FlyG8ZmQO7nNdavmRBhK8ZMsNogmhMqEBa03okvq
|
|
89
90
|
osi_dump/model/flavor.py,sha256=-G8FaH_qiVrgtRxAWhdpC1c9FRdXLRroG-WJ03-DRZ4,318
|
90
91
|
osi_dump/model/floating_ip.py,sha256=CRJufC5ZaxxcbGvdot7Af-sO8uyKbyQK9zHljfBnyFA,427
|
91
92
|
osi_dump/model/hypervisor.py,sha256=pToa-rg7LldKd-h3aNZDJQPy5dhYDIXehq-tr8_xv1I,336
|
92
|
-
osi_dump/model/image.py,sha256=
|
93
|
-
osi_dump/model/instance.py,sha256=
|
93
|
+
osi_dump/model/image.py,sha256=JUr90XQgA6d3EyoZyV-Cyz4Y1GkEBIDhALsf-_eoR-Y,524
|
94
|
+
osi_dump/model/instance.py,sha256=z38nK0s5bmZXRMItJVsnZ1rQX6NO6skXR49ZojgSb2Q,548
|
94
95
|
osi_dump/model/load_balancer.py,sha256=T5RU6gm36ePYCh3KQ_OYO44FHMfxTcSNaiuKP5E_9CY,352
|
95
96
|
osi_dump/model/project.py,sha256=3fNsDcWxuRVBS96W98C_Fia82qt14InjUM7n7rBCX6E,679
|
96
97
|
osi_dump/model/role_assignment.py,sha256=fNt05y4aFF6b71Yps_EHzWavv8wF-jYx7gd3WAhqy6Y,310
|
97
|
-
osi_dump/model/router.py,sha256=
|
98
|
-
osi_dump/model/volume.py,sha256=
|
98
|
+
osi_dump/model/router.py,sha256=bT533cP50XrzPzwbkXwjdnmm5j5nM8jVEIqmfJ2T8G8,416
|
99
|
+
osi_dump/model/volume.py,sha256=CPlZ2NUKLZ2QI-WYNcxFrpd2kYEHPITpCztdGRGBHgM,391
|
99
100
|
osi_dump/os_connection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
100
101
|
osi_dump/os_connection/get_connections.py,sha256=1zeir4cEtzJOUOn53zUmlD9lWMvYXhuRr0IhI5U1DAw,1753
|
101
102
|
osi_dump/util/__init__.py,sha256=obJLcem8iWbVC3NIk4GHBMwwAsW-FcrwRdfzphuDjpY,330
|
@@ -104,10 +105,11 @@ osi_dump/util/excel_autosize_column.py,sha256=zzQ6uXkQhHAqVn9fUAgNjoCH_HiNEC9Dcj
|
|
104
105
|
osi_dump/util/excel_sort_sheet.py,sha256=o4jXtP1ZFYtAGzkAP5S8Tym4h-SEoFBAI3j24y-24UM,1047
|
105
106
|
osi_dump/util/export_data_excel.py,sha256=VYSxDBZ7dgSbTj3n_8RRPqe183tILNh6wJW-UnFvJUU,882
|
106
107
|
osi_dump/util/extract_hostname.py,sha256=IpdklGHevmtRu67xeSRE_5n2mvWGI1sDsnJwExo_AR0,111
|
108
|
+
osi_dump/util/openstack_util.py,sha256=QduDfMiBh-ZdHmFkSK9XI0kZWVL-8rR1D6iAvI7CO0I,544
|
107
109
|
osi_dump/util/panda_excel.py,sha256=GHHLguKLMm1sq4FHTPHABTjx7IqpOcGF_3OJT-cJORE,1011
|
108
110
|
osi_dump/util/validate_dir_path.py,sha256=pL_OrY8JnNwk3vj6Zp6bsZtgHXhszSGRoqIt-1G5S90,507
|
109
|
-
osi_dump-0.1.
|
110
|
-
osi_dump-0.1.
|
111
|
-
osi_dump-0.1.
|
112
|
-
osi_dump-0.1.
|
113
|
-
osi_dump-0.1.
|
111
|
+
osi_dump-0.1.3.1.dist-info/METADATA,sha256=ZUpqpd-1QxXiRB6EtBSWPt-rik8t1U6Ti_O8kobHjCM,675
|
112
|
+
osi_dump-0.1.3.1.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
|
113
|
+
osi_dump-0.1.3.1.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
|
114
|
+
osi_dump-0.1.3.1.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
|
115
|
+
osi_dump-0.1.3.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|