osi-dump 0.1.3.3.4.3__tar.gz → 0.1.4__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.3.3.4.3 → osi_dump-0.1.4}/PKG-INFO +40 -40
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/README.md +22 -22
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/pyproject.toml +24 -24
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/setup.cfg +4 -4
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/__main__.py +4 -4
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/api/keystone.py +70 -70
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/api/neutron.py +65 -65
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/api/octavia.py +94 -94
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/api/placement.py +41 -41
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/__init__.py +6 -5
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/external_port_batch_handler.py +55 -55
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/flavor_batch_handler.py +51 -51
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/floating_ip_batch_handler.py +57 -57
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/hypervisor_batch_handler.py +55 -55
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/image_batch_handler.py +51 -51
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/instance_batch_handler.py +46 -54
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/load_balancer_batch_handler.py +59 -59
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/network_batch_handler.py +51 -51
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/project_batch_handler.py +51 -51
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/role_assignment_batch_handler.py +38 -61
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/router_batch_handler.py +49 -49
- osi_dump-0.1.4/src/osi_dump/batch_handler/security_group_batch_handler.py +37 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/batch_handler/volume_batch_handler.py +45 -45
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/cli.py +267 -257
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/external_port/excel_external_port_exporter.py +34 -34
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/external_port/external_port_exporter.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/flavor/excel_flavor_exporter.py +30 -30
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/flavor/flavor_exporter.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +30 -30
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +32 -32
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/image/excel_image_exporter.py +28 -28
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/image/image_exporter.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/instance/excel_instance_exporter.py +29 -29
- osi_dump-0.1.4/src/osi_dump/exporter/instance/instance_exporter.py +8 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +36 -36
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/load_balancer/load_balancer_exporter.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/network/excel_network_exporter.py +32 -32
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/network/network_exporter.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/project/excel_project_exporter.py +30 -30
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/project/project_exporter.py +7 -7
- osi_dump-0.1.4/src/osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +43 -0
- osi_dump-0.1.4/src/osi_dump/exporter/role_assignment/role_assignment_exporter.py +7 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/router/excel_router_exporter.py +30 -30
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/router/router_exporter.py +7 -7
- osi_dump-0.1.4/src/osi_dump/exporter/security_group/excel_security_group_exporter.py +35 -0
- osi_dump-0.1.4/src/osi_dump/exporter/security_group/security_group_exporter.py +8 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/volume/excel_volume_exporter.py +29 -29
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/volume/volume_exporter.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/external_port/external_port_importer.py +9 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/external_port/openstack_external_port_importer.py +177 -177
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/flavor/flavor_importer.py +9 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/flavor/openstack_flavor_importer.py +64 -64
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/floating_ip/floating_ip_importer.py +9 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +68 -68
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/hypervisor/hypervisor_importer.py +9 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +137 -137
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/image/image_importer.py +9 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/image/openstack_image_importer.py +81 -81
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/instance/instance_importer.py +8 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/instance/openstack_instance_importer.py +136 -136
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/load_balancer/load_balancer_importer.py +9 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +113 -113
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/network/network_importer.py +9 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/network/openstack_network_importer.py +93 -93
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/project/openstack_project_importer.py +141 -141
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/project/project_importer.py +9 -9
- osi_dump-0.1.4/src/osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +117 -0
- osi_dump-0.1.4/src/osi_dump/importer/role_assignment/role_assignment_importer.py +16 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/router/openstack_router_importer.py +87 -87
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/router/router_importer.py +9 -9
- osi_dump-0.1.4/src/osi_dump/importer/security_group/openstack_security_group_importer.py +54 -0
- osi_dump-0.1.4/src/osi_dump/importer/security_group/security_group_importer.py +8 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/volume/openstack_volume_importer.py +81 -81
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/volume/volume_importer.py +9 -9
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/authentication_info.py +15 -15
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/external_port.py +30 -30
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/flavor.py +20 -20
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/floating_ip.py +24 -24
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/hypervisor.py +24 -24
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/image.py +27 -27
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/instance.py +29 -29
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/load_balancer.py +26 -26
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/network.py +25 -25
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/project.py +33 -33
- osi_dump-0.1.4/src/osi_dump/model/role_assignment.py +30 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/router.py +23 -23
- osi_dump-0.1.4/src/osi_dump/model/security_group.py +22 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/volume.py +25 -25
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/os_connection/get_connections.py +67 -67
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/__init__.py +7 -7
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/create_file.py +11 -11
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/excel_autosize_column.py +39 -39
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/excel_sort_sheet.py +35 -35
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/export_data_excel.py +36 -36
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/extract_hostname.py +5 -5
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/openstack_util.py +48 -48
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/panda_excel.py +26 -26
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/util/validate_dir_path.py +20 -20
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump.egg-info/PKG-INFO +40 -40
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump.egg-info/SOURCES.txt +6 -0
- osi_dump-0.1.3.3.4.3/src/osi_dump/exporter/instance/instance_exporter.py +0 -7
- osi_dump-0.1.3.3.4.3/src/osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +0 -35
- osi_dump-0.1.3.3.4.3/src/osi_dump/exporter/role_assignment/role_assignment_exporter.py +0 -7
- osi_dump-0.1.3.3.4.3/src/osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +0 -147
- osi_dump-0.1.3.3.4.3/src/osi_dump/importer/role_assignment/role_assignment_importer.py +0 -9
- osi_dump-0.1.3.3.4.3/src/osi_dump/model/role_assignment.py +0 -23
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/api/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/external_port/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/flavor/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/floating_ip/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/hypervisor/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/image/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/instance/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/load_balancer/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/network/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/project/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/role_assignment/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/router/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/exporter/volume/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/external_port/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/flavor/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/floating_ip/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/hypervisor/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/image/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/instance/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/load_balancer/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/network/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/project/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/role_assignment/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/router/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/importer/volume/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/model/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump/os_connection/__init__.py +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump.egg-info/dependency_links.txt +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump.egg-info/entry_points.txt +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump.egg-info/requires.txt +0 -0
- {osi_dump-0.1.3.3.4.3 → osi_dump-0.1.4}/src/osi_dump.egg-info/top_level.txt +0 -0
@@ -1,40 +1,40 @@
|
|
1
|
-
Metadata-Version: 2.4
|
2
|
-
Name: osi-dump
|
3
|
-
Version: 0.1.
|
4
|
-
Summary: OpenStack information dump tool
|
5
|
-
Author: TVKain
|
6
|
-
License: Apache-2.0
|
7
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
8
|
-
Requires-Python: >=3.10
|
9
|
-
Description-Content-Type: text/markdown
|
10
|
-
Requires-Dist: typer
|
11
|
-
Requires-Dist: openstacksdk==3.3.0
|
12
|
-
Requires-Dist: pydantic
|
13
|
-
Requires-Dist: pandas
|
14
|
-
Requires-Dist: openpyxl
|
15
|
-
Requires-Dist: numpy
|
16
|
-
Provides-Extra: test
|
17
|
-
Requires-Dist: pytest; extra == "test"
|
18
|
-
|
19
|
-
# OpenStack Information Dump
|
20
|
-
|
21
|
-
## Set up
|
22
|
-
|
23
|
-
Create virtual environment
|
24
|
-
|
25
|
-
```
|
26
|
-
python3 -m venv venv
|
27
|
-
```
|
28
|
-
|
29
|
-
Install packages
|
30
|
-
|
31
|
-
```
|
32
|
-
pip install .
|
33
|
-
```
|
34
|
-
|
35
|
-
## Execute
|
36
|
-
|
37
|
-
```
|
38
|
-
Usage: osi-dump [OPTIONS] FILE_PATH [OUTPUT_PATH]
|
39
|
-
```
|
40
|
-
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: osi-dump
|
3
|
+
Version: 0.1.4
|
4
|
+
Summary: OpenStack information dump tool
|
5
|
+
Author: TVKain
|
6
|
+
License: Apache-2.0
|
7
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
8
|
+
Requires-Python: >=3.10
|
9
|
+
Description-Content-Type: text/markdown
|
10
|
+
Requires-Dist: typer
|
11
|
+
Requires-Dist: openstacksdk==3.3.0
|
12
|
+
Requires-Dist: pydantic
|
13
|
+
Requires-Dist: pandas
|
14
|
+
Requires-Dist: openpyxl
|
15
|
+
Requires-Dist: numpy
|
16
|
+
Provides-Extra: test
|
17
|
+
Requires-Dist: pytest; extra == "test"
|
18
|
+
|
19
|
+
# OpenStack Information Dump
|
20
|
+
|
21
|
+
## Set up
|
22
|
+
|
23
|
+
Create virtual environment
|
24
|
+
|
25
|
+
```
|
26
|
+
python3 -m venv venv
|
27
|
+
```
|
28
|
+
|
29
|
+
Install packages
|
30
|
+
|
31
|
+
```
|
32
|
+
pip install .
|
33
|
+
```
|
34
|
+
|
35
|
+
## Execute
|
36
|
+
|
37
|
+
```
|
38
|
+
Usage: osi-dump [OPTIONS] FILE_PATH [OUTPUT_PATH]
|
39
|
+
```
|
40
|
+
|
@@ -1,22 +1,22 @@
|
|
1
|
-
# OpenStack Information Dump
|
2
|
-
|
3
|
-
## Set up
|
4
|
-
|
5
|
-
Create virtual environment
|
6
|
-
|
7
|
-
```
|
8
|
-
python3 -m venv venv
|
9
|
-
```
|
10
|
-
|
11
|
-
Install packages
|
12
|
-
|
13
|
-
```
|
14
|
-
pip install .
|
15
|
-
```
|
16
|
-
|
17
|
-
## Execute
|
18
|
-
|
19
|
-
```
|
20
|
-
Usage: osi-dump [OPTIONS] FILE_PATH [OUTPUT_PATH]
|
21
|
-
```
|
22
|
-
|
1
|
+
# OpenStack Information Dump
|
2
|
+
|
3
|
+
## Set up
|
4
|
+
|
5
|
+
Create virtual environment
|
6
|
+
|
7
|
+
```
|
8
|
+
python3 -m venv venv
|
9
|
+
```
|
10
|
+
|
11
|
+
Install packages
|
12
|
+
|
13
|
+
```
|
14
|
+
pip install .
|
15
|
+
```
|
16
|
+
|
17
|
+
## Execute
|
18
|
+
|
19
|
+
```
|
20
|
+
Usage: osi-dump [OPTIONS] FILE_PATH [OUTPUT_PATH]
|
21
|
+
```
|
22
|
+
|
@@ -1,24 +1,24 @@
|
|
1
|
-
[project]
|
2
|
-
name = "osi-dump"
|
3
|
-
version = "0.1.
|
4
|
-
description = "OpenStack information dump tool"
|
5
|
-
readme = "README.md"
|
6
|
-
authors = [{ name = "TVKain" }]
|
7
|
-
license = { text = "Apache-2.0" }
|
8
|
-
requires-python = ">=3.10"
|
9
|
-
classifiers = ["License :: OSI Approved :: Apache Software License"]
|
10
|
-
dependencies = [
|
11
|
-
"typer",
|
12
|
-
"openstacksdk==3.3.0",
|
13
|
-
"pydantic",
|
14
|
-
"pandas",
|
15
|
-
"openpyxl",
|
16
|
-
"numpy",
|
17
|
-
]
|
18
|
-
|
19
|
-
|
20
|
-
[project.scripts]
|
21
|
-
osi-dump = "osi_dump.cli:app"
|
22
|
-
|
23
|
-
[project.optional-dependencies]
|
24
|
-
test = ["pytest"]
|
1
|
+
[project]
|
2
|
+
name = "osi-dump"
|
3
|
+
version = "0.1.4"
|
4
|
+
description = "OpenStack information dump tool"
|
5
|
+
readme = "README.md"
|
6
|
+
authors = [{ name = "TVKain" }]
|
7
|
+
license = { text = "Apache-2.0" }
|
8
|
+
requires-python = ">=3.10"
|
9
|
+
classifiers = ["License :: OSI Approved :: Apache Software License"]
|
10
|
+
dependencies = [
|
11
|
+
"typer",
|
12
|
+
"openstacksdk==3.3.0",
|
13
|
+
"pydantic",
|
14
|
+
"pandas",
|
15
|
+
"openpyxl",
|
16
|
+
"numpy",
|
17
|
+
]
|
18
|
+
|
19
|
+
|
20
|
+
[project.scripts]
|
21
|
+
osi-dump = "osi_dump.cli:app"
|
22
|
+
|
23
|
+
[project.optional-dependencies]
|
24
|
+
test = ["pytest"]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
[egg_info]
|
2
|
-
tag_build =
|
3
|
-
tag_date = 0
|
4
|
-
|
1
|
+
[egg_info]
|
2
|
+
tag_build =
|
3
|
+
tag_date = 0
|
4
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
if __name__ == "__main__":
|
2
|
-
from osi_dump.cli import app
|
3
|
-
|
4
|
-
app()
|
1
|
+
if __name__ == "__main__":
|
2
|
+
from osi_dump.cli import app
|
3
|
+
|
4
|
+
app()
|
@@ -1,71 +1,71 @@
|
|
1
|
-
import logging
|
2
|
-
|
3
|
-
from openstack.connection import Connection
|
4
|
-
from openstack.identity.v3.service import Service
|
5
|
-
from openstack.load_balancer.v2.load_balancer import LoadBalancer
|
6
|
-
|
7
|
-
import osi_dump.util.openstack_util as os_util
|
8
|
-
|
9
|
-
logger = logging.getLogger(__name__)
|
10
|
-
|
11
|
-
|
12
|
-
def get_users(connection: Connection):
|
13
|
-
|
14
|
-
keystone_endpoints = os_util.get_endpoints(connection=connection, service_type="identity", interface="public")
|
15
|
-
|
16
|
-
for keystone_endpoint in keystone_endpoints:
|
17
|
-
try:
|
18
|
-
if "v3" not in keystone_endpoint:
|
19
|
-
url = f"{keystone_endpoint}/v3/users"
|
20
|
-
else:
|
21
|
-
url = f"{keystone_endpoint}/users"
|
22
|
-
|
23
|
-
response = connection.session.get(url)
|
24
|
-
if response.status_code == 200:
|
25
|
-
break
|
26
|
-
except Exception as e:
|
27
|
-
logger.info(e)
|
28
|
-
|
29
|
-
|
30
|
-
if response is None:
|
31
|
-
return []
|
32
|
-
|
33
|
-
return response.json()["users"]
|
34
|
-
|
35
|
-
def get_role_assignments(connection: Connection):
|
36
|
-
keystone_endpoint = connection.endpoint_for(service_type="identity", interface="public")
|
37
|
-
|
38
|
-
logger.info(keystone_endpoint)
|
39
|
-
|
40
|
-
try:
|
41
|
-
if "v3" not in keystone_endpoint:
|
42
|
-
url = f"{keystone_endpoint}/v3/role_assignments?include_names"
|
43
|
-
else:
|
44
|
-
url = f"{keystone_endpoint}/role_assignments?include_names"
|
45
|
-
|
46
|
-
logger.info(url)
|
47
|
-
response = connection.session.get(url)
|
48
|
-
except Exception as e:
|
49
|
-
logger.info(e)
|
50
|
-
|
51
|
-
if response is None:
|
52
|
-
return []
|
53
|
-
|
54
|
-
return response.json()['role_assignments']
|
55
|
-
|
56
|
-
# keystone_endpoints = [connection.endpoint_for(service_type="keystone", interface="public")]
|
57
|
-
|
58
|
-
# for endpoint in keystone_endpoints:
|
59
|
-
# try:
|
60
|
-
# url = f"{endpoint}/v3/role_assignments?include_names"
|
61
|
-
# response = connection.session.get(url)
|
62
|
-
# if response.status_code == 200:
|
63
|
-
# break
|
64
|
-
# except Exception as e:
|
65
|
-
# logger.info(e)
|
66
|
-
|
67
|
-
# if response is None:
|
68
|
-
# return []
|
69
|
-
|
70
|
-
# return response.json()['role_assignments']
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from openstack.connection import Connection
|
4
|
+
from openstack.identity.v3.service import Service
|
5
|
+
from openstack.load_balancer.v2.load_balancer import LoadBalancer
|
6
|
+
|
7
|
+
import osi_dump.util.openstack_util as os_util
|
8
|
+
|
9
|
+
logger = logging.getLogger(__name__)
|
10
|
+
|
11
|
+
|
12
|
+
def get_users(connection: Connection):
|
13
|
+
|
14
|
+
keystone_endpoints = os_util.get_endpoints(connection=connection, service_type="identity", interface="public")
|
15
|
+
|
16
|
+
for keystone_endpoint in keystone_endpoints:
|
17
|
+
try:
|
18
|
+
if "v3" not in keystone_endpoint:
|
19
|
+
url = f"{keystone_endpoint}/v3/users"
|
20
|
+
else:
|
21
|
+
url = f"{keystone_endpoint}/users"
|
22
|
+
|
23
|
+
response = connection.session.get(url)
|
24
|
+
if response.status_code == 200:
|
25
|
+
break
|
26
|
+
except Exception as e:
|
27
|
+
logger.info(e)
|
28
|
+
|
29
|
+
|
30
|
+
if response is None:
|
31
|
+
return []
|
32
|
+
|
33
|
+
return response.json()["users"]
|
34
|
+
|
35
|
+
def get_role_assignments(connection: Connection):
|
36
|
+
keystone_endpoint = connection.endpoint_for(service_type="identity", interface="public")
|
37
|
+
|
38
|
+
logger.info(keystone_endpoint)
|
39
|
+
|
40
|
+
try:
|
41
|
+
if "v3" not in keystone_endpoint:
|
42
|
+
url = f"{keystone_endpoint}/v3/role_assignments?include_names"
|
43
|
+
else:
|
44
|
+
url = f"{keystone_endpoint}/role_assignments?include_names"
|
45
|
+
|
46
|
+
logger.info(url)
|
47
|
+
response = connection.session.get(url)
|
48
|
+
except Exception as e:
|
49
|
+
logger.info(e)
|
50
|
+
|
51
|
+
if response is None:
|
52
|
+
return []
|
53
|
+
|
54
|
+
return response.json()['role_assignments']
|
55
|
+
|
56
|
+
# keystone_endpoints = [connection.endpoint_for(service_type="keystone", interface="public")]
|
57
|
+
|
58
|
+
# for endpoint in keystone_endpoints:
|
59
|
+
# try:
|
60
|
+
# url = f"{endpoint}/v3/role_assignments?include_names"
|
61
|
+
# response = connection.session.get(url)
|
62
|
+
# if response.status_code == 200:
|
63
|
+
# break
|
64
|
+
# except Exception as e:
|
65
|
+
# logger.info(e)
|
66
|
+
|
67
|
+
# if response is None:
|
68
|
+
# return []
|
69
|
+
|
70
|
+
# return response.json()['role_assignments']
|
71
71
|
|
@@ -1,65 +1,65 @@
|
|
1
|
-
import logging
|
2
|
-
|
3
|
-
from openstack.connection import Connection
|
4
|
-
from openstack.identity.v3.service import Service
|
5
|
-
from openstack.load_balancer.v2.load_balancer import LoadBalancer
|
6
|
-
|
7
|
-
import osi_dump.util.openstack_util as os_util
|
8
|
-
|
9
|
-
logger = logging.getLogger(__name__)
|
10
|
-
|
11
|
-
|
12
|
-
def get_floating_ip_project(connection: Connection, floating_ip_id: str):
|
13
|
-
# neutron_endpoint = os_util.get_endpoint(
|
14
|
-
# connection=connection, service_type="network", interface="public"
|
15
|
-
# )
|
16
|
-
|
17
|
-
neutron_endpoints = os_util.get_endpoints(
|
18
|
-
connection=connection, service_type="network", interface="public"
|
19
|
-
)
|
20
|
-
|
21
|
-
response = None
|
22
|
-
|
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)
|
31
|
-
|
32
|
-
if response is None:
|
33
|
-
return None
|
34
|
-
|
35
|
-
return response.json()["floatingip"]["project_id"]
|
36
|
-
|
37
|
-
|
38
|
-
def get_router_project(connection: Connection, router_id: str):
|
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"
|
45
|
-
)
|
46
|
-
|
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)
|
54
|
-
|
55
|
-
if response.status_code == 200:
|
56
|
-
break
|
57
|
-
except Exception as e:
|
58
|
-
print(e)
|
59
|
-
|
60
|
-
if response is None:
|
61
|
-
return None
|
62
|
-
|
63
|
-
data = response.json()
|
64
|
-
|
65
|
-
return data["router"]["project_id"]
|
1
|
+
import logging
|
2
|
+
|
3
|
+
from openstack.connection import Connection
|
4
|
+
from openstack.identity.v3.service import Service
|
5
|
+
from openstack.load_balancer.v2.load_balancer import LoadBalancer
|
6
|
+
|
7
|
+
import osi_dump.util.openstack_util as os_util
|
8
|
+
|
9
|
+
logger = logging.getLogger(__name__)
|
10
|
+
|
11
|
+
|
12
|
+
def get_floating_ip_project(connection: Connection, floating_ip_id: str):
|
13
|
+
# neutron_endpoint = os_util.get_endpoint(
|
14
|
+
# connection=connection, service_type="network", interface="public"
|
15
|
+
# )
|
16
|
+
|
17
|
+
neutron_endpoints = os_util.get_endpoints(
|
18
|
+
connection=connection, service_type="network", interface="public"
|
19
|
+
)
|
20
|
+
|
21
|
+
response = None
|
22
|
+
|
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)
|
31
|
+
|
32
|
+
if response is None:
|
33
|
+
return None
|
34
|
+
|
35
|
+
return response.json()["floatingip"]["project_id"]
|
36
|
+
|
37
|
+
|
38
|
+
def get_router_project(connection: Connection, router_id: str):
|
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"
|
45
|
+
)
|
46
|
+
|
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)
|
54
|
+
|
55
|
+
if response.status_code == 200:
|
56
|
+
break
|
57
|
+
except Exception as e:
|
58
|
+
print(e)
|
59
|
+
|
60
|
+
if response is None:
|
61
|
+
return None
|
62
|
+
|
63
|
+
data = response.json()
|
64
|
+
|
65
|
+
return data["router"]["project_id"]
|
@@ -1,94 +1,94 @@
|
|
1
|
-
from openstack.connection import Connection
|
2
|
-
from openstack.identity.v3.service import Service
|
3
|
-
from openstack.load_balancer.v2.load_balancer import LoadBalancer
|
4
|
-
|
5
|
-
|
6
|
-
import osi_dump.util.openstack_util as os_util
|
7
|
-
|
8
|
-
|
9
|
-
def get_load_balancer_flavor(connection: Connection, flavor_id: str) -> dict:
|
10
|
-
|
11
|
-
if not flavor_id:
|
12
|
-
return None
|
13
|
-
|
14
|
-
octavia_endpoints = os_util.get_endpoints(
|
15
|
-
connection=connection, service_type="load-balancer", interface="public"
|
16
|
-
)
|
17
|
-
|
18
|
-
response = None
|
19
|
-
|
20
|
-
for endpoint in octavia_endpoints:
|
21
|
-
try:
|
22
|
-
url = f"{endpoint}/v2.0/lbaas/flavors/{flavor_id}"
|
23
|
-
response = connection.session.get(url)
|
24
|
-
if response.status_code == 200:
|
25
|
-
break
|
26
|
-
except Exception as e:
|
27
|
-
print(e)
|
28
|
-
|
29
|
-
if response is None:
|
30
|
-
return None
|
31
|
-
|
32
|
-
data = response.json()
|
33
|
-
|
34
|
-
return data["flavor"]
|
35
|
-
|
36
|
-
def get_load_balancers(connection: Connection) -> list[LoadBalancer]:
|
37
|
-
# octavia_endpoint = os_util.get_endpoint(
|
38
|
-
# connection=connection, service_type="load-balancer", interface="public"
|
39
|
-
# )
|
40
|
-
|
41
|
-
octavia_endpoints = os_util.get_endpoints(
|
42
|
-
connection=connection, service_type="load-balancer", interface="public"
|
43
|
-
)
|
44
|
-
|
45
|
-
response = None
|
46
|
-
|
47
|
-
for endpoint in octavia_endpoints:
|
48
|
-
try:
|
49
|
-
url = f"{endpoint}/v2.0/lbaas/loadbalancers"
|
50
|
-
response = connection.session.get(url)
|
51
|
-
if response.status_code == 200:
|
52
|
-
break
|
53
|
-
except Exception as e:
|
54
|
-
print(e)
|
55
|
-
|
56
|
-
if response is None:
|
57
|
-
return None
|
58
|
-
|
59
|
-
data = response.json()
|
60
|
-
|
61
|
-
return data["loadbalancers"]
|
62
|
-
|
63
|
-
|
64
|
-
def get_amphoraes(connection: Connection, load_balancer_id: str) -> list[dict]:
|
65
|
-
|
66
|
-
# octavia_endpoint = os_util.get_endpoint(
|
67
|
-
# connection=connection, service_type="load-balancer", interface="public"
|
68
|
-
# )
|
69
|
-
|
70
|
-
octavia_endpoints = os_util.get_endpoints(
|
71
|
-
connection=connection, service_type="load-balancer", interface="public"
|
72
|
-
)
|
73
|
-
|
74
|
-
response = None
|
75
|
-
|
76
|
-
for endpoint in octavia_endpoints:
|
77
|
-
try:
|
78
|
-
url = f"{endpoint}/v2/octavia/amphorae?load_balancer_id={load_balancer_id}&fields=status&fields=compute_id&fields=compute_flavor&fields=role"
|
79
|
-
response = connection.session.get(url)
|
80
|
-
if response.status_code == 200:
|
81
|
-
break
|
82
|
-
except Exception as e:
|
83
|
-
print(e)
|
84
|
-
|
85
|
-
if response is None:
|
86
|
-
return None
|
87
|
-
|
88
|
-
data = response.json()
|
89
|
-
|
90
|
-
amphoraes = data["amphorae"]
|
91
|
-
|
92
|
-
amphoraes = [dict(sorted(amphorae.items())) for amphorae in amphoraes]
|
93
|
-
|
94
|
-
return amphoraes
|
1
|
+
from openstack.connection import Connection
|
2
|
+
from openstack.identity.v3.service import Service
|
3
|
+
from openstack.load_balancer.v2.load_balancer import LoadBalancer
|
4
|
+
|
5
|
+
|
6
|
+
import osi_dump.util.openstack_util as os_util
|
7
|
+
|
8
|
+
|
9
|
+
def get_load_balancer_flavor(connection: Connection, flavor_id: str) -> dict:
|
10
|
+
|
11
|
+
if not flavor_id:
|
12
|
+
return None
|
13
|
+
|
14
|
+
octavia_endpoints = os_util.get_endpoints(
|
15
|
+
connection=connection, service_type="load-balancer", interface="public"
|
16
|
+
)
|
17
|
+
|
18
|
+
response = None
|
19
|
+
|
20
|
+
for endpoint in octavia_endpoints:
|
21
|
+
try:
|
22
|
+
url = f"{endpoint}/v2.0/lbaas/flavors/{flavor_id}"
|
23
|
+
response = connection.session.get(url)
|
24
|
+
if response.status_code == 200:
|
25
|
+
break
|
26
|
+
except Exception as e:
|
27
|
+
print(e)
|
28
|
+
|
29
|
+
if response is None:
|
30
|
+
return None
|
31
|
+
|
32
|
+
data = response.json()
|
33
|
+
|
34
|
+
return data["flavor"]
|
35
|
+
|
36
|
+
def get_load_balancers(connection: Connection) -> list[LoadBalancer]:
|
37
|
+
# octavia_endpoint = os_util.get_endpoint(
|
38
|
+
# connection=connection, service_type="load-balancer", interface="public"
|
39
|
+
# )
|
40
|
+
|
41
|
+
octavia_endpoints = os_util.get_endpoints(
|
42
|
+
connection=connection, service_type="load-balancer", interface="public"
|
43
|
+
)
|
44
|
+
|
45
|
+
response = None
|
46
|
+
|
47
|
+
for endpoint in octavia_endpoints:
|
48
|
+
try:
|
49
|
+
url = f"{endpoint}/v2.0/lbaas/loadbalancers"
|
50
|
+
response = connection.session.get(url)
|
51
|
+
if response.status_code == 200:
|
52
|
+
break
|
53
|
+
except Exception as e:
|
54
|
+
print(e)
|
55
|
+
|
56
|
+
if response is None:
|
57
|
+
return None
|
58
|
+
|
59
|
+
data = response.json()
|
60
|
+
|
61
|
+
return data["loadbalancers"]
|
62
|
+
|
63
|
+
|
64
|
+
def get_amphoraes(connection: Connection, load_balancer_id: str) -> list[dict]:
|
65
|
+
|
66
|
+
# octavia_endpoint = os_util.get_endpoint(
|
67
|
+
# connection=connection, service_type="load-balancer", interface="public"
|
68
|
+
# )
|
69
|
+
|
70
|
+
octavia_endpoints = os_util.get_endpoints(
|
71
|
+
connection=connection, service_type="load-balancer", interface="public"
|
72
|
+
)
|
73
|
+
|
74
|
+
response = None
|
75
|
+
|
76
|
+
for endpoint in octavia_endpoints:
|
77
|
+
try:
|
78
|
+
url = f"{endpoint}/v2/octavia/amphorae?load_balancer_id={load_balancer_id}&fields=status&fields=compute_id&fields=compute_flavor&fields=role"
|
79
|
+
response = connection.session.get(url)
|
80
|
+
if response.status_code == 200:
|
81
|
+
break
|
82
|
+
except Exception as e:
|
83
|
+
print(e)
|
84
|
+
|
85
|
+
if response is None:
|
86
|
+
return None
|
87
|
+
|
88
|
+
data = response.json()
|
89
|
+
|
90
|
+
amphoraes = data["amphorae"]
|
91
|
+
|
92
|
+
amphoraes = [dict(sorted(amphorae.items())) for amphorae in amphoraes]
|
93
|
+
|
94
|
+
return amphoraes
|