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.
@@ -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 = connection.endpoint_for(
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 = connection.endpoint_for(
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 = connection.endpoint_for(
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
- router: OSRouter = self.connection.get_router(name_or_id=device_id)
151
+ project_id = osi_neutron.get_router_project(
152
+ self.connection, router_id=device_id
153
+ )
150
154
 
151
- return router.project_id
155
+ return project_id
152
156
 
153
157
  def _map_project_id_floating(self, device_id: str) -> str:
154
- floating_ip: OSFloatingIP = self.connection.get_floating_ip(id=device_id)
158
+ project_id = osi_neutron.get_floating_ip_project(
159
+ self.connection, floating_ip_id=device_id
160
+ )
155
161
 
156
- return floating_ip.project_id
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
@@ -23,5 +23,5 @@ class Image(BaseModel):
23
23
  virtual_size: Optional[int]
24
24
  visibility: str
25
25
 
26
- created_at: str
27
- updated_at: str
26
+ created_at: Optional[str]
27
+ updated_at: Optional[str]
@@ -16,6 +16,8 @@ class Instance(BaseModel):
16
16
  status: str
17
17
  ram: int
18
18
  vcpus: int
19
+ vgpus: Optional[int]
20
+ vgpu_type: Optional[str]
19
21
  hypervisor: Optional[str]
20
22
  created_at: str
21
23
  updated_at: str
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
@@ -19,5 +19,5 @@ class Volume(BaseModel):
19
19
 
20
20
  snapshots: Optional[list[str]]
21
21
 
22
- updated_at: str
23
- created_at: str
22
+ updated_at: Optional[str]
23
+ created_at: Optional[str]
@@ -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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osi-dump
3
- Version: 0.1.2.9
3
+ Version: 0.1.3.1
4
4
  Summary: OpenStack information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -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/octavia.py,sha256=_vuuZ-Pcj4oV1A3Sf_RSiuc_UxcHXKLty87HEyipPGg,950
6
- osi_dump/api/placement.py,sha256=9yADLulo1HfUnPLE7IJt4ZY8e2jRTaoeV4J4MMiKCew,455
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=RC2_ren_62oFPNJS_mkfVAuN_Yyt8JJBkxgewummWQs,5071
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=hTCdrTvY-hsjXb15gDmpKaKTjJJACUVSRahvHsDOi38,3445
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=-8xJ9hV7Y9ZpUXIEl3PHsGvggp9r57-A9hL8Tm_lb7c,2731
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=5dXlBsiT0BWo5orQj38jEGtiFEwiRCJDmdhghg3RcTc,504
93
- osi_dump/model/instance.py,sha256=DSQ0F0CTHL0f_GMZ4GwH2D-Q_KvRmrNyCWTpCzDlqBs,494
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=nO0XW0mpabr4ajM40Biuva63N8YWulZUrhH5kmPnKgI,363
98
- osi_dump/model/volume.py,sha256=1p5Xw0LPxfroJwSYtE-n_Gv4MsRDA_sSvc7SQY_Uo8I,371
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.2.9.dist-info/METADATA,sha256=wKSCwOTVb8CW-3s1qjjvcFZrI2uxFkpKkRJltfSUTok,675
110
- osi_dump-0.1.2.9.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
111
- osi_dump-0.1.2.9.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
112
- osi_dump-0.1.2.9.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
113
- osi_dump-0.1.2.9.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.2.0)
2
+ Generator: setuptools (73.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5