osi-dump 0.1.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.
Files changed (69) hide show
  1. {osi_dump-0.1.1 → osi_dump-0.1.2}/PKG-INFO +1 -1
  2. {osi_dump-0.1.1 → osi_dump-0.1.2}/pyproject.toml +1 -1
  3. osi_dump-0.1.2/src/osi_dump/api/placement.py +17 -0
  4. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +8 -1
  5. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/project/openstack_project_importer.py +27 -0
  6. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/volume/openstack_volume_importer.py +14 -0
  7. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/model/hypervisor.py +8 -2
  8. osi_dump-0.1.2/src/osi_dump/model/project.py +31 -0
  9. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/model/volume.py +2 -0
  10. osi_dump-0.1.2/src/osi_dump/os_connection/__init__.py +0 -0
  11. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/os_connection/get_connections.py +0 -1
  12. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/PKG-INFO +1 -1
  13. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/SOURCES.txt +2 -0
  14. osi_dump-0.1.1/src/osi_dump/model/project.py +0 -13
  15. {osi_dump-0.1.1 → osi_dump-0.1.2}/README.md +0 -0
  16. {osi_dump-0.1.1 → osi_dump-0.1.2}/setup.cfg +0 -0
  17. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/__init__.py +0 -0
  18. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/__main__.py +0 -0
  19. {osi_dump-0.1.1/src/osi_dump/exporter → osi_dump-0.1.2/src/osi_dump/api}/__init__.py +0 -0
  20. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/__init__.py +0 -0
  21. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/floating_ip_batch_handler.py +0 -0
  22. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/hypervisor_batch_handler.py +0 -0
  23. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/instance_batch_handler.py +0 -0
  24. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/project_batch_handler.py +0 -0
  25. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/batch_handler/volume_batch_handler.py +0 -0
  26. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/cli.py +0 -0
  27. {osi_dump-0.1.1/src/osi_dump/exporter/floating_ip → osi_dump-0.1.2/src/osi_dump/exporter}/__init__.py +0 -0
  28. {osi_dump-0.1.1/src/osi_dump/exporter/hypervisor → osi_dump-0.1.2/src/osi_dump/exporter/floating_ip}/__init__.py +0 -0
  29. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +0 -0
  30. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +0 -0
  31. {osi_dump-0.1.1/src/osi_dump/exporter/instance → osi_dump-0.1.2/src/osi_dump/exporter/hypervisor}/__init__.py +0 -0
  32. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +0 -0
  33. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +0 -0
  34. {osi_dump-0.1.1/src/osi_dump/exporter/project → osi_dump-0.1.2/src/osi_dump/exporter/instance}/__init__.py +0 -0
  35. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/instance/excel_instance_exporter.py +0 -0
  36. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/instance/instance_exporter.py +0 -0
  37. {osi_dump-0.1.1/src/osi_dump/exporter/volume → osi_dump-0.1.2/src/osi_dump/exporter/project}/__init__.py +0 -0
  38. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/project/excel_project_exporter.py +0 -0
  39. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/project/project_exporter.py +0 -0
  40. {osi_dump-0.1.1/src/osi_dump/importer/floating_ip → osi_dump-0.1.2/src/osi_dump/exporter/volume}/__init__.py +0 -0
  41. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/volume/excel_volume_exporter.py +0 -0
  42. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/exporter/volume/volume_exporter.py +0 -0
  43. {osi_dump-0.1.1/src/osi_dump/importer/hypervisor → osi_dump-0.1.2/src/osi_dump/importer/floating_ip}/__init__.py +0 -0
  44. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/floating_ip/floating_ip_importer.py +0 -0
  45. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +0 -0
  46. {osi_dump-0.1.1/src/osi_dump/importer/instance → osi_dump-0.1.2/src/osi_dump/importer/hypervisor}/__init__.py +0 -0
  47. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/hypervisor/hypervisor_importer.py +0 -0
  48. {osi_dump-0.1.1/src/osi_dump/importer/project → osi_dump-0.1.2/src/osi_dump/importer/instance}/__init__.py +0 -0
  49. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/instance/instance_importer.py +0 -0
  50. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/instance/openstack_instance_importer.py +0 -0
  51. {osi_dump-0.1.1/src/osi_dump/importer/volume → osi_dump-0.1.2/src/osi_dump/importer/project}/__init__.py +0 -0
  52. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/project/project_importer.py +0 -0
  53. {osi_dump-0.1.1/src/osi_dump/model → osi_dump-0.1.2/src/osi_dump/importer/volume}/__init__.py +0 -0
  54. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/importer/volume/volume_importer.py +0 -0
  55. {osi_dump-0.1.1/src/osi_dump/os_connection → osi_dump-0.1.2/src/osi_dump/model}/__init__.py +0 -0
  56. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/model/authentication_info.py +0 -0
  57. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/model/floating_ip.py +0 -0
  58. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/model/instance.py +0 -0
  59. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/util/__init__.py +0 -0
  60. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/util/create_file.py +0 -0
  61. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/util/excel_autosize_column.py +0 -0
  62. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/util/excel_sort_sheet.py +0 -0
  63. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/util/export_data_excel.py +0 -0
  64. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/util/extract_hostname.py +0 -0
  65. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump/util/validate_dir_path.py +0 -0
  66. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/dependency_links.txt +0 -0
  67. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/entry_points.txt +0 -0
  68. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/requires.txt +0 -0
  69. {osi_dump-0.1.1 → osi_dump-0.1.2}/src/osi_dump.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osi-dump
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: OpenStack instances information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "osi-dump"
3
- version = "0.1.1"
3
+ version = "0.1.2"
4
4
  description = "OpenStack instances information dump tool"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "TVKain" }]
@@ -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
- vpus=vcpu["max_unit"],
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
@@ -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
@@ -52,6 +52,19 @@ class OpenStackVolumeImporter(VolumeImporter):
52
52
 
53
53
  def _get_volume_info(self, volume: OSVolume) -> Volume:
54
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
+
55
68
  ret_volume = Volume(
56
69
  volume_id=volume.id,
57
70
  project_id=volume.project_id,
@@ -59,6 +72,7 @@ class OpenStackVolumeImporter(VolumeImporter):
59
72
  attachments=[att["server_id"] for att in volume.attachments],
60
73
  type=volume.volume_type,
61
74
  size=volume.size,
75
+ snapshots=snapshots,
62
76
  updated_at=volume.updated_at,
63
77
  created_at=volume.created_at,
64
78
  )
@@ -7,6 +7,12 @@ class Hypervisor(BaseModel):
7
7
  name: str
8
8
  state: str
9
9
  status: str
10
- local_disk_size: int
10
+
11
+ vcpus: int
12
+ vcpus_usage: int
13
+
11
14
  memory_size: int
12
- vpus: int
15
+ memory_usage: int
16
+
17
+ local_disk_usage: int
18
+ local_disk_size: int
@@ -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]
@@ -17,5 +17,7 @@ class Volume(BaseModel):
17
17
  type: str
18
18
  size: int
19
19
 
20
+ snapshots: Optional[list[str]]
21
+
20
22
  updated_at: str
21
23
  created_at: str
File without changes
@@ -33,7 +33,6 @@ def get_connections(file_path) -> list[Connection]:
33
33
  password=auth.password,
34
34
  project_domain_name=auth.project_domain_name,
35
35
  user_domain_name=auth.user_domain_name,
36
- timeout=TIMEOUT_SECOND,
37
36
  )
38
37
 
39
38
  connections.append(connection)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osi-dump
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: OpenStack instances information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -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