osi-dump 0.1.3.3.4.3__py3-none-any.whl → 0.1.4__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.
Files changed (102) hide show
  1. osi_dump/__main__.py +4 -4
  2. osi_dump/api/keystone.py +70 -70
  3. osi_dump/api/neutron.py +65 -65
  4. osi_dump/api/octavia.py +94 -94
  5. osi_dump/api/placement.py +41 -41
  6. osi_dump/batch_handler/__init__.py +6 -5
  7. osi_dump/batch_handler/external_port_batch_handler.py +55 -55
  8. osi_dump/batch_handler/flavor_batch_handler.py +51 -51
  9. osi_dump/batch_handler/floating_ip_batch_handler.py +57 -57
  10. osi_dump/batch_handler/hypervisor_batch_handler.py +55 -55
  11. osi_dump/batch_handler/image_batch_handler.py +51 -51
  12. osi_dump/batch_handler/instance_batch_handler.py +46 -54
  13. osi_dump/batch_handler/load_balancer_batch_handler.py +59 -59
  14. osi_dump/batch_handler/network_batch_handler.py +51 -51
  15. osi_dump/batch_handler/project_batch_handler.py +51 -51
  16. osi_dump/batch_handler/role_assignment_batch_handler.py +38 -61
  17. osi_dump/batch_handler/router_batch_handler.py +49 -49
  18. osi_dump/batch_handler/security_group_batch_handler.py +37 -0
  19. osi_dump/batch_handler/volume_batch_handler.py +45 -45
  20. osi_dump/cli.py +267 -257
  21. osi_dump/exporter/external_port/excel_external_port_exporter.py +34 -34
  22. osi_dump/exporter/external_port/external_port_exporter.py +7 -7
  23. osi_dump/exporter/flavor/excel_flavor_exporter.py +30 -30
  24. osi_dump/exporter/flavor/flavor_exporter.py +7 -7
  25. osi_dump/exporter/floating_ip/excel_floating_ip_exporter.py +30 -30
  26. osi_dump/exporter/floating_ip/floating_ip_exporter.py +7 -7
  27. osi_dump/exporter/hypervisor/excel_hypervisor_exporter.py +32 -32
  28. osi_dump/exporter/hypervisor/hypervisor_exporter.py +7 -7
  29. osi_dump/exporter/image/excel_image_exporter.py +28 -28
  30. osi_dump/exporter/image/image_exporter.py +7 -7
  31. osi_dump/exporter/instance/excel_instance_exporter.py +29 -29
  32. osi_dump/exporter/instance/instance_exporter.py +8 -7
  33. osi_dump/exporter/load_balancer/excel_load_balancer_exporter.py +36 -36
  34. osi_dump/exporter/load_balancer/load_balancer_exporter.py +7 -7
  35. osi_dump/exporter/network/excel_network_exporter.py +32 -32
  36. osi_dump/exporter/network/network_exporter.py +7 -7
  37. osi_dump/exporter/project/excel_project_exporter.py +30 -30
  38. osi_dump/exporter/project/project_exporter.py +7 -7
  39. osi_dump/exporter/role_assignment/excel_role_assignment_exporter.py +43 -35
  40. osi_dump/exporter/role_assignment/role_assignment_exporter.py +7 -7
  41. osi_dump/exporter/router/excel_router_exporter.py +30 -30
  42. osi_dump/exporter/router/router_exporter.py +7 -7
  43. osi_dump/exporter/security_group/excel_security_group_exporter.py +35 -0
  44. osi_dump/exporter/security_group/security_group_exporter.py +8 -0
  45. osi_dump/exporter/volume/excel_volume_exporter.py +29 -29
  46. osi_dump/exporter/volume/volume_exporter.py +7 -7
  47. osi_dump/importer/external_port/external_port_importer.py +9 -9
  48. osi_dump/importer/external_port/openstack_external_port_importer.py +177 -177
  49. osi_dump/importer/flavor/flavor_importer.py +9 -9
  50. osi_dump/importer/flavor/openstack_flavor_importer.py +64 -64
  51. osi_dump/importer/floating_ip/floating_ip_importer.py +9 -9
  52. osi_dump/importer/floating_ip/openstack_floating_ip_importer.py +68 -68
  53. osi_dump/importer/hypervisor/hypervisor_importer.py +9 -9
  54. osi_dump/importer/hypervisor/openstack_hypervisor_importer.py +137 -137
  55. osi_dump/importer/image/image_importer.py +9 -9
  56. osi_dump/importer/image/openstack_image_importer.py +81 -81
  57. osi_dump/importer/instance/instance_importer.py +8 -9
  58. osi_dump/importer/instance/openstack_instance_importer.py +136 -136
  59. osi_dump/importer/load_balancer/load_balancer_importer.py +9 -9
  60. osi_dump/importer/load_balancer/openstack_load_balancer_importer.py +113 -113
  61. osi_dump/importer/network/network_importer.py +9 -9
  62. osi_dump/importer/network/openstack_network_importer.py +93 -93
  63. osi_dump/importer/project/openstack_project_importer.py +141 -141
  64. osi_dump/importer/project/project_importer.py +9 -9
  65. osi_dump/importer/role_assignment/openstack_role_assignment_importer.py +117 -147
  66. osi_dump/importer/role_assignment/role_assignment_importer.py +16 -9
  67. osi_dump/importer/router/openstack_router_importer.py +87 -87
  68. osi_dump/importer/router/router_importer.py +9 -9
  69. osi_dump/importer/security_group/openstack_security_group_importer.py +54 -0
  70. osi_dump/importer/security_group/security_group_importer.py +8 -0
  71. osi_dump/importer/volume/openstack_volume_importer.py +81 -81
  72. osi_dump/importer/volume/volume_importer.py +9 -9
  73. osi_dump/model/authentication_info.py +15 -15
  74. osi_dump/model/external_port.py +30 -30
  75. osi_dump/model/flavor.py +20 -20
  76. osi_dump/model/floating_ip.py +24 -24
  77. osi_dump/model/hypervisor.py +24 -24
  78. osi_dump/model/image.py +27 -27
  79. osi_dump/model/instance.py +29 -29
  80. osi_dump/model/load_balancer.py +26 -26
  81. osi_dump/model/network.py +25 -25
  82. osi_dump/model/project.py +33 -33
  83. osi_dump/model/role_assignment.py +30 -23
  84. osi_dump/model/router.py +23 -23
  85. osi_dump/model/security_group.py +22 -0
  86. osi_dump/model/volume.py +25 -25
  87. osi_dump/os_connection/get_connections.py +67 -67
  88. osi_dump/util/__init__.py +7 -7
  89. osi_dump/util/create_file.py +11 -11
  90. osi_dump/util/excel_autosize_column.py +39 -39
  91. osi_dump/util/excel_sort_sheet.py +35 -35
  92. osi_dump/util/export_data_excel.py +36 -36
  93. osi_dump/util/extract_hostname.py +5 -5
  94. osi_dump/util/openstack_util.py +48 -48
  95. osi_dump/util/panda_excel.py +26 -26
  96. osi_dump/util/validate_dir_path.py +20 -20
  97. {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/METADATA +40 -40
  98. osi_dump-0.1.4.dist-info/RECORD +130 -0
  99. osi_dump-0.1.3.3.4.3.dist-info/RECORD +0 -124
  100. {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/WHEEL +0 -0
  101. {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/entry_points.txt +0 -0
  102. {osi_dump-0.1.3.3.4.3.dist-info → osi_dump-0.1.4.dist-info}/top_level.txt +0 -0
@@ -1,113 +1,113 @@
1
- import logging
2
-
3
- import concurrent
4
-
5
- from openstack.connection import Connection
6
-
7
- from openstack.load_balancer.v2.load_balancer import LoadBalancer as OSLoadBalancer
8
-
9
- from osi_dump.importer.load_balancer.load_balancer_importer import (
10
- LoadBalancerImporter,
11
- )
12
- from osi_dump.model.load_balancer import LoadBalancer
13
-
14
- import osi_dump.api.octavia as octavia_api
15
-
16
- logger = logging.getLogger(__name__)
17
-
18
-
19
- class OpenStackLoadBalancerImporter(LoadBalancerImporter):
20
- def __init__(self, connection: Connection):
21
- self.connection = connection
22
-
23
- def import_load_balancers(self) -> list[LoadBalancer]:
24
- """Import load_balancers information from Openstack
25
-
26
- Raises:
27
- Exception: Raises exception if fetching load_balancer failed
28
-
29
- Returns:
30
- list[LoadBalancer]: _description_
31
- """
32
-
33
- logger.info(f"Importing load_balancers for {self.connection.auth['auth_url']}")
34
-
35
- try:
36
- osload_balancers: list[OSLoadBalancer] = octavia_api.get_load_balancers(
37
- connection=self.connection
38
- )
39
- except Exception as e:
40
- raise Exception(
41
- f"Can not fetch load_balancers for {self.connection.auth['auth_url']} {e}"
42
- ) from e
43
-
44
- load_balancers: list[LoadBalancer] = []
45
-
46
- with concurrent.futures.ThreadPoolExecutor() as executor:
47
- futures = []
48
-
49
- for load_balancer in osload_balancers:
50
- logger.info("Importing load_balancer: %s", load_balancer["id"])
51
- if load_balancer["id"] != None:
52
- futures.append(executor.submit(self._get_load_balancer_info, load_balancer))
53
-
54
- for future in concurrent.futures.as_completed(futures):
55
- result = future.result()
56
-
57
- if result != None:
58
- load_balancers.append(result)
59
-
60
- logger.info(f"Imported load_balancers for {self.connection.auth['auth_url']}")
61
-
62
- return load_balancers
63
-
64
- def _get_load_balancer_info(self, load_balancer: OSLoadBalancer) -> LoadBalancer:
65
-
66
- lb_flavor_name = None
67
- lb_flavor_description = None
68
-
69
- try:
70
- lb_flavor = octavia_api.get_load_balancer_flavor(
71
- connection=self.connection,
72
- flavor_id=load_balancer["flavor_id"]
73
- )
74
-
75
- if lb_flavor:
76
- lb_flavor_name = lb_flavor["name"]
77
- lb_flavor_description = lb_flavor["description"]
78
- else:
79
- raise Exception(f'No flavor id found for {load_balancer["id"]}')
80
- except Exception as e:
81
- logger.warning(f"Get load balancer flavor failed {e}")
82
-
83
- try:
84
- amphoraes = octavia_api.get_amphoraes(
85
- connection=self.connection, load_balancer_id=load_balancer["id"]
86
- )
87
-
88
- for amphorae in amphoraes:
89
- flavor = self.connection.get_flavor_by_id(amphorae["compute_flavor"])
90
- amphorae["ram"] = flavor.ram
91
- amphorae["vcpus"] = flavor.vcpus
92
- amphorae["flavor_name"] = flavor.name
93
- amphorae["flavor_description"] = flavor.description
94
-
95
- load_balancer_ret = LoadBalancer(
96
- id=load_balancer["id"],
97
- load_balancer_name=load_balancer["name"],
98
- operating_status=load_balancer["operating_status"],
99
- project_id=load_balancer["project_id"],
100
- provisioning_status=load_balancer["provisioning_status"],
101
- created_at=load_balancer["created_at"],
102
- updated_at=load_balancer["updated_at"],
103
- amphoraes=amphoraes,
104
- vip=load_balancer["vip_address"],
105
- flavor_name=lb_flavor_name,
106
- flavor_description=lb_flavor_description
107
- )
108
-
109
- return load_balancer_ret
110
- except Exception as e:
111
- logger.warning(f"Getting lb failed {e}")
112
-
113
- return None
1
+ import logging
2
+
3
+ import concurrent
4
+
5
+ from openstack.connection import Connection
6
+
7
+ from openstack.load_balancer.v2.load_balancer import LoadBalancer as OSLoadBalancer
8
+
9
+ from osi_dump.importer.load_balancer.load_balancer_importer import (
10
+ LoadBalancerImporter,
11
+ )
12
+ from osi_dump.model.load_balancer import LoadBalancer
13
+
14
+ import osi_dump.api.octavia as octavia_api
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ class OpenStackLoadBalancerImporter(LoadBalancerImporter):
20
+ def __init__(self, connection: Connection):
21
+ self.connection = connection
22
+
23
+ def import_load_balancers(self) -> list[LoadBalancer]:
24
+ """Import load_balancers information from Openstack
25
+
26
+ Raises:
27
+ Exception: Raises exception if fetching load_balancer failed
28
+
29
+ Returns:
30
+ list[LoadBalancer]: _description_
31
+ """
32
+
33
+ logger.info(f"Importing load_balancers for {self.connection.auth['auth_url']}")
34
+
35
+ try:
36
+ osload_balancers: list[OSLoadBalancer] = octavia_api.get_load_balancers(
37
+ connection=self.connection
38
+ )
39
+ except Exception as e:
40
+ raise Exception(
41
+ f"Can not fetch load_balancers for {self.connection.auth['auth_url']} {e}"
42
+ ) from e
43
+
44
+ load_balancers: list[LoadBalancer] = []
45
+
46
+ with concurrent.futures.ThreadPoolExecutor() as executor:
47
+ futures = []
48
+
49
+ for load_balancer in osload_balancers:
50
+ logger.info("Importing load_balancer: %s", load_balancer["id"])
51
+ if load_balancer["id"] != None:
52
+ futures.append(executor.submit(self._get_load_balancer_info, load_balancer))
53
+
54
+ for future in concurrent.futures.as_completed(futures):
55
+ result = future.result()
56
+
57
+ if result != None:
58
+ load_balancers.append(result)
59
+
60
+ logger.info(f"Imported load_balancers for {self.connection.auth['auth_url']}")
61
+
62
+ return load_balancers
63
+
64
+ def _get_load_balancer_info(self, load_balancer: OSLoadBalancer) -> LoadBalancer:
65
+
66
+ lb_flavor_name = None
67
+ lb_flavor_description = None
68
+
69
+ try:
70
+ lb_flavor = octavia_api.get_load_balancer_flavor(
71
+ connection=self.connection,
72
+ flavor_id=load_balancer["flavor_id"]
73
+ )
74
+
75
+ if lb_flavor:
76
+ lb_flavor_name = lb_flavor["name"]
77
+ lb_flavor_description = lb_flavor["description"]
78
+ else:
79
+ raise Exception(f'No flavor id found for {load_balancer["id"]}')
80
+ except Exception as e:
81
+ logger.warning(f"Get load balancer flavor failed {e}")
82
+
83
+ try:
84
+ amphoraes = octavia_api.get_amphoraes(
85
+ connection=self.connection, load_balancer_id=load_balancer["id"]
86
+ )
87
+
88
+ for amphorae in amphoraes:
89
+ flavor = self.connection.get_flavor_by_id(amphorae["compute_flavor"])
90
+ amphorae["ram"] = flavor.ram
91
+ amphorae["vcpus"] = flavor.vcpus
92
+ amphorae["flavor_name"] = flavor.name
93
+ amphorae["flavor_description"] = flavor.description
94
+
95
+ load_balancer_ret = LoadBalancer(
96
+ id=load_balancer["id"],
97
+ load_balancer_name=load_balancer["name"],
98
+ operating_status=load_balancer["operating_status"],
99
+ project_id=load_balancer["project_id"],
100
+ provisioning_status=load_balancer["provisioning_status"],
101
+ created_at=load_balancer["created_at"],
102
+ updated_at=load_balancer["updated_at"],
103
+ amphoraes=amphoraes,
104
+ vip=load_balancer["vip_address"],
105
+ flavor_name=lb_flavor_name,
106
+ flavor_description=lb_flavor_description
107
+ )
108
+
109
+ return load_balancer_ret
110
+ except Exception as e:
111
+ logger.warning(f"Getting lb failed {e}")
112
+
113
+ return None
@@ -1,9 +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
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
@@ -1,94 +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
-
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
94