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.
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
- 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
@@ -51,7 +51,8 @@ class OpenStackInstanceImporter(InstanceImporter):
51
51
 
52
52
  def _get_instance_info(self, server: Server) -> Instance:
53
53
 
54
- # Lấy thông tin project
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
- # Lấy thông tin domain
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(self.connection.list_volumes())
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
  )
@@ -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
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
@@ -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
@@ -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
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,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=9Y-OsjfOzCKi_DijlHeMv9sgsD_oWB_YXW_lDtVeahM,2567
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=h1a-ToU1Hd4KARQTRqS8T6-2QK5eLfgKxz1DTHiBEEw,3475
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=wdNJTTEhsvhnW6Wn0xLx8nAoJOhtiG9-6jGB0WnnYVU,1837
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=q8vDPAr9LviJLTWfjAhQU8nKu5mt66pIras2uiexA9k,1937
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=L3FKY57HiI55-AgxNPXVT55BgkJUDwPFYIfzLprJ2VE,244
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=vh3qhR5JpQ6yxvGK9CXiJ9-HoyyYGAggKF56AEEg-tE,289
47
- osi_dump/model/volume.py,sha256=unb2dy7dIDi3-D6WKJAhmnPsn_DI27GZJsZCrDBh89M,335
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=_CiKot2GgQDOAJ33goN9mcwaGYQCqzCOitntz9cf3-c,1793
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=GkknVw2jANEDf5MeFYq1OX7i7i2DdpueFVu4UFq9S44,660
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,,