osi-dump 0.1__py3-none-any.whl → 0.1.2__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/__init__.py +0 -0
- osi_dump/api/placement.py +17 -0
- osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +8 -1
- osi_dump/importer/instance/openstack_instance_importer.py +3 -5
- osi_dump/importer/project/openstack_project_importer.py +27 -0
- osi_dump/importer/volume/openstack_volume_importer.py +17 -1
- osi_dump/model/hypervisor.py +8 -2
- osi_dump/model/project.py +18 -0
- osi_dump/model/volume.py +2 -0
- osi_dump/os_connection/get_connections.py +0 -1
- {osi_dump-0.1.dist-info → osi_dump-0.1.2.dist-info}/METADATA +1 -1
- {osi_dump-0.1.dist-info → osi_dump-0.1.2.dist-info}/RECORD +15 -13
- {osi_dump-0.1.dist-info → osi_dump-0.1.2.dist-info}/WHEEL +0 -0
- {osi_dump-0.1.dist-info → osi_dump-0.1.2.dist-info}/entry_points.txt +0 -0
- {osi_dump-0.1.dist-info → osi_dump-0.1.2.dist-info}/top_level.txt +0 -0
osi_dump/api/__init__.py
ADDED
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
from openstack.connection import Connection
|
2
|
+
from openstack.identity.v3.service import Service
|
3
|
+
|
4
|
+
|
5
|
+
def get_usage(connection: Connection, resource_provider_id: str):
|
6
|
+
|
7
|
+
placement_endpoint = connection.endpoint_for(
|
8
|
+
service_type="placement", interface="public"
|
9
|
+
)
|
10
|
+
|
11
|
+
url = f"{placement_endpoint}/resource_providers/{resource_provider_id}/usages"
|
12
|
+
|
13
|
+
response = connection.session.get(url)
|
14
|
+
|
15
|
+
data = response.json()
|
16
|
+
|
17
|
+
return data["usages"]
|
@@ -11,6 +11,8 @@ from openstack.placement.v1.resource_provider_inventory import ResourceProviderI
|
|
11
11
|
from osi_dump.importer.hypervisor.hypervisor_importer import HypervisorImporter
|
12
12
|
from osi_dump.model.hypervisor import Hypervisor
|
13
13
|
|
14
|
+
from osi_dump.api.placement import get_usage
|
15
|
+
|
14
16
|
logger = logging.getLogger(__name__)
|
15
17
|
|
16
18
|
|
@@ -61,6 +63,8 @@ class OpenStackHypervisorImporter(HypervisorImporter):
|
|
61
63
|
)
|
62
64
|
)
|
63
65
|
|
66
|
+
usage_data = get_usage(self.connection, resource_provider_id=hypervisor.id)
|
67
|
+
|
64
68
|
vcpu = rpi[0]
|
65
69
|
memory = rpi[1]
|
66
70
|
disk = rpi[2]
|
@@ -73,7 +77,10 @@ class OpenStackHypervisorImporter(HypervisorImporter):
|
|
73
77
|
status=hypervisor.status,
|
74
78
|
local_disk_size=disk["max_unit"],
|
75
79
|
memory_size=memory["max_unit"] + memory["reserved"],
|
76
|
-
|
80
|
+
vcpus=vcpu["max_unit"],
|
81
|
+
vcpus_usage=usage_data["VCPU"],
|
82
|
+
memory_usage=usage_data["MEMORY_MB"],
|
83
|
+
local_disk_usage=usage_data["DISK_GB"],
|
77
84
|
)
|
78
85
|
|
79
86
|
return ret_hypervisor
|
@@ -51,7 +51,8 @@ class OpenStackInstanceImporter(InstanceImporter):
|
|
51
51
|
|
52
52
|
def _get_instance_info(self, server: Server) -> Instance:
|
53
53
|
|
54
|
-
|
54
|
+
project_name = None
|
55
|
+
project_id = None
|
55
56
|
try:
|
56
57
|
project = self.connection.identity.get_project(server.project_id)
|
57
58
|
project_name = project.name
|
@@ -60,10 +61,8 @@ class OpenStackInstanceImporter(InstanceImporter):
|
|
60
61
|
logger.warn(
|
61
62
|
f"Unable to obtain project name for instance: {server.name}: {e}"
|
62
63
|
)
|
63
|
-
project_name = None
|
64
|
-
project_id = None
|
65
64
|
|
66
|
-
|
65
|
+
domain_name = None
|
67
66
|
try:
|
68
67
|
domain = self.connection.identity.get_domain(project.domain_id)
|
69
68
|
domain_name = domain.name
|
@@ -71,7 +70,6 @@ class OpenStackInstanceImporter(InstanceImporter):
|
|
71
70
|
logger.warning(
|
72
71
|
f"Unable to obtain domain name for instance {server.name}: {e}"
|
73
72
|
)
|
74
|
-
domain_name = None
|
75
73
|
|
76
74
|
# Lấy thông tin IPv4 private
|
77
75
|
private_v4_ips = []
|
@@ -49,12 +49,39 @@ class OpenStackProjectImporter(ProjectImporter):
|
|
49
49
|
return projects
|
50
50
|
|
51
51
|
def _get_project_info(self, project: OSProject) -> Project:
|
52
|
+
|
53
|
+
try:
|
54
|
+
compute_quotas = self.connection.compute.get_quota_set(
|
55
|
+
project.id, usage=True
|
56
|
+
)
|
57
|
+
except Exception as e:
|
58
|
+
logger.warning(f"Get compute quotas failed for {project.id} error: {e}")
|
59
|
+
|
60
|
+
try:
|
61
|
+
storage_quotas = self.connection.block_storage.get_quota_set(
|
62
|
+
project.id, usage=True
|
63
|
+
)
|
64
|
+
except Exception as e:
|
65
|
+
logger.warning(f"Get storage quotas failed for {project.id} error: {e}")
|
66
|
+
|
52
67
|
project_ret = Project(
|
53
68
|
project_id=project.id,
|
54
69
|
project_name=project.name,
|
55
70
|
domain_id=project.domain_id,
|
56
71
|
enabled=project.is_enabled,
|
57
72
|
parent_id=project.parent_id,
|
73
|
+
usage_instance=compute_quotas.usage["instances"],
|
74
|
+
quota_instance=compute_quotas.instances,
|
75
|
+
usage_ram=compute_quotas.usage["ram"],
|
76
|
+
quota_ram=compute_quotas.ram,
|
77
|
+
usage_vcpu=compute_quotas.usage["cores"],
|
78
|
+
quota_vcpu=compute_quotas.cores,
|
79
|
+
usage_volume=storage_quotas.volumes,
|
80
|
+
quota_volume=storage_quotas.usage["volumes"],
|
81
|
+
usage_snapshot=storage_quotas.snapshots,
|
82
|
+
quota_snapshot=storage_quotas.usage["snapshots"],
|
83
|
+
usage_storage=storage_quotas.gigabytes,
|
84
|
+
quota_storage=storage_quotas.usage["gigabytes"],
|
58
85
|
)
|
59
86
|
|
60
87
|
return project_ret
|
@@ -29,7 +29,9 @@ class OpenStackVolumeImporter(VolumeImporter):
|
|
29
29
|
logger.info(f"Importing volumes for {self.connection.auth['auth_url']}")
|
30
30
|
|
31
31
|
try:
|
32
|
-
osvolumes: list[OSVolume] = list(
|
32
|
+
osvolumes: list[OSVolume] = list(
|
33
|
+
self.connection.block_storage.volumes(details=True, all_projects=True)
|
34
|
+
)
|
33
35
|
except Exception as e:
|
34
36
|
raise Exception(
|
35
37
|
f"Can not fetch volumes for {self.connection.auth['auth_url']}"
|
@@ -50,6 +52,19 @@ class OpenStackVolumeImporter(VolumeImporter):
|
|
50
52
|
|
51
53
|
def _get_volume_info(self, volume: OSVolume) -> Volume:
|
52
54
|
|
55
|
+
snapshots = []
|
56
|
+
try:
|
57
|
+
snapshots = list(
|
58
|
+
self.connection.block_storage.snapshots(
|
59
|
+
details=False, all_projects=True, volume_id=volume.id
|
60
|
+
)
|
61
|
+
)
|
62
|
+
|
63
|
+
snapshots = [snapshot["id"] for snapshot in snapshots]
|
64
|
+
|
65
|
+
except Exception as e:
|
66
|
+
logger.warning(f"Fetching snapshots failed for {volume.id} error: {e}")
|
67
|
+
|
53
68
|
ret_volume = Volume(
|
54
69
|
volume_id=volume.id,
|
55
70
|
project_id=volume.project_id,
|
@@ -57,6 +72,7 @@ class OpenStackVolumeImporter(VolumeImporter):
|
|
57
72
|
attachments=[att["server_id"] for att in volume.attachments],
|
58
73
|
type=volume.volume_type,
|
59
74
|
size=volume.size,
|
75
|
+
snapshots=snapshots,
|
60
76
|
updated_at=volume.updated_at,
|
61
77
|
created_at=volume.created_at,
|
62
78
|
)
|
osi_dump/model/hypervisor.py
CHANGED
osi_dump/model/project.py
CHANGED
@@ -11,3 +11,21 @@ class Project(BaseModel):
|
|
11
11
|
domain_id: Optional[str]
|
12
12
|
enabled: bool
|
13
13
|
parent_id: Optional[str]
|
14
|
+
|
15
|
+
usage_instance: Optional[int]
|
16
|
+
quota_instance: Optional[int]
|
17
|
+
|
18
|
+
usage_vcpu: Optional[int]
|
19
|
+
quota_vcpu: Optional[int]
|
20
|
+
|
21
|
+
usage_ram: Optional[int]
|
22
|
+
quota_ram: Optional[int]
|
23
|
+
|
24
|
+
usage_volume: Optional[int]
|
25
|
+
quota_volume: Optional[int]
|
26
|
+
|
27
|
+
usage_snapshot: Optional[int]
|
28
|
+
quota_snapshot: Optional[int]
|
29
|
+
|
30
|
+
usage_storage: Optional[int]
|
31
|
+
quota_storage: Optional[int]
|
osi_dump/model/volume.py
CHANGED
@@ -1,6 +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
3
|
osi_dump/cli.py,sha256=cTOQA_thCt1ON5eQ-gTA_hFUSN5uPgFPDoOttpyuTNg,3605
|
4
|
+
osi_dump/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
+
osi_dump/api/placement.py,sha256=9yADLulo1HfUnPLE7IJt4ZY8e2jRTaoeV4J4MMiKCew,455
|
4
6
|
osi_dump/batch_handler/__init__.py,sha256=wsiE42GCjbKgXBzpiahWEDF_-IXCKzr6PyrLn0oEKSc,288
|
5
7
|
osi_dump/batch_handler/floating_ip_batch_handler.py,sha256=bEkT4BRi85qir-a1i7eEI_arA0LENq1gD6xHj8IdXu0,1771
|
6
8
|
osi_dump/batch_handler/hypervisor_batch_handler.py,sha256=vkv6SAx1arPNVvFJ6RyvbJjC2F2Hes9km7dwhL4NJDY,1755
|
@@ -28,25 +30,25 @@ osi_dump/importer/floating_ip/floating_ip_importer.py,sha256=2_lCZYF-r2dgdL4Yzws
|
|
28
30
|
osi_dump/importer/floating_ip/openstack_floating_ip_importer.py,sha256=xuALHyiyb4LdRgFN0hZvOx0pImKpGsLUtPWW_1q52gc,2286
|
29
31
|
osi_dump/importer/hypervisor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
32
|
osi_dump/importer/hypervisor/hypervisor_importer.py,sha256=JuoJBltqFYhH-Ql9TLUPHX2YurS0JFV7Augrc6bDJ5Q,206
|
31
|
-
osi_dump/importer/hypervisor/openstack_hypervisor_importer.py,sha256=
|
33
|
+
osi_dump/importer/hypervisor/openstack_hypervisor_importer.py,sha256=OerUSzh4Ns7gXm5JwiLKIEGmLzXFqU7RZ5hbzIi1J3Q,2845
|
32
34
|
osi_dump/importer/instance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
35
|
osi_dump/importer/instance/instance_importer.py,sha256=TaaPgEFVVMRT3mSXrzQkSaSIBPBwwANpEaWCgRsgImc,196
|
34
|
-
osi_dump/importer/instance/openstack_instance_importer.py,sha256=
|
36
|
+
osi_dump/importer/instance/openstack_instance_importer.py,sha256=b1OB-8_7DlwvOo7TX5zUG64XXtUufKhgCc3lhgNqxaY,3394
|
35
37
|
osi_dump/importer/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
|
-
osi_dump/importer/project/openstack_project_importer.py,sha256=
|
38
|
+
osi_dump/importer/project/openstack_project_importer.py,sha256=OXL9KB2yOgN-8hsb0RJZDT3p8wK4fLcTeqFogdtF944,2988
|
37
39
|
osi_dump/importer/project/project_importer.py,sha256=jwEvxteFbSwyWMV8hKAtf5Lo2bZysWkQ1L_NVUE8XOQ,191
|
38
40
|
osi_dump/importer/volume/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
39
|
-
osi_dump/importer/volume/openstack_volume_importer.py,sha256=
|
41
|
+
osi_dump/importer/volume/openstack_volume_importer.py,sha256=Tte9fX91oxEoRcUZPJd7g6oH6izcWy8WwFCapg_ZY1M,2454
|
40
42
|
osi_dump/importer/volume/volume_importer.py,sha256=tmDTE9L9vtl75GR79blSxa_MVsRU6LDCbR0yJk0xKwo,186
|
41
43
|
osi_dump/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
42
44
|
osi_dump/model/authentication_info.py,sha256=02kXxtILfjh8t45_-bPM8rtyRk2cQcJK6l2d1bPih7k,257
|
43
45
|
osi_dump/model/floating_ip.py,sha256=CRJufC5ZaxxcbGvdot7Af-sO8uyKbyQK9zHljfBnyFA,427
|
44
|
-
osi_dump/model/hypervisor.py,sha256=
|
46
|
+
osi_dump/model/hypervisor.py,sha256=zFJkLf4Z_vaMBnLmWR06Qaq0DjNTMCWP0sV3DEtpueU,317
|
45
47
|
osi_dump/model/instance.py,sha256=flNywojuBj7ZyFTnWvl2rpvzL3Ju-QtuUY69DSPfPs8,464
|
46
|
-
osi_dump/model/project.py,sha256=
|
47
|
-
osi_dump/model/volume.py,sha256=
|
48
|
+
osi_dump/model/project.py,sha256=3fNsDcWxuRVBS96W98C_Fia82qt14InjUM7n7rBCX6E,679
|
49
|
+
osi_dump/model/volume.py,sha256=1p5Xw0LPxfroJwSYtE-n_Gv4MsRDA_sSvc7SQY_Uo8I,371
|
48
50
|
osi_dump/os_connection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
|
-
osi_dump/os_connection/get_connections.py,sha256=
|
51
|
+
osi_dump/os_connection/get_connections.py,sha256=1zeir4cEtzJOUOn53zUmlD9lWMvYXhuRr0IhI5U1DAw,1753
|
50
52
|
osi_dump/util/__init__.py,sha256=GvhYTETVePJAsp0LfseMGtuRFWbbCc2xox-QSGQA3Us,286
|
51
53
|
osi_dump/util/create_file.py,sha256=hcEspFD0VZDtXCaG5QtMkV37GsbAHATdxYlClTszVK8,242
|
52
54
|
osi_dump/util/excel_autosize_column.py,sha256=zzQ6uXkQhHAqVn9fUAgNjoCH_HiNEC9Dcj4OBqHd6rw,1102
|
@@ -54,8 +56,8 @@ osi_dump/util/excel_sort_sheet.py,sha256=o4jXtP1ZFYtAGzkAP5S8Tym4h-SEoFBAI3j24y-
|
|
54
56
|
osi_dump/util/export_data_excel.py,sha256=VYSxDBZ7dgSbTj3n_8RRPqe183tILNh6wJW-UnFvJUU,882
|
55
57
|
osi_dump/util/extract_hostname.py,sha256=IpdklGHevmtRu67xeSRE_5n2mvWGI1sDsnJwExo_AR0,111
|
56
58
|
osi_dump/util/validate_dir_path.py,sha256=pL_OrY8JnNwk3vj6Zp6bsZtgHXhszSGRoqIt-1G5S90,507
|
57
|
-
osi_dump-0.1.dist-info/METADATA,sha256=
|
58
|
-
osi_dump-0.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
59
|
-
osi_dump-0.1.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
|
60
|
-
osi_dump-0.1.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
|
61
|
-
osi_dump-0.1.dist-info/RECORD,,
|
59
|
+
osi_dump-0.1.2.dist-info/METADATA,sha256=PjwOdiifp-ygU1NKMtVcEQ2PUOOqyFRCUqY8mYkpj9E,662
|
60
|
+
osi_dump-0.1.2.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
61
|
+
osi_dump-0.1.2.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
|
62
|
+
osi_dump-0.1.2.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
|
63
|
+
osi_dump-0.1.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|