osi-dump 0.1.3.3.3.3__py3-none-any.whl → 0.1.3.3.3.5__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.
@@ -4,10 +4,11 @@ import concurrent
4
4
 
5
5
  from openstack.connection import Connection
6
6
  from openstack.identity.v3.project import Project as OSProject
7
+ from openstack.load_balancer.v2.load_balancer import LoadBalancer as OSLoadBalancer
7
8
 
8
9
  from osi_dump.importer.project.project_importer import ProjectImporter
9
10
  from osi_dump.model.project import Project
10
-
11
+ import osi_dump.api.octavia as octavia_api
11
12
  logger = logging.getLogger(__name__)
12
13
 
13
14
 
@@ -26,6 +27,22 @@ class OpenStackProjectImporter(ProjectImporter):
26
27
  """
27
28
 
28
29
  logger.info(f"Importing projects for {self.connection.auth['auth_url']}")
30
+ try:
31
+ osload_balancers: list[OSLoadBalancer] = octavia_api.get_load_balancers(
32
+ connection=self.connection
33
+ )
34
+ except Exception as e:
35
+ raise Exception(
36
+ f"Can not fetch load_balancers for {self.connection.auth['auth_url']} {e}"
37
+ ) from e
38
+
39
+ project_lb_dict = {}
40
+
41
+ for osload_balancer in osload_balancers:
42
+ if project_lb_dict.get(osload_balancer["project_id"]):
43
+ project_lb_dict[osload_balancer["project_id"]] += 1
44
+ else:
45
+ project_lb_dict[osload_balancer["project_id"]] = 1
29
46
 
30
47
  try:
31
48
  osprojects: list[OSProject] = list(self.connection.identity.projects())
@@ -38,7 +55,7 @@ class OpenStackProjectImporter(ProjectImporter):
38
55
 
39
56
  with concurrent.futures.ThreadPoolExecutor() as executor:
40
57
  futures = [
41
- executor.submit(self._get_project_info, project)
58
+ executor.submit(self._get_project_info, project, project_lb_dict)
42
59
  for project in osprojects
43
60
  ]
44
61
  for future in concurrent.futures.as_completed(futures):
@@ -48,19 +65,45 @@ class OpenStackProjectImporter(ProjectImporter):
48
65
 
49
66
  return projects
50
67
 
51
- def _get_project_info(self, project: OSProject) -> Project:
68
+ def _get_project_info(self, project: OSProject, project_lb_dict: dict) -> Project:
69
+
70
+ usage_instance=None
71
+ quota_instance=None
72
+ usage_ram=None
73
+ quota_ram=None
74
+ usage_vcpu=None
75
+ quota_vcpu=None
52
76
 
53
77
  try:
54
78
  compute_quotas = self.connection.compute.get_quota_set(
55
79
  project.id, usage=True
56
80
  )
81
+
82
+ usage_instance=compute_quotas.usage["instances"]
83
+ quota_instance=compute_quotas.instances
84
+ usage_ram=compute_quotas.usage["ram"]
85
+ quota_ram=compute_quotas.ram
86
+ usage_vcpu=compute_quotas.usage["cores"]
87
+ quota_vcpu=compute_quotas.cores
57
88
  except Exception as e:
58
89
  logger.warning(f"Get compute quotas failed for {project.id} error: {e}")
59
90
 
91
+ usage_volume=None
92
+ quota_volume=None
93
+ usage_snapshot=None
94
+ quota_snapshot=None
95
+ usage_storage=None
96
+ quota_storage=None
60
97
  try:
61
98
  storage_quotas = self.connection.block_storage.get_quota_set(
62
99
  project.id, usage=True
63
100
  )
101
+ usage_volume=storage_quotas.usage["volumes"],
102
+ quota_volume=storage_quotas.volumes,
103
+ usage_snapshot=storage_quotas.usage["snapshots"],
104
+ quota_snapshot=storage_quotas.snapshots,
105
+ usage_storage=storage_quotas.usage["gigabytes"],
106
+ quota_storage=storage_quotas.gigabytes,
64
107
  except Exception as e:
65
108
  logger.warning(f"Get storage quotas failed for {project.id} error: {e}")
66
109
 
@@ -71,6 +114,8 @@ class OpenStackProjectImporter(ProjectImporter):
71
114
  except Exception as e:
72
115
  logger.warning(f"Get domain failed for {project.domain_id} error: {e}")
73
116
 
117
+ lb_count = project_lb_dict.get(project.id)
118
+
74
119
  project_ret = Project(
75
120
  project_id=project.id,
76
121
  project_name=project.name,
@@ -78,18 +123,19 @@ class OpenStackProjectImporter(ProjectImporter):
78
123
  domain_name=domain_name,
79
124
  enabled=project.is_enabled,
80
125
  parent_id=project.parent_id,
81
- usage_instance=compute_quotas.usage["instances"],
82
- quota_instance=compute_quotas.instances,
83
- usage_ram=compute_quotas.usage["ram"],
84
- quota_ram=compute_quotas.ram,
85
- usage_vcpu=compute_quotas.usage["cores"],
86
- quota_vcpu=compute_quotas.cores,
87
- usage_volume=storage_quotas.usage["volumes"],
88
- quota_volume=storage_quotas.volumes,
89
- usage_snapshot=storage_quotas.usage["snapshots"],
90
- quota_snapshot=storage_quotas.snapshots,
91
- usage_storage=storage_quotas.usage["gigabytes"],
92
- quota_storage=storage_quotas.gigabytes,
126
+ usage_instance=usage_instance,
127
+ quota_instance=quota_instance,
128
+ usage_ram=usage_ram,
129
+ quota_ram=quota_ram,
130
+ usage_vcpu=usage_vcpu,
131
+ quota_vcpu=quota_vcpu,
132
+ usage_volume=usage_volume,
133
+ quota_volume=quota_volume,
134
+ usage_snapshot=usage_snapshot,
135
+ quota_snapshot=quota_snapshot,
136
+ usage_storage=usage_storage,
137
+ quota_storage=quota_storage,
138
+ load_balancer_count=lb_count
93
139
  )
94
140
 
95
141
  return project_ret
osi_dump/model/project.py CHANGED
@@ -30,3 +30,5 @@ class Project(BaseModel):
30
30
 
31
31
  usage_storage: Optional[int]
32
32
  quota_storage: Optional[int]
33
+
34
+ load_balancer_count: Optional[int]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osi-dump
3
- Version: 0.1.3.3.3.3
3
+ Version: 0.1.3.3.3.5
4
4
  Summary: OpenStack information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -14,7 +14,7 @@ Requires-Dist: pandas
14
14
  Requires-Dist: openpyxl
15
15
  Requires-Dist: numpy
16
16
  Provides-Extra: test
17
- Requires-Dist: pytest ; extra == 'test'
17
+ Requires-Dist: pytest; extra == "test"
18
18
 
19
19
  # OpenStack Information Dump
20
20
 
@@ -74,7 +74,7 @@ osi_dump/importer/load_balancer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
74
74
  osi_dump/importer/load_balancer/load_balancer_importer.py,sha256=fzInBlkscqlbhCATeQYXvufc-WHq2pbofTJJifN0zaY,218
75
75
  osi_dump/importer/load_balancer/openstack_load_balancer_importer.py,sha256=tTcZAWEMstRvDAWrmFlRYI1mIc27egaEAeNLsh-htRM,3205
76
76
  osi_dump/importer/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- osi_dump/importer/project/openstack_project_importer.py,sha256=ylcm3jEFqh4gW8vhzhIaBq5v4A-PV3BaaogC8uHlSkg,3295
77
+ osi_dump/importer/project/openstack_project_importer.py,sha256=9K9OVwMQt_Kk6Z36tHKUl24FGs4oO9iz1pvJLNtPbZI,4970
78
78
  osi_dump/importer/project/project_importer.py,sha256=jwEvxteFbSwyWMV8hKAtf5Lo2bZysWkQ1L_NVUE8XOQ,191
79
79
  osi_dump/importer/role_assignment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  osi_dump/importer/role_assignment/openstack_role_assignment_importer.py,sha256=p7Ocn27Esh-QipqNyQCviO6xt4TTWuIbqiNQ8oAPVpY,3557
@@ -94,7 +94,7 @@ osi_dump/model/hypervisor.py,sha256=6dWEMVrrjOQolX936FqY994S7RAXpMPATpsLPVNeCyk,
94
94
  osi_dump/model/image.py,sha256=JUr90XQgA6d3EyoZyV-Cyz4Y1GkEBIDhALsf-_eoR-Y,524
95
95
  osi_dump/model/instance.py,sha256=8puhIKWWfoAaTURXb7XUpjG0lQ4nb0UwrsrTQdDaFbs,639
96
96
  osi_dump/model/load_balancer.py,sha256=cInZ_JH8kzZpnJsxejI-nze4nACtK3Yk20pfyl28lLo,436
97
- osi_dump/model/project.py,sha256=_mMaKKM9RQYiorh6zWMrC_WJ3x9RxhZxn4lLa_B3niY,710
97
+ osi_dump/model/project.py,sha256=S5BtjeMoxZfiJ7z7G_5jYfp5mMTzlPi7DWT5fuBGCTw,749
98
98
  osi_dump/model/role_assignment.py,sha256=fNt05y4aFF6b71Yps_EHzWavv8wF-jYx7gd3WAhqy6Y,310
99
99
  osi_dump/model/router.py,sha256=K8B6w97DYcFNRPmXN6CAZatm_0XSo2qIFVTvgdMfufY,417
100
100
  osi_dump/model/volume.py,sha256=C1WdZ_GwlL-iaBqrFpgPMfIQZj3ST2KQHzwXceYxRZg,423
@@ -109,8 +109,8 @@ osi_dump/util/extract_hostname.py,sha256=IpdklGHevmtRu67xeSRE_5n2mvWGI1sDsnJwExo
109
109
  osi_dump/util/openstack_util.py,sha256=_o8LiRmQKtxQ8hU3rbrMNwIAxt0-aWD2rjq-NvVdK9E,1299
110
110
  osi_dump/util/panda_excel.py,sha256=owr8AffIxqN3yY8kIv55Ox4j2dRz7kXZvSZFZeft8dw,734
111
111
  osi_dump/util/validate_dir_path.py,sha256=pL_OrY8JnNwk3vj6Zp6bsZtgHXhszSGRoqIt-1G5S90,507
112
- osi_dump-0.1.3.3.3.3.dist-info/METADATA,sha256=4YP3UqxNX2j8iE-bNhWwpKMXZ_aMKpIg121FN_2-nY8,679
113
- osi_dump-0.1.3.3.3.3.dist-info/WHEEL,sha256=a7TGlA-5DaHMRrarXjVbQagU3Man_dCnGIWMJr5kRWo,91
114
- osi_dump-0.1.3.3.3.3.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
115
- osi_dump-0.1.3.3.3.3.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
116
- osi_dump-0.1.3.3.3.3.dist-info/RECORD,,
112
+ osi_dump-0.1.3.3.3.5.dist-info/METADATA,sha256=bAu5Jdb3RXnf-viANgvWqlX3fBmemBZDZhETcHqqQZs,678
113
+ osi_dump-0.1.3.3.3.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
114
+ osi_dump-0.1.3.3.3.5.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
115
+ osi_dump-0.1.3.3.3.5.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
116
+ osi_dump-0.1.3.3.3.5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.4.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5