osi-dump 0.1.3.3.3.9__tar.gz → 0.1.3.3.4.1__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 (129) hide show
  1. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/PKG-INFO +2 -2
  2. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/pyproject.toml +1 -1
  3. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/api/keystone.py +23 -0
  4. osi_dump-0.1.3.3.4.1/src/osi_dump/batch_handler/network_batch_handler.py +51 -0
  5. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/cli.py +22 -10
  6. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/flavor/excel_flavor_exporter.py +1 -1
  7. osi_dump-0.1.3.3.4.1/src/osi_dump/exporter/network/excel_network_exporter.py +32 -0
  8. osi_dump-0.1.3.3.4.1/src/osi_dump/exporter/network/network_exporter.py +7 -0
  9. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +17 -0
  10. osi_dump-0.1.3.3.4.1/src/osi_dump/importer/network/network_importer.py +9 -0
  11. osi_dump-0.1.3.3.4.1/src/osi_dump/importer/network/openstack_network_importer.py +94 -0
  12. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +24 -6
  13. osi_dump-0.1.3.3.4.1/src/osi_dump/model/__init__.py +0 -0
  14. osi_dump-0.1.3.3.4.1/src/osi_dump/model/network.py +26 -0
  15. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/role_assignment.py +4 -0
  16. osi_dump-0.1.3.3.4.1/src/osi_dump/os_connection/__init__.py +0 -0
  17. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump.egg-info/PKG-INFO +2 -2
  18. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump.egg-info/SOURCES.txt +8 -0
  19. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/README.md +0 -0
  20. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/setup.cfg +0 -0
  21. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/__init__.py +0 -0
  22. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/__main__.py +0 -0
  23. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/api/__init__.py +0 -0
  24. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/api/neutron.py +0 -0
  25. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/api/octavia.py +0 -0
  26. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/api/placement.py +0 -0
  27. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/__init__.py +0 -0
  28. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/external_port_batch_handler.py +0 -0
  29. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/flavor_batch_handler.py +0 -0
  30. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/floating_ip_batch_handler.py +0 -0
  31. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/hypervisor_batch_handler.py +0 -0
  32. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/image_batch_handler.py +0 -0
  33. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/instance_batch_handler.py +0 -0
  34. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/load_balancer_batch_handler.py +0 -0
  35. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/project_batch_handler.py +0 -0
  36. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/role_assignment_batch_handler.py +0 -0
  37. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/router_batch_handler.py +0 -0
  38. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/batch_handler/volume_batch_handler.py +0 -0
  39. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/__init__.py +0 -0
  40. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/external_port/__init__.py +0 -0
  41. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/external_port/excel_external_port_exporter.py +0 -0
  42. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/external_port/external_port_exporter.py +0 -0
  43. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/flavor/__init__.py +0 -0
  44. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/flavor/flavor_exporter.py +0 -0
  45. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/floating_ip/__init__.py +0 -0
  46. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +0 -0
  47. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/floating_ip/floating_ip_exporter.py +0 -0
  48. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/hypervisor/__init__.py +0 -0
  49. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +0 -0
  50. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/hypervisor/hypervisor_exporter.py +0 -0
  51. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/image/__init__.py +0 -0
  52. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/image/excel_image_exporter.py +0 -0
  53. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/image/image_exporter.py +0 -0
  54. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/instance/__init__.py +0 -0
  55. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/instance/excel_instance_exporter.py +0 -0
  56. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/instance/instance_exporter.py +0 -0
  57. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/load_balancer/__init__.py +0 -0
  58. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +0 -0
  59. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/load_balancer/load_balancer_exporter.py +0 -0
  60. {osi_dump-0.1.3.3.3.9/src/osi_dump/exporter/project → osi_dump-0.1.3.3.4.1/src/osi_dump/exporter/network}/__init__.py +0 -0
  61. {osi_dump-0.1.3.3.3.9/src/osi_dump/exporter/role_assignment → osi_dump-0.1.3.3.4.1/src/osi_dump/exporter/project}/__init__.py +0 -0
  62. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/project/excel_project_exporter.py +0 -0
  63. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/project/project_exporter.py +0 -0
  64. {osi_dump-0.1.3.3.3.9/src/osi_dump/exporter/router → osi_dump-0.1.3.3.4.1/src/osi_dump/exporter/role_assignment}/__init__.py +0 -0
  65. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +0 -0
  66. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/role_assignment/role_assignment_exporter.py +0 -0
  67. {osi_dump-0.1.3.3.3.9/src/osi_dump/exporter/volume → osi_dump-0.1.3.3.4.1/src/osi_dump/exporter/router}/__init__.py +0 -0
  68. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/router/excel_router_exporter.py +0 -0
  69. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/router/router_exporter.py +0 -0
  70. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/external_port → osi_dump-0.1.3.3.4.1/src/osi_dump/exporter/volume}/__init__.py +0 -0
  71. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/volume/excel_volume_exporter.py +0 -0
  72. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/exporter/volume/volume_exporter.py +0 -0
  73. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/flavor → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/external_port}/__init__.py +0 -0
  74. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/external_port/external_port_importer.py +0 -0
  75. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/external_port/openstack_external_port_importer.py +0 -0
  76. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/floating_ip → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/flavor}/__init__.py +0 -0
  77. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/flavor/flavor_importer.py +0 -0
  78. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/flavor/openstack_flavor_importer.py +0 -0
  79. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/hypervisor → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/floating_ip}/__init__.py +0 -0
  80. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/floating_ip/floating_ip_importer.py +0 -0
  81. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +0 -0
  82. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/image → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/hypervisor}/__init__.py +0 -0
  83. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/hypervisor/hypervisor_importer.py +0 -0
  84. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/instance → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/image}/__init__.py +0 -0
  85. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/image/image_importer.py +0 -0
  86. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/image/openstack_image_importer.py +0 -0
  87. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/load_balancer → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/instance}/__init__.py +0 -0
  88. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/instance/instance_importer.py +0 -0
  89. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/instance/openstack_instance_importer.py +0 -0
  90. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/project → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/load_balancer}/__init__.py +0 -0
  91. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/load_balancer/load_balancer_importer.py +0 -0
  92. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +0 -0
  93. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/role_assignment → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/network}/__init__.py +0 -0
  94. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/router → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/project}/__init__.py +0 -0
  95. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/project/openstack_project_importer.py +0 -0
  96. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/project/project_importer.py +0 -0
  97. {osi_dump-0.1.3.3.3.9/src/osi_dump/importer/volume → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/role_assignment}/__init__.py +0 -0
  98. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/role_assignment/role_assignment_importer.py +0 -0
  99. {osi_dump-0.1.3.3.3.9/src/osi_dump/model → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/router}/__init__.py +0 -0
  100. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/router/openstack_router_importer.py +0 -0
  101. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/router/router_importer.py +0 -0
  102. {osi_dump-0.1.3.3.3.9/src/osi_dump/os_connection → osi_dump-0.1.3.3.4.1/src/osi_dump/importer/volume}/__init__.py +0 -0
  103. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/volume/openstack_volume_importer.py +0 -0
  104. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/importer/volume/volume_importer.py +0 -0
  105. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/authentication_info.py +0 -0
  106. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/external_port.py +0 -0
  107. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/flavor.py +0 -0
  108. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/floating_ip.py +0 -0
  109. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/hypervisor.py +0 -0
  110. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/image.py +0 -0
  111. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/instance.py +0 -0
  112. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/load_balancer.py +0 -0
  113. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/project.py +0 -0
  114. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/router.py +0 -0
  115. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/model/volume.py +0 -0
  116. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/os_connection/get_connections.py +0 -0
  117. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/__init__.py +0 -0
  118. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/create_file.py +0 -0
  119. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/excel_autosize_column.py +0 -0
  120. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/excel_sort_sheet.py +0 -0
  121. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/export_data_excel.py +0 -0
  122. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/extract_hostname.py +0 -0
  123. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/openstack_util.py +0 -0
  124. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/panda_excel.py +0 -0
  125. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump/util/validate_dir_path.py +0 -0
  126. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump.egg-info/dependency_links.txt +0 -0
  127. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump.egg-info/entry_points.txt +0 -0
  128. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump.egg-info/requires.txt +0 -0
  129. {osi_dump-0.1.3.3.3.9 → osi_dump-0.1.3.3.4.1}/src/osi_dump.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: osi-dump
3
- Version: 0.1.3.3.3.9
3
+ Version: 0.1.3.3.4.1
4
4
  Summary: OpenStack 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.3.3.3.9"
3
+ version = "0.1.3.3.4.1"
4
4
  description = "OpenStack information dump tool"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "TVKain" }]
@@ -9,6 +9,29 @@ import osi_dump.util.openstack_util as os_util
9
9
  logger = logging.getLogger(__name__)
10
10
 
11
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
+
12
35
  def get_role_assignments(connection: Connection):
13
36
  keystone_endpoint = connection.endpoint_for(service_type="identity", interface="public")
14
37
 
@@ -0,0 +1,51 @@
1
+ import logging
2
+
3
+ from openstack.connection import Connection
4
+
5
+ from osi_dump.exporter.network.network_exporter import NetworkExporter
6
+ from osi_dump.exporter.network.excel_network_exporter import (
7
+ ExcelNetworkExporter,
8
+ )
9
+
10
+ from osi_dump.importer.network.network_importer import NetworkImporter
11
+ from osi_dump.importer.network.openstack_network_importer import (
12
+ OpenStackNetworkImporter,
13
+ )
14
+
15
+
16
+ from osi_dump import util
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ class NetworkBatchHandler:
22
+ def __init__(self):
23
+ self._importer_exporter_list: list[tuple[NetworkImporter, NetworkExporter]] = []
24
+
25
+ def add_importer_exporter_from_openstack_connections(
26
+ self, connections: list[Connection], output_file: str
27
+ ):
28
+ for connection in connections:
29
+ importer = OpenStackNetworkImporter(connection)
30
+
31
+ sheet_name = f"{util.extract_hostname(connection.auth['auth_url'])}-network"
32
+ exporter = ExcelNetworkExporter(
33
+ sheet_name=sheet_name, output_file=output_file
34
+ )
35
+
36
+ self.add_importer_exporter(importer=importer, exporter=exporter)
37
+
38
+ def add_importer_exporter(self, importer: NetworkImporter, exporter: NetworkExporter):
39
+ self._importer_exporter_list.append((importer, exporter))
40
+
41
+ def process(self):
42
+
43
+ for importer, exporter in self._importer_exporter_list:
44
+ try:
45
+
46
+ networks = importer.import_networks()
47
+
48
+ exporter.export_networks(networks=networks)
49
+ except Exception as e:
50
+ logger.warning(e)
51
+ logger.warning("Skipping...")
@@ -19,6 +19,8 @@ app = typer.Typer()
19
19
 
20
20
 
21
21
  from osi_dump.batch_handler.flavor_batch_handler import FlavorBatchHandler
22
+ from osi_dump.batch_handler.network_batch_handler import NetworkBatchHandler
23
+
22
24
  from osi_dump.batch_handler.image_batch_handler import ImageBatchHandler
23
25
  from osi_dump.batch_handler.volume_batch_handler import VolumeBatchHandler
24
26
  from osi_dump.os_connection.get_connections import get_connections
@@ -149,6 +151,14 @@ def _external_port(connections, output_path: str):
149
151
 
150
152
  _external_batch_handler.process()
151
153
 
154
+ def _network(connections, output_path: str):
155
+ _network_batch_handler = NetworkBatchHandler()
156
+
157
+ _network_batch_handler.add_importer_exporter_from_openstack_connections(
158
+ connections, output_file=output_path
159
+ )
160
+
161
+ _network_batch_handler.process()
152
162
 
153
163
  def inner_main(file_path: str, output_path: str):
154
164
 
@@ -156,27 +166,29 @@ def inner_main(file_path: str, output_path: str):
156
166
 
157
167
  connections = get_connections(file_path=file_path)
158
168
 
159
- _instance(connections=connections, output_path=output_path)
169
+ #_instance(connections=connections, output_path=output_path)
160
170
 
161
- _floating_ip(connections=connections, output_path=output_path)
171
+ #_floating_ip(connections=connections, output_path=output_path)
162
172
 
163
- _volume(connections=connections, output_path=output_path)
173
+ #_volume(connections=connections, output_path=output_path)
164
174
 
165
- _hypervisor(connections=connections, output_path=output_path)
175
+ #_hypervisor(connections=connections, output_path=output_path)
166
176
 
167
- _project(connections=connections, output_path=output_path)
177
+ #_project(connections=connections, output_path=output_path)
168
178
 
169
- _image(connections=connections, output_path=output_path)
179
+ #_image(connections=connections, output_path=output_path)
170
180
 
171
- _flavor(connections=connections, output_path=output_path)
181
+ #_flavor(connections=connections, output_path=output_path)
172
182
 
173
183
  _role_assignment(connections=connections, output_path=output_path)
174
184
 
175
- _load_balancer(connections=connections, output_path=output_path)
185
+ #_load_balancer(connections=connections, output_path=output_path)
186
+
187
+ #_router(connections=connections, output_path=output_path)
176
188
 
177
- _router(connections=connections, output_path=output_path)
189
+ #_external_port(connections=connections, output_path=output_path)
178
190
 
179
- _external_port(connections=connections, output_path=output_path)
191
+ #_network(connections=connections, output_path=output_path)
180
192
 
181
193
  util.excel_autosize_column(output_path)
182
194
 
@@ -27,4 +27,4 @@ class ExcelFlavorExporter(FlavorExporter):
27
27
 
28
28
  logger.info(f"Exported flavors for {self.sheet_name}")
29
29
  except Exception as e:
30
- logger.warning(f"Exporting floating ips for {self.sheet_name} error: {e}")
30
+ logger.warning(f"Exporting flavors for {self.sheet_name} error: {e}")
@@ -0,0 +1,32 @@
1
+ import logging
2
+
3
+
4
+ import pandas as pd
5
+
6
+
7
+ from osi_dump.exporter.network.network_exporter import NetworkExporter
8
+
9
+ from osi_dump.model.network import Network
10
+
11
+ from osi_dump import util
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class ExcelNetworkExporter(NetworkExporter):
17
+ def __init__(self, sheet_name: str, output_file: str):
18
+ self.sheet_name = sheet_name
19
+ self.output_file = output_file
20
+
21
+ def export_networks(self, networks: list[Network]):
22
+ df = pd.json_normalize([network.model_dump() for network in networks])
23
+
24
+ df = util.expand_list_column(df, "subnets")
25
+
26
+ logger.info(f"Exporting networks for {self.sheet_name}")
27
+ try:
28
+ util.export_data_excel(self.output_file, sheet_name=self.sheet_name, df=df)
29
+
30
+ logger.info(f"Exported networks for {self.sheet_name}")
31
+ except Exception as e:
32
+ logger.warning(f"Exporting networks for {self.sheet_name} error: {e}")
@@ -0,0 +1,7 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+
4
+ class NetworkExporter(ABC):
5
+ @abstractmethod
6
+ def export_networks(self, networks, output_file: str):
7
+ pass
@@ -56,6 +56,23 @@ class OpenStackHypervisorImporter(HypervisorImporter):
56
56
 
57
57
  return hypervisors
58
58
 
59
+
60
+ def _normalize_hypervisor_aggregate(self, hypervisors: list[Hypervisor]):
61
+
62
+ aggregate_id_map = {
63
+
64
+ }
65
+
66
+ aggregates: list[list[dict]] = [
67
+
68
+ ]
69
+
70
+ for hypervisor in hypervisors:
71
+ aggregates.append(hypervisor.aggregates)
72
+
73
+ def _swap_element(array, i, j):
74
+ array[i], array[j] = array[j], array[i]
75
+
59
76
  def _get_hypervisor_info(
60
77
  self, hypervisor: OSHypervisor, aggregates: list[OSAggregate]
61
78
  ) -> Hypervisor:
@@ -0,0 +1,9 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ from osi_dump.model.network import Network
4
+
5
+
6
+ class NetworkImporter(ABC):
7
+ @abstractmethod
8
+ def import_networks(self) -> list[Network]:
9
+ pass
@@ -0,0 +1,94 @@
1
+ import logging
2
+
3
+ import concurrent
4
+
5
+ from openstack.network.v2.network import Network as OSNetwork
6
+ from openstack.network.v2.subnet import Subnet as OSSubnet
7
+
8
+ from openstack.connection import Connection
9
+
10
+ from osi_dump.importer.network.network_importer import NetworkImporter
11
+ from osi_dump.model.network import Network
12
+
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class OpenStackNetworkImporter(NetworkImporter):
18
+ def __init__(self, connection: Connection):
19
+ self.connection = connection
20
+
21
+ def import_networks(self) -> list[Network]:
22
+ """Import networks information from Openstack
23
+
24
+ Raises:
25
+ Exception: Raises exception if fetching networks failed
26
+
27
+ Returns:
28
+ list[Network]: _description_
29
+ """
30
+
31
+ try:
32
+ os_networks: list[OSNetwork] = list(self.connection.list_networks())
33
+ except Exception as e:
34
+ raise Exception(
35
+ f"Can not fetch hypervisor for {self.connection.auth['auth_url']}"
36
+ ) from e
37
+
38
+ networks: list[Network] = []
39
+
40
+ with concurrent.futures.ThreadPoolExecutor() as executor:
41
+ futures = [
42
+ executor.submit(self._get_network_info, network)
43
+ for network in os_networks
44
+ ]
45
+ for future in concurrent.futures.as_completed(futures):
46
+ networks.append(future.result())
47
+
48
+ logger.info(f"Imported networks for {self.connection.auth['auth_url']}")
49
+
50
+ return networks
51
+
52
+
53
+ def _get_network_info(
54
+ self, network: OSNetwork,
55
+ ) -> Network:
56
+
57
+ subnets = self._get_subnets_info(subnet_ids=network.subnet_ids)
58
+
59
+ return Network(
60
+ network_id=network.id,
61
+ project_id=network.project_id,
62
+ name=network.name,
63
+ mtu=network.mtu,
64
+ port_security_enabled=network.is_port_security_enabled,
65
+ network_type=network.provider_network_type,
66
+ physical_network=network.provider_physical_network,
67
+ segmentation_id=network.provider_segmentation_id,
68
+ status=network.status,
69
+ shared=network.is_shared,
70
+ created_at=network.created_at,
71
+ updated_at=network.updated_at,
72
+ subnets=subnets
73
+ )
74
+
75
+
76
+ def _get_subnets_info(self, subnet_ids: list[str]) -> list[dict]:
77
+ subnets = []
78
+
79
+ for subnet_id in subnet_ids:
80
+ os_subnet: OSSubnet = self.connection.get_subnet(name_or_id=subnet_id)
81
+
82
+ if not os_subnet:
83
+ continue
84
+
85
+ subnets.append({
86
+ "id": os_subnet.id,
87
+ "cidr": os_subnet.cidr
88
+ })
89
+
90
+ return subnets
91
+
92
+
93
+
94
+
@@ -4,13 +4,15 @@ import concurrent
4
4
 
5
5
  from openstack.connection import Connection
6
6
  from openstack.identity.v3.role_assignment import RoleAssignment as OSRoleAssignment
7
+ from openstack.identity.v3.user import User as OSUser
8
+
7
9
 
8
10
  from osi_dump.importer.role_assignment.role_assignment_importer import (
9
11
  RoleAssignmentImporter,
10
12
  )
11
13
  from osi_dump.model.role_assignment import RoleAssignment
12
14
 
13
- from osi_dump.api.keystone import get_role_assignments
15
+ from osi_dump.api.keystone import get_role_assignments, get_users
14
16
 
15
17
  logger = logging.getLogger(__name__)
16
18
 
@@ -19,14 +21,14 @@ class OpenStackRoleAssignmentImporter(RoleAssignmentImporter):
19
21
  def __init__(self, connection: Connection):
20
22
  self.connection = connection
21
23
 
22
- self.users = {}
24
+ self.users: dict[str, dict] = {}
23
25
  self.roles = {}
24
26
 
25
27
  def _get_users(self):
26
- os_users = self.connection.identity.users()
28
+ os_users = get_users(self.connection)
27
29
 
28
30
  for os_user in os_users:
29
- self.users[os_user.id] = os_user.name
31
+ self.users[os_user["id"]] = os_user
30
32
 
31
33
  def _get_roles(self):
32
34
  os_roles = self.connection.identity.roles()
@@ -90,7 +92,7 @@ class OpenStackRoleAssignmentImporter(RoleAssignmentImporter):
90
92
  role_id = None
91
93
 
92
94
  try:
93
- user_id = role_assignment["user"]["id"]
95
+ user_id: str = role_assignment["user"]["id"]
94
96
  except Exception as e:
95
97
  logger.warning(f"Can not get user id: {e}")
96
98
 
@@ -102,8 +104,11 @@ class OpenStackRoleAssignmentImporter(RoleAssignmentImporter):
102
104
  user_name = None
103
105
  role_name = None
104
106
 
107
+ password_expires_at = None
108
+ options = None
109
+
105
110
  try:
106
- user_name = self.users[user_id]
111
+ user_name = self.users[user_id]["name"]
107
112
  except Exception as e:
108
113
  logger.warning(f"Can not get user name: {e}")
109
114
 
@@ -112,12 +117,25 @@ class OpenStackRoleAssignmentImporter(RoleAssignmentImporter):
112
117
  except Exception as e:
113
118
  logger.warning(f"Can not get role name: {e}")
114
119
 
120
+ try:
121
+ password_expires_at = self.users[user_id]["password_expires_at"]
122
+ except Exception as e:
123
+ logger.warning(f"Can not get password expires at: {e}")
124
+
125
+
126
+ try:
127
+ options = self.users[user_id]["options"]
128
+ except Exception as e:
129
+ logger.warning(f"Can not get option")
130
+
115
131
  role_assignment_ret = RoleAssignment(
116
132
  user_id=user_id,
117
133
  user_name=user_name,
118
134
  role_id=role_id,
119
135
  role_name=role_name,
120
136
  scope=role_assignment["scope"],
137
+ password_expires_at=password_expires_at,
138
+ options=options
121
139
  )
122
140
 
123
141
  return role_assignment_ret
File without changes
@@ -0,0 +1,26 @@
1
+ from typing import Optional
2
+ from pydantic import BaseModel, ConfigDict
3
+
4
+
5
+
6
+ class Network(BaseModel):
7
+ model_config = ConfigDict(strict=True)
8
+
9
+ network_id: str
10
+ project_id: str
11
+ name: Optional[str]
12
+
13
+ subnets: Optional[list[dict]] # {"id": str, "cidr": "str"}
14
+ mtu: int
15
+
16
+ port_security_enabled: Optional[bool]
17
+
18
+ network_type: str
19
+ segmentation_id: Optional[int]
20
+ physical_network: Optional[str]
21
+
22
+ status: Optional[str]
23
+ shared: Optional[bool]
24
+
25
+ created_at: Optional[str]
26
+ updated_at: Optional[str]
@@ -14,4 +14,8 @@ class RoleAssignment(BaseModel):
14
14
 
15
15
  role_name: Optional[str]
16
16
 
17
+ options: Optional[dict]
18
+
19
+ password_expires_at: Optional[str]
20
+
17
21
  scope: Optional[dict]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: osi-dump
3
- Version: 0.1.3.3.3.9
3
+ Version: 0.1.3.3.4.1
4
4
  Summary: OpenStack information dump tool
5
5
  Author: TVKain
6
6
  License: Apache-2.0
@@ -22,6 +22,7 @@ src/osi_dump/batch_handler/hypervisor_batch_handler.py
22
22
  src/osi_dump/batch_handler/image_batch_handler.py
23
23
  src/osi_dump/batch_handler/instance_batch_handler.py
24
24
  src/osi_dump/batch_handler/load_balancer_batch_handler.py
25
+ src/osi_dump/batch_handler/network_batch_handler.py
25
26
  src/osi_dump/batch_handler/project_batch_handler.py
26
27
  src/osi_dump/batch_handler/role_assignment_batch_handler.py
27
28
  src/osi_dump/batch_handler/router_batch_handler.py
@@ -48,6 +49,9 @@ src/osi_dump/exporter/instance/instance_exporter.py
48
49
  src/osi_dump/exporter/load_balancer/__init__.py
49
50
  src/osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py
50
51
  src/osi_dump/exporter/load_balancer/load_balancer_exporter.py
52
+ src/osi_dump/exporter/network/__init__.py
53
+ src/osi_dump/exporter/network/excel_network_exporter.py
54
+ src/osi_dump/exporter/network/network_exporter.py
51
55
  src/osi_dump/exporter/project/__init__.py
52
56
  src/osi_dump/exporter/project/excel_project_exporter.py
53
57
  src/osi_dump/exporter/project/project_exporter.py
@@ -81,6 +85,9 @@ src/osi_dump/importer/instance/openstack_instance_importer.py
81
85
  src/osi_dump/importer/load_balancer/__init__.py
82
86
  src/osi_dump/importer/load_balancer/load_balancer_importer.py
83
87
  src/osi_dump/importer/load_balancer/openstack_load_balancer_importer.py
88
+ src/osi_dump/importer/network/__init__.py
89
+ src/osi_dump/importer/network/network_importer.py
90
+ src/osi_dump/importer/network/openstack_network_importer.py
84
91
  src/osi_dump/importer/project/__init__.py
85
92
  src/osi_dump/importer/project/openstack_project_importer.py
86
93
  src/osi_dump/importer/project/project_importer.py
@@ -102,6 +109,7 @@ src/osi_dump/model/hypervisor.py
102
109
  src/osi_dump/model/image.py
103
110
  src/osi_dump/model/instance.py
104
111
  src/osi_dump/model/load_balancer.py
112
+ src/osi_dump/model/network.py
105
113
  src/osi_dump/model/project.py
106
114
  src/osi_dump/model/role_assignment.py
107
115
  src/osi_dump/model/router.py
File without changes
File without changes