osi-dump 0.1.3.2.1__py3-none-any.whl → 0.1.3.2.3__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/neutron.py CHANGED
@@ -10,34 +10,55 @@ logger = logging.getLogger(__name__)
10
10
 
11
11
 
12
12
  def get_floating_ip_project(connection: Connection, floating_ip_id: str):
13
- neutron_endpoint = os_util.get_endpoint(
13
+ # neutron_endpoint = os_util.get_endpoint(
14
+ # connection=connection, service_type="network", interface="public"
15
+ # )
16
+
17
+ neutron_endpoints = os_util.get_endpoints(
14
18
  connection=connection, service_type="network", interface="public"
15
19
  )
16
20
 
17
- try:
18
- url = f"{neutron_endpoint}/v2.0/floatingips/{floating_ip_id}?fields=project_id"
19
- response = connection.session.get(url)
21
+ response = None
20
22
 
21
- except Exception as e:
22
- print(e)
23
+ for endpoint in neutron_endpoints:
24
+ try:
25
+ url = f"{endpoint}/v2.0/floatingips/{floating_ip_id}?fields=project_id"
26
+ response = connection.session.get(url)
27
+ if response.status_code == 200:
28
+ break
29
+ except Exception as e:
30
+ print(e)
23
31
 
24
- data = response.json()
32
+ if response is None:
33
+ return None
25
34
 
26
- return data["floatingip"]["project_id"]
35
+ return response.json()["floatingip"]["project_id"]
27
36
 
28
37
 
29
38
  def get_router_project(connection: Connection, router_id: str):
30
- neutron_endpoint = os_util.get_endpoint(
31
- connection=connection, service_type="network", interface="internal"
39
+ # neutron_endpoint = os_util.get_endpoint(
40
+ # connection=connection, service_type="network", interface="internal"
41
+ # )
42
+
43
+ neutron_endpoints = os_util.get_endpoints(
44
+ connection=connection, service_type="network", interface="public"
32
45
  )
33
46
 
34
- try:
35
- url = f"{neutron_endpoint}/v2.0/routers/{router_id}?fields=project_id"
47
+ response = None
48
+
49
+ for endpoint in neutron_endpoints:
50
+ try:
51
+ url = f"{endpoint}/v2.0/routers/{router_id}?fields=project_id"
52
+
53
+ response = connection.session.get(url)
36
54
 
37
- response = connection.session.get(url)
55
+ if response.status_code == 200:
56
+ break
57
+ except Exception as e:
58
+ print(e)
38
59
 
39
- except Exception as e:
40
- print(e)
60
+ if response is None:
61
+ return None
41
62
 
42
63
  data = response.json()
43
64
 
osi_dump/api/octavia.py CHANGED
@@ -7,13 +7,27 @@ import osi_dump.util.openstack_util as os_util
7
7
 
8
8
 
9
9
  def get_load_balancers(connection: Connection) -> list[LoadBalancer]:
10
- octavia_endpoint = os_util.get_endpoint(
10
+ # octavia_endpoint = os_util.get_endpoint(
11
+ # connection=connection, service_type="load-balancer", interface="public"
12
+ # )
13
+
14
+ octavia_endpoints = os_util.get_endpoints(
11
15
  connection=connection, service_type="load-balancer", interface="public"
12
16
  )
13
17
 
14
- url = f"{octavia_endpoint}/v2.0/lbaas/loadbalancers"
18
+ response = None
19
+
20
+ for endpoint in octavia_endpoints:
21
+ try:
22
+ url = f"{endpoint}/v2.0/lbaas/loadbalancers"
23
+ response = connection.session.get(url)
24
+ if response.status_code == 200:
25
+ break
26
+ except Exception as e:
27
+ print(e)
15
28
 
16
- response = connection.session.get(url)
29
+ if response is None:
30
+ return None
17
31
 
18
32
  data = response.json()
19
33
 
@@ -22,13 +36,27 @@ def get_load_balancers(connection: Connection) -> list[LoadBalancer]:
22
36
 
23
37
  def get_amphoraes(connection: Connection, load_balancer_id: str) -> list[dict]:
24
38
 
25
- octavia_endpoint = os_util.get_endpoint(
39
+ # octavia_endpoint = os_util.get_endpoint(
40
+ # connection=connection, service_type="load-balancer", interface="public"
41
+ # )
42
+
43
+ octavia_endpoints = os_util.get_endpoints(
26
44
  connection=connection, service_type="load-balancer", interface="public"
27
45
  )
28
46
 
29
- url = f"{octavia_endpoint}/v2/octavia/amphorae?load_balancer_id={load_balancer_id}&fields=status&fields=compute_id&fields=compute_flavor"
47
+ response = None
48
+
49
+ for endpoint in octavia_endpoints:
50
+ try:
51
+ url = f"{endpoint}/v2/octavia/amphorae?load_balancer_id={load_balancer_id}&fields=status&fields=compute_id&fields=compute_flavor"
52
+ response = connection.session.get(url)
53
+ if response.status_code == 200:
54
+ break
55
+ except Exception as e:
56
+ print(e)
30
57
 
31
- response = connection.session.get(url)
58
+ if response is None:
59
+ return None
32
60
 
33
61
  data = response.json()
34
62
 
osi_dump/api/placement.py CHANGED
@@ -6,13 +6,35 @@ import osi_dump.util.openstack_util as os_util
6
6
 
7
7
  def get_usage(connection: Connection, resource_provider_id: str):
8
8
 
9
- placement_endpoint = os_util.get_endpoint(
9
+ # placement_endpoint = os_util.get_endpoint(
10
+ # connection=connection, service_type="placement", interface="public"
11
+ # )
12
+
13
+ # url = f"{placement_endpoint}/resource_providers/{resource_provider_id}/usages"
14
+
15
+ # response = connection.session.get(url)
16
+
17
+ # data = response.json()
18
+
19
+ # return data["usages"]
20
+
21
+ placement_endpoints = os_util.get_endpoints(
10
22
  connection=connection, service_type="placement", interface="public"
11
23
  )
12
24
 
13
- url = f"{placement_endpoint}/resource_providers/{resource_provider_id}/usages"
25
+ response = None
26
+
27
+ for endpoint in placement_endpoints:
28
+ try:
29
+ url = f"{endpoint}/resource_providers/{resource_provider_id}/usages"
30
+ response = connection.session.get(url)
31
+ if response.status_code == 200:
32
+ break
33
+ except Exception as e:
34
+ print(e)
14
35
 
15
- response = connection.session.get(url)
36
+ if response is None:
37
+ return None
16
38
 
17
39
  data = response.json()
18
40
 
@@ -23,8 +23,9 @@ class ExcelLoadBalancerExporter(LoadBalancerExporter):
23
23
  df = pd.json_normalize(
24
24
  [load_balancer.model_dump() for load_balancer in load_balancers]
25
25
  )
26
-
27
- df = util.expand_list_column(df, "amphoraes")
26
+
27
+ if "amphoraes" in df.columns:
28
+ df = util.expand_list_column(df, "amphoraes")
28
29
 
29
30
  logger.info(f"Exporting load_balancers for {self.sheet_name}")
30
31
  try:
@@ -72,6 +72,8 @@ class OpenStackLoadBalancerImporter(LoadBalancerImporter):
72
72
  operating_status=load_balancer["operating_status"],
73
73
  project_id=load_balancer["project_id"],
74
74
  provisioning_status=load_balancer["provisioning_status"],
75
+ created_at=load_balancer["created_at"],
76
+ updated_at=load_balancer["updated_at"],
75
77
  amphoraes=amphoraes,
76
78
  )
77
79
 
@@ -17,3 +17,6 @@ class LoadBalancer(BaseModel):
17
17
  amphoraes: list[dict]
18
18
 
19
19
  project_id: Optional[str]
20
+
21
+ created_at: Optional[str]
22
+ updated_at: Optional[str]
@@ -20,3 +20,29 @@ def get_endpoint(connection: Connection, service_type: str, interface: str) -> s
20
20
  )
21
21
 
22
22
  return ret
23
+
24
+
25
+ def get_endpoints(
26
+ connection: Connection, service_type: str, interface: str
27
+ ) -> list[str]:
28
+ endpoint = connection.endpoint_for(service_type=service_type, interface=interface)
29
+
30
+ parsed_endpoint = urllib.parse.urlparse(endpoint)
31
+
32
+ new_hostname = urllib.parse.urlparse(connection.auth["auth_url"]).hostname
33
+
34
+ port = parsed_endpoint.port
35
+
36
+ http_ret = urllib.parse.urlunparse(
37
+ parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")._replace(
38
+ scheme="http"
39
+ )
40
+ )
41
+
42
+ https_ret = urllib.parse.urlunparse(
43
+ parsed_endpoint._replace(netloc=f"{new_hostname}:{port}")._replace(
44
+ scheme="https"
45
+ )
46
+ )
47
+
48
+ return [http_ret, https_ret]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osi-dump
3
- Version: 0.1.3.2.1
3
+ Version: 0.1.3.2.3
4
4
  Summary: OpenStack information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -2,9 +2,9 @@ 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=vLijmcrWieCVK4cSLN2sK9ltWlercw9Zg6yBEvZtPkg,6379
4
4
  osi_dump/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- osi_dump/api/neutron.py,sha256=xRhNkEBDzOoUQHSWmkoI_Tdbcs8kvdS0UpPNkzxQv3g,1170
6
- osi_dump/api/octavia.py,sha256=F03c9WaQpKbWOjCvFndZYStClfbhaGyYnIxtgqs1bQ0,1137
7
- osi_dump/api/placement.py,sha256=UvIGwAvowmCLobVARut8WnLVV-IdCDniyW9y16l2B_I,523
5
+ osi_dump/api/neutron.py,sha256=pag_d6MsxA1gOUit4bvVUaTiTrPqLJjwz9KU_QSpxwM,1788
6
+ osi_dump/api/octavia.py,sha256=Cgzz9Pf26YFETqbXSXYSHUA_PWDy_3V4zPm0RZ8QKBo,1905
7
+ osi_dump/api/placement.py,sha256=yoWzg39b8nK2E1nrxDhLxLsa7FcBTw57gfy8b5F5ijc,1096
8
8
  osi_dump/batch_handler/__init__.py,sha256=wsiE42GCjbKgXBzpiahWEDF_-IXCKzr6PyrLn0oEKSc,288
9
9
  osi_dump/batch_handler/external_port_batch_handler.py,sha256=iGm0htGbLkpTX5RFPcrvXrVVn0eeTpavN3u4s58Z_pE,1783
10
10
  osi_dump/batch_handler/flavor_batch_handler.py,sha256=Cxf-rkuW5MrrOyiKi9N3InsdDGku7Bf0CAaPNhhM0hE,1589
@@ -37,7 +37,7 @@ osi_dump/exporter/instance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
37
37
  osi_dump/exporter/instance/excel_instance_exporter.py,sha256=8WTv3RDOdUkumyWzwUK4KAZCnnq9P2yKi5TC091I9fs,931
38
38
  osi_dump/exporter/instance/instance_exporter.py,sha256=5CuKKvTa5S2_Ds7fap6tle4go9pOFmQ5VEf6O7tjwBo,161
39
39
  osi_dump/exporter/load_balancer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py,sha256=Wq5ik_BTfa2RqMZKtCP2AkFVyJXne7N5OTXj0RCQsbI,1071
40
+ osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py,sha256=gffLcLr8uvSbaf7rwZDgNRCPKh8bMIs2ShHtyotpKmw,1105
41
41
  osi_dump/exporter/load_balancer/load_balancer_exporter.py,sha256=Z5uvEKz1UG_dpAw5KVh-IX5PWLzlPt7pV9773bkgjXs,175
42
42
  osi_dump/exporter/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  osi_dump/exporter/project/excel_project_exporter.py,sha256=2U3Tvn_Bk4xEQk3Tmh-oj5WXAG1bfxI6m7WVPF1upQw,916
@@ -71,7 +71,7 @@ osi_dump/importer/instance/instance_importer.py,sha256=TaaPgEFVVMRT3mSXrzQkSaSIB
71
71
  osi_dump/importer/instance/openstack_instance_importer.py,sha256=bvDZdwkxBZl40shIHAQ0QOkRcZEkWaeksROF7DZ5syA,4085
72
72
  osi_dump/importer/load_balancer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  osi_dump/importer/load_balancer/load_balancer_importer.py,sha256=fzInBlkscqlbhCATeQYXvufc-WHq2pbofTJJifN0zaY,218
74
- osi_dump/importer/load_balancer/openstack_load_balancer_importer.py,sha256=9yj60y4MEIHV10e9tStR2B7S0LAOR-jzd4BSshLbG-8,2596
74
+ osi_dump/importer/load_balancer/openstack_load_balancer_importer.py,sha256=eF6VqDDAjTzKsvSrbnEzSNhLRZV6nQL4M5XhbshCVTQ,2700
75
75
  osi_dump/importer/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
76
  osi_dump/importer/project/openstack_project_importer.py,sha256=ylcm3jEFqh4gW8vhzhIaBq5v4A-PV3BaaogC8uHlSkg,3295
77
77
  osi_dump/importer/project/project_importer.py,sha256=jwEvxteFbSwyWMV8hKAtf5Lo2bZysWkQ1L_NVUE8XOQ,191
@@ -92,7 +92,7 @@ osi_dump/model/floating_ip.py,sha256=CRJufC5ZaxxcbGvdot7Af-sO8uyKbyQK9zHljfBnyFA
92
92
  osi_dump/model/hypervisor.py,sha256=6dWEMVrrjOQolX936FqY994S7RAXpMPATpsLPVNeCyk,455
93
93
  osi_dump/model/image.py,sha256=JUr90XQgA6d3EyoZyV-Cyz4Y1GkEBIDhALsf-_eoR-Y,524
94
94
  osi_dump/model/instance.py,sha256=ixJUGMsNAsWIRSXXHZ2fHA9Wr1wPYZONyEhS75wfQp8,577
95
- osi_dump/model/load_balancer.py,sha256=T5RU6gm36ePYCh3KQ_OYO44FHMfxTcSNaiuKP5E_9CY,352
95
+ osi_dump/model/load_balancer.py,sha256=x8mTvdXa5FmuJLwx4qu2DJqPQISoO-0A3a76Ki_jy34,413
96
96
  osi_dump/model/project.py,sha256=_mMaKKM9RQYiorh6zWMrC_WJ3x9RxhZxn4lLa_B3niY,710
97
97
  osi_dump/model/role_assignment.py,sha256=fNt05y4aFF6b71Yps_EHzWavv8wF-jYx7gd3WAhqy6Y,310
98
98
  osi_dump/model/router.py,sha256=K8B6w97DYcFNRPmXN6CAZatm_0XSo2qIFVTvgdMfufY,417
@@ -105,11 +105,11 @@ osi_dump/util/excel_autosize_column.py,sha256=zzQ6uXkQhHAqVn9fUAgNjoCH_HiNEC9Dcj
105
105
  osi_dump/util/excel_sort_sheet.py,sha256=o4jXtP1ZFYtAGzkAP5S8Tym4h-SEoFBAI3j24y-24UM,1047
106
106
  osi_dump/util/export_data_excel.py,sha256=VYSxDBZ7dgSbTj3n_8RRPqe183tILNh6wJW-UnFvJUU,882
107
107
  osi_dump/util/extract_hostname.py,sha256=IpdklGHevmtRu67xeSRE_5n2mvWGI1sDsnJwExo_AR0,111
108
- osi_dump/util/openstack_util.py,sha256=mPWLoVdSg4mukqtX87fN0Q9aDcRicJIqIsIOIIu1PnY,591
108
+ osi_dump/util/openstack_util.py,sha256=PmoGlXNJqCQAbZBBHj-BM5JdY5g9FHERXtOn4Lv0p3k,1299
109
109
  osi_dump/util/panda_excel.py,sha256=owr8AffIxqN3yY8kIv55Ox4j2dRz7kXZvSZFZeft8dw,734
110
110
  osi_dump/util/validate_dir_path.py,sha256=pL_OrY8JnNwk3vj6Zp6bsZtgHXhszSGRoqIt-1G5S90,507
111
- osi_dump-0.1.3.2.1.dist-info/METADATA,sha256=PgoG_qZZ3C_EDSl6xRQ733hGybg3QKmiHhivQD_KnX0,677
112
- osi_dump-0.1.3.2.1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
113
- osi_dump-0.1.3.2.1.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
114
- osi_dump-0.1.3.2.1.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
115
- osi_dump-0.1.3.2.1.dist-info/RECORD,,
111
+ osi_dump-0.1.3.2.3.dist-info/METADATA,sha256=dzxvfqhGDUONet8v93VLUT-zS6mZovOTttwI61Nhvg0,677
112
+ osi_dump-0.1.3.2.3.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
113
+ osi_dump-0.1.3.2.3.dist-info/entry_points.txt,sha256=ozm5sIBtXzLv6_FiUe26v1BgA3_xUReGLPhKQKZ56wQ,46
114
+ osi_dump-0.1.3.2.3.dist-info/top_level.txt,sha256=OtAAwmJfcoPvlw_Cemo_H1aXIGV_7w0O2941KQt6faQ,9
115
+ osi_dump-0.1.3.2.3.dist-info/RECORD,,