osi-dump 0.1.2.8__py3-none-any.whl → 0.1.3__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,42 @@
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
+ logger = logging.getLogger(__name__)
8
+
9
+
10
+ def get_floating_ip_project(connection: Connection, floating_ip_id: str):
11
+ neutron_endpoint = connection.endpoint_for(
12
+ service_type="network", interface="public"
13
+ )
14
+
15
+ try:
16
+ url = f"{neutron_endpoint}/v2.0/floatingips/{floating_ip_id}?fields=project_id"
17
+ response = connection.session.get(url)
18
+
19
+ except Exception as e:
20
+ print(e)
21
+
22
+ data = response.json()
23
+
24
+ return data["floatingip"]["project_id"]
25
+
26
+
27
+ def get_router_project(connection: Connection, router_id: str):
28
+ octavia_endpoint = connection.endpoint_for(
29
+ service_type="network", interface="internal"
30
+ )
31
+
32
+ try:
33
+ url = f"{octavia_endpoint}/v2.0/routers/{router_id}?fields=project_id"
34
+
35
+ response = connection.session.get(url)
36
+
37
+ except Exception as e:
38
+ print(e)
39
+
40
+ data = response.json()
41
+
42
+ return data["router"]["project_id"]
@@ -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,28 @@ 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
+ logger.warning(
111
+ f"Unable to obtain GPU information for instance {server.name}: {e}"
112
+ )
113
+
90
114
  instance = Instance(
91
115
  instance_id=server.id,
92
116
  instance_name=server.name,
@@ -101,6 +125,8 @@ class OpenStackInstanceImporter(InstanceImporter):
101
125
  vcpus=server.flavor["vcpus"],
102
126
  created_at=server.created_at,
103
127
  updated_at=server.updated_at,
128
+ vgpus=vgpus,
129
+ vgpu_type=vgpu_type,
104
130
  )
105
131
 
106
132
  return instance
osi_dump/model/image.py CHANGED
@@ -12,7 +12,7 @@ class Image(BaseModel):
12
12
  min_disk: int
13
13
  min_ram: int
14
14
  image_name: Optional[str]
15
- owner: str
15
+ owner: Optional[str]
16
16
 
17
17
  os_distro: Optional[str]
18
18
  properties: Optional[dict]
@@ -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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osi-dump
3
- Version: 0.1.2.8
3
+ Version: 0.1.3
4
4
  Summary: OpenStack information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -2,6 +2,7 @@ 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/neutron.py,sha256=m3pfDbwbE4sWKMYOWPiFDK4PsCHxiJmn4QWu29vvcYw,1082
5
6
  osi_dump/api/octavia.py,sha256=_vuuZ-Pcj4oV1A3Sf_RSiuc_UxcHXKLty87HEyipPGg,950
6
7
  osi_dump/api/placement.py,sha256=9yADLulo1HfUnPLE7IJt4ZY8e2jRTaoeV4J4MMiKCew,455
7
8
  osi_dump/batch_handler/__init__.py,sha256=wsiE42GCjbKgXBzpiahWEDF_-IXCKzr6PyrLn0oEKSc,288
@@ -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=FJqVnow-RdI8RI9geJ-E4teo_HTuQALupeFrK8HtUmc,4158
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
@@ -89,8 +90,8 @@ 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=bCwxdldJC7XpCJZ6Se6kIcQlc3qSRQHTxgr0bYVaRFQ,494
93
- osi_dump/model/instance.py,sha256=DSQ0F0CTHL0f_GMZ4GwH2D-Q_KvRmrNyCWTpCzDlqBs,494
93
+ osi_dump/model/image.py,sha256=5dXlBsiT0BWo5orQj38jEGtiFEwiRCJDmdhghg3RcTc,504
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
@@ -106,8 +107,8 @@ osi_dump/util/export_data_excel.py,sha256=VYSxDBZ7dgSbTj3n_8RRPqe183tILNh6wJW-Un
106
107
  osi_dump/util/extract_hostname.py,sha256=IpdklGHevmtRu67xeSRE_5n2mvWGI1sDsnJwExo_AR0,111
107
108
  osi_dump/util/panda_excel.py,sha256=GHHLguKLMm1sq4FHTPHABTjx7IqpOcGF_3OJT-cJORE,1011
108
109
  osi_dump/util/validate_dir_path.py,sha256=pL_OrY8JnNwk3vj6Zp6bsZtgHXhszSGRoqIt-1G5S90,507
109
- osi_dump-0.1.2.8.dist-info/METADATA,sha256=TetFO-4khPfpf8YoS1mYTn-xpfCELJl-qcMdZ3F9Fso,675
110
- osi_dump-0.1.2.8.dist-info/WHEEL,sha256=HiCZjzuy6Dw0hdX5R3LCFPDmFS4BWl8H-8W39XfmgX4,91
111
- osi_dump-0.1.2.8.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
112
- osi_dump-0.1.2.8.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
113
- osi_dump-0.1.2.8.dist-info/RECORD,,
110
+ osi_dump-0.1.3.dist-info/METADATA,sha256=MaY9IAfpGuRL54svZNwYrkCRQeWsvTxECZr4Rkl056g,673
111
+ osi_dump-0.1.3.dist-info/WHEEL,sha256=nCVcAvsfA9TDtwGwhYaRrlPhTLV9m-Ga6mdyDtuwK18,91
112
+ osi_dump-0.1.3.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
113
+ osi_dump-0.1.3.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
114
+ osi_dump-0.1.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.2.0)
2
+ Generator: setuptools (73.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5