osi-dump 0.1__tar.gz → 0.1.2__tar.gz
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-0.1 → osi_dump-0.1.2}/PKG-INFO +1 -1
- {osi_dump-0.1 → osi_dump-0.1.2}/pyproject.toml +1 -1
- osi_dump-0.1.2/src/osi_dump/api/placement.py +17 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +8 -1
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/instance/openstack_instance_importer.py +3 -5
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/project/openstack_project_importer.py +27 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/volume/openstack_volume_importer.py +17 -1
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/model/hypervisor.py +8 -2
- osi_dump-0.1.2/src/osi_dump/model/project.py +31 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/model/volume.py +2 -0
- osi_dump-0.1.2/src/osi_dump/os_connection/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/os_connection/get_connections.py +0 -1
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/PKG-INFO +1 -1
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/SOURCES.txt +2 -0
- osi_dump-0.1/src/osi_dump/model/project.py +0 -13
- {osi_dump-0.1 → osi_dump-0.1.2}/README.md +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/setup.cfg +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/__main__.py +0 -0
- {osi_dump-0.1/src/osi_dump/exporter → osi_dump-0.1.2/src/osi_dump/api}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/floating_ip_batch_handler.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/hypervisor_batch_handler.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/instance_batch_handler.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/project_batch_handler.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/volume_batch_handler.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/cli.py +0 -0
- {osi_dump-0.1/src/osi_dump/exporter/floating_ip → osi_dump-0.1.2/src/osi_dump/exporter}/__init__.py +0 -0
- {osi_dump-0.1/src/osi_dump/exporter/hypervisor → osi_dump-0.1.2/src/osi_dump/exporter/floating_ip}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +0 -0
- {osi_dump-0.1/src/osi_dump/exporter/instance → osi_dump-0.1.2/src/osi_dump/exporter/hypervisor}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +0 -0
- {osi_dump-0.1/src/osi_dump/exporter/project → osi_dump-0.1.2/src/osi_dump/exporter/instance}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/instance/excel_instance_exporter.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/instance/instance_exporter.py +0 -0
- {osi_dump-0.1/src/osi_dump/exporter/volume → osi_dump-0.1.2/src/osi_dump/exporter/project}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/project/excel_project_exporter.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/project/project_exporter.py +0 -0
- {osi_dump-0.1/src/osi_dump/importer/floating_ip → osi_dump-0.1.2/src/osi_dump/exporter/volume}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/volume/excel_volume_exporter.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/volume/volume_exporter.py +0 -0
- {osi_dump-0.1/src/osi_dump/importer/hypervisor → osi_dump-0.1.2/src/osi_dump/importer/floating_ip}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/floating_ip/floating_ip_importer.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +0 -0
- {osi_dump-0.1/src/osi_dump/importer/instance → osi_dump-0.1.2/src/osi_dump/importer/hypervisor}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/hypervisor/hypervisor_importer.py +0 -0
- {osi_dump-0.1/src/osi_dump/importer/project → osi_dump-0.1.2/src/osi_dump/importer/instance}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/instance/instance_importer.py +0 -0
- {osi_dump-0.1/src/osi_dump/importer/volume → osi_dump-0.1.2/src/osi_dump/importer/project}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/project/project_importer.py +0 -0
- {osi_dump-0.1/src/osi_dump/model → osi_dump-0.1.2/src/osi_dump/importer/volume}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/volume/volume_importer.py +0 -0
- {osi_dump-0.1/src/osi_dump/os_connection → osi_dump-0.1.2/src/osi_dump/model}/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/model/authentication_info.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/model/floating_ip.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/model/instance.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/util/__init__.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/util/create_file.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/util/excel_autosize_column.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/util/excel_sort_sheet.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/util/export_data_excel.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/util/extract_hostname.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/util/validate_dir_path.py +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/dependency_links.txt +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/entry_points.txt +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/requires.txt +0 -0
- {osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/top_level.txt +0 -0
@@ -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"]
|
{osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py
RENAMED
@@ -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
|
{osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/instance/openstack_instance_importer.py
RENAMED
@@ -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
|
)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from pydantic import BaseModel, ConfigDict, ValidationError
|
4
|
+
|
5
|
+
|
6
|
+
class Project(BaseModel):
|
7
|
+
model_config = ConfigDict(strict=True)
|
8
|
+
|
9
|
+
project_id: str
|
10
|
+
project_name: Optional[str]
|
11
|
+
domain_id: Optional[str]
|
12
|
+
enabled: bool
|
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]
|
File without changes
|
@@ -9,6 +9,8 @@ src/osi_dump.egg-info/dependency_links.txt
|
|
9
9
|
src/osi_dump.egg-info/entry_points.txt
|
10
10
|
src/osi_dump.egg-info/requires.txt
|
11
11
|
src/osi_dump.egg-info/top_level.txt
|
12
|
+
src/osi_dump/api/__init__.py
|
13
|
+
src/osi_dump/api/placement.py
|
12
14
|
src/osi_dump/batch_handler/__init__.py
|
13
15
|
src/osi_dump/batch_handler/floating_ip_batch_handler.py
|
14
16
|
src/osi_dump/batch_handler/hypervisor_batch_handler.py
|
@@ -1,13 +0,0 @@
|
|
1
|
-
from typing import Optional
|
2
|
-
|
3
|
-
from pydantic import BaseModel, ConfigDict, ValidationError
|
4
|
-
|
5
|
-
|
6
|
-
class Project(BaseModel):
|
7
|
-
model_config = ConfigDict(strict=True)
|
8
|
-
|
9
|
-
project_id: str
|
10
|
-
project_name: Optional[str]
|
11
|
-
domain_id: Optional[str]
|
12
|
-
enabled: bool
|
13
|
-
parent_id: Optional[str]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osi_dump-0.1/src/osi_dump/exporter/floating_ip → osi_dump-0.1.2/src/osi_dump/exporter}/__init__.py
RENAMED
File without changes
|
File without changes
|
{osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{osi_dump-0.1 → osi_dump-0.1.2}/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|