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,87 +1,87 @@
1
- import logging
2
-
3
- import concurrent
4
-
5
- from openstack.connection import Connection
6
- from openstack.network.v2.router import Router as OSRouter
7
-
8
- from osi_dump.importer.router.router_importer import (
9
- RouterImporter,
10
- )
11
- from osi_dump.model.router import Router
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
-
16
- class OpenStackRouterImporter(RouterImporter):
17
- def __init__(self, connection: Connection):
18
- self.connection = connection
19
-
20
- def import_routers(self) -> list[Router]:
21
- """Import routers information from Openstack
22
-
23
- Raises:
24
- Exception: Raises exception if fetching router failed
25
-
26
- Returns:
27
- list[Router]: _description_
28
- """
29
-
30
- logger.info(f"Importing routers for {self.connection.auth['auth_url']}")
31
-
32
- try:
33
- osrouters: list[OSRouter] = list(self.connection.network.routers())
34
- except Exception as e:
35
- raise Exception(
36
- f"Can not fetch routers for {self.connection.auth['auth_url']}"
37
- ) from e
38
-
39
- routers: list[Router] = []
40
-
41
- with concurrent.futures.ThreadPoolExecutor() as executor:
42
- futures = [
43
- executor.submit(self._get_router_info, router) for router in osrouters
44
- ]
45
- for future in concurrent.futures.as_completed(futures):
46
- routers.append(future.result())
47
-
48
- logger.info(f"Imported routers for {self.connection.auth['auth_url']}")
49
-
50
- return routers
51
-
52
- def _get_router_info(self, router: OSRouter) -> Router:
53
- """
54
- {"network_id": "49760654-71d8-4967-8fdd-5a35d3ff78ef", "external_fixed_ips": [{"subnet_id": |
55
- | | "c044a5c0-4b11-4d8d-ae5e-9ff4ce6c1be6", "ip_address": "10.0.2.188"}], "enable_snat": true}
56
- """
57
-
58
- external_net_id = None
59
-
60
- try:
61
- external_net_id = router.external_gateway_info["network_id"]
62
- except Exception as e:
63
- logger.warning(f"Could not get external net id for router: {router.id}")
64
-
65
- external_net_ip = None
66
-
67
- try:
68
- external_net_ip = router.external_gateway_info["external_fixed_ips"][0][
69
- "ip_address"
70
- ]
71
-
72
- except Exception as e:
73
- logger.warning(f"Could not get external net ip for router {router.id}")
74
-
75
- router_ret = Router(
76
- router_id=router.id,
77
- name=router.name,
78
- external_net_id=external_net_id,
79
- external_net_ip=external_net_ip,
80
- status=router.status,
81
- admin_state=router.is_admin_state_up,
82
- project_id=router.project_id,
83
- created_at=router.created_at,
84
- updated_at=router.updated_at,
85
- )
86
-
87
- return router_ret
1
+ import logging
2
+
3
+ import concurrent
4
+
5
+ from openstack.connection import Connection
6
+ from openstack.network.v2.router import Router as OSRouter
7
+
8
+ from osi_dump.importer.router.router_importer import (
9
+ RouterImporter,
10
+ )
11
+ from osi_dump.model.router import Router
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ class OpenStackRouterImporter(RouterImporter):
17
+ def __init__(self, connection: Connection):
18
+ self.connection = connection
19
+
20
+ def import_routers(self) -> list[Router]:
21
+ """Import routers information from Openstack
22
+
23
+ Raises:
24
+ Exception: Raises exception if fetching router failed
25
+
26
+ Returns:
27
+ list[Router]: _description_
28
+ """
29
+
30
+ logger.info(f"Importing routers for {self.connection.auth['auth_url']}")
31
+
32
+ try:
33
+ osrouters: list[OSRouter] = list(self.connection.network.routers())
34
+ except Exception as e:
35
+ raise Exception(
36
+ f"Can not fetch routers for {self.connection.auth['auth_url']}"
37
+ ) from e
38
+
39
+ routers: list[Router] = []
40
+
41
+ with concurrent.futures.ThreadPoolExecutor() as executor:
42
+ futures = [
43
+ executor.submit(self._get_router_info, router) for router in osrouters
44
+ ]
45
+ for future in concurrent.futures.as_completed(futures):
46
+ routers.append(future.result())
47
+
48
+ logger.info(f"Imported routers for {self.connection.auth['auth_url']}")
49
+
50
+ return routers
51
+
52
+ def _get_router_info(self, router: OSRouter) -> Router:
53
+ """
54
+ {"network_id": "49760654-71d8-4967-8fdd-5a35d3ff78ef", "external_fixed_ips": [{"subnet_id": |
55
+ | | "c044a5c0-4b11-4d8d-ae5e-9ff4ce6c1be6", "ip_address": "10.0.2.188"}], "enable_snat": true}
56
+ """
57
+
58
+ external_net_id = None
59
+
60
+ try:
61
+ external_net_id = router.external_gateway_info["network_id"]
62
+ except Exception as e:
63
+ logger.warning(f"Could not get external net id for router: {router.id}")
64
+
65
+ external_net_ip = None
66
+
67
+ try:
68
+ external_net_ip = router.external_gateway_info["external_fixed_ips"][0][
69
+ "ip_address"
70
+ ]
71
+
72
+ except Exception as e:
73
+ logger.warning(f"Could not get external net ip for router {router.id}")
74
+
75
+ router_ret = Router(
76
+ router_id=router.id,
77
+ name=router.name,
78
+ external_net_id=external_net_id,
79
+ external_net_ip=external_net_ip,
80
+ status=router.status,
81
+ admin_state=router.is_admin_state_up,
82
+ project_id=router.project_id,
83
+ created_at=router.created_at,
84
+ updated_at=router.updated_at,
85
+ )
86
+
87
+ return router_ret
@@ -1,9 +1,9 @@
1
- from abc import ABC, abstractmethod
2
-
3
- from osi_dump.model.router import Router
4
-
5
-
6
- class RouterImporter(ABC):
7
- @abstractmethod
8
- def import_routers(self) -> list[Router]:
9
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+ from osi_dump.model.router import Router
4
+
5
+
6
+ class RouterImporter(ABC):
7
+ @abstractmethod
8
+ def import_routers(self) -> list[Router]:
9
+ pass
@@ -0,0 +1,54 @@
1
+ import logging
2
+ from typing import Generator
3
+ from openstack.connection import Connection
4
+ from openstack.network.v2.security_group import SecurityGroup as OSSecurityGroup
5
+
6
+ from osi_dump.importer.security_group.security_group_importer import SecurityGroupImporter
7
+ from osi_dump.model.security_group import SecurityGroup, SecurityGroupRule
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+ class OpenStackSecurityGroupImporter(SecurityGroupImporter):
12
+ def __init__(self, connection: Connection):
13
+ self.connection = connection
14
+
15
+ def import_security_groups(self) -> Generator[SecurityGroup, None, None]:
16
+ logger.info(f"Importing security groups for {self.connection.auth['auth_url']}")
17
+ try:
18
+ os_sec_groups_iterator = self.connection.network.security_groups()
19
+
20
+ for os_sec_group in os_sec_groups_iterator:
21
+ yield self._get_sec_group_info(os_sec_group)
22
+
23
+ except Exception as e:
24
+ logger.error(f"Cannot fetch security groups for {self.connection.auth['auth_url']}: {e}")
25
+ return
26
+
27
+ logger.info(f"Finished importing security groups for {self.connection.auth['auth_url']}")
28
+
29
+
30
+ def _get_sec_group_info(self, os_sec_group: OSSecurityGroup) -> SecurityGroup:
31
+ rules = []
32
+ if hasattr(os_sec_group, 'security_group_rules'):
33
+ for rule in os_sec_group.security_group_rules:
34
+ port_range = None
35
+ if rule.get('port_range_min') is not None and rule.get('port_range_max') is not None:
36
+ port_range = f"{rule['port_range_min']}-{rule['port_range_max']}"
37
+
38
+ rules.append(SecurityGroupRule(
39
+ rule_id=rule['id'],
40
+ direction=rule['direction'],
41
+ protocol=rule.get('protocol'),
42
+ ethertype=rule['ethertype'],
43
+ port_range=port_range,
44
+ remote_ip_prefix=rule.get('remote_ip_prefix'),
45
+ remote_group_id=rule.get('remote_group_id')
46
+ ))
47
+
48
+ return SecurityGroup(
49
+ security_group_id=os_sec_group.id,
50
+ name=os_sec_group.name,
51
+ project_id=os_sec_group.project_id,
52
+ description=os_sec_group.description,
53
+ rules=rules
54
+ )
@@ -0,0 +1,8 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Generator
3
+ from osi_dump.model.security_group import SecurityGroup
4
+
5
+ class SecurityGroupImporter(ABC):
6
+ @abstractmethod
7
+ def import_security_groups(self) -> Generator[SecurityGroup, None, None]:
8
+ pass
@@ -1,81 +1,81 @@
1
- import logging
2
-
3
- import concurrent
4
-
5
- from openstack.connection import Connection
6
-
7
- from openstack.block_storage.v3.volume import Volume as OSVolume
8
-
9
- from osi_dump.importer.volume.volume_importer import VolumeImporter
10
- from osi_dump.model.volume import Volume
11
-
12
- logger = logging.getLogger(__name__)
13
-
14
-
15
- class OpenStackVolumeImporter(VolumeImporter):
16
- def __init__(self, connection: Connection):
17
- self.connection = connection
18
-
19
- def import_volumes(self) -> list[Volume]:
20
- """Import hypervisors information from Openstack
21
-
22
- Raises:
23
- Exception: Raises exception if fetching hypervisor failed
24
-
25
- Returns:
26
- list[Hypervisor]: _description_
27
- """
28
-
29
- logger.info(f"Importing volumes for {self.connection.auth['auth_url']}")
30
-
31
- try:
32
- osvolumes: list[OSVolume] = list(
33
- self.connection.block_storage.volumes(details=True, all_projects=True)
34
- )
35
- except Exception as e:
36
- raise Exception(
37
- f"Can not fetch volumes for {self.connection.auth['auth_url']}"
38
- ) from e
39
-
40
- volumes: list[Volume] = []
41
-
42
- with concurrent.futures.ThreadPoolExecutor() as executor:
43
- futures = [
44
- executor.submit(self._get_volume_info, volume) for volume in osvolumes
45
- ]
46
- for future in concurrent.futures.as_completed(futures):
47
- volumes.append(future.result())
48
-
49
- logger.info(f"Imported volumes for {self.connection.auth['auth_url']}")
50
-
51
- return volumes
52
-
53
- def _get_volume_info(self, volume: OSVolume) -> Volume:
54
-
55
- snapshots = []
56
- try:
57
- snapshots = list(
58
- self.connection.block_storage.snapshots(
59
- details=False, all_projects=True, volume_id=volume.id
60
- )
61
- )
62
-
63
- snapshots = [snapshot["id"] for snapshot in snapshots]
64
-
65
- except Exception as e:
66
- logger.warning(f"Fetching snapshots failed for {volume.id} error: {e}")
67
-
68
- ret_volume = Volume(
69
- volume_id=volume.id,
70
- volume_name=volume.name,
71
- project_id=volume.project_id,
72
- status=volume.status,
73
- attachments=[att["server_id"] for att in volume.attachments],
74
- type=volume.volume_type,
75
- size=volume.size,
76
- snapshots=snapshots,
77
- updated_at=volume.updated_at,
78
- created_at=volume.created_at,
79
- )
80
-
81
- return ret_volume
1
+ import logging
2
+
3
+ import concurrent
4
+
5
+ from openstack.connection import Connection
6
+
7
+ from openstack.block_storage.v3.volume import Volume as OSVolume
8
+
9
+ from osi_dump.importer.volume.volume_importer import VolumeImporter
10
+ from osi_dump.model.volume import Volume
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class OpenStackVolumeImporter(VolumeImporter):
16
+ def __init__(self, connection: Connection):
17
+ self.connection = connection
18
+
19
+ def import_volumes(self) -> list[Volume]:
20
+ """Import hypervisors information from Openstack
21
+
22
+ Raises:
23
+ Exception: Raises exception if fetching hypervisor failed
24
+
25
+ Returns:
26
+ list[Hypervisor]: _description_
27
+ """
28
+
29
+ logger.info(f"Importing volumes for {self.connection.auth['auth_url']}")
30
+
31
+ try:
32
+ osvolumes: list[OSVolume] = list(
33
+ self.connection.block_storage.volumes(details=True, all_projects=True)
34
+ )
35
+ except Exception as e:
36
+ raise Exception(
37
+ f"Can not fetch volumes for {self.connection.auth['auth_url']}"
38
+ ) from e
39
+
40
+ volumes: list[Volume] = []
41
+
42
+ with concurrent.futures.ThreadPoolExecutor() as executor:
43
+ futures = [
44
+ executor.submit(self._get_volume_info, volume) for volume in osvolumes
45
+ ]
46
+ for future in concurrent.futures.as_completed(futures):
47
+ volumes.append(future.result())
48
+
49
+ logger.info(f"Imported volumes for {self.connection.auth['auth_url']}")
50
+
51
+ return volumes
52
+
53
+ def _get_volume_info(self, volume: OSVolume) -> Volume:
54
+
55
+ snapshots = []
56
+ try:
57
+ snapshots = list(
58
+ self.connection.block_storage.snapshots(
59
+ details=False, all_projects=True, volume_id=volume.id
60
+ )
61
+ )
62
+
63
+ snapshots = [snapshot["id"] for snapshot in snapshots]
64
+
65
+ except Exception as e:
66
+ logger.warning(f"Fetching snapshots failed for {volume.id} error: {e}")
67
+
68
+ ret_volume = Volume(
69
+ volume_id=volume.id,
70
+ volume_name=volume.name,
71
+ project_id=volume.project_id,
72
+ status=volume.status,
73
+ attachments=[att["server_id"] for att in volume.attachments],
74
+ type=volume.volume_type,
75
+ size=volume.size,
76
+ snapshots=snapshots,
77
+ updated_at=volume.updated_at,
78
+ created_at=volume.created_at,
79
+ )
80
+
81
+ return ret_volume
@@ -1,9 +1,9 @@
1
- from abc import ABC, abstractmethod
2
-
3
- from osi_dump.model.volume import Volume
4
-
5
-
6
- class VolumeImporter(ABC):
7
- @abstractmethod
8
- def import_volumes(self) -> list[Volume]:
9
- pass
1
+ from abc import ABC, abstractmethod
2
+
3
+ from osi_dump.model.volume import Volume
4
+
5
+
6
+ class VolumeImporter(ABC):
7
+ @abstractmethod
8
+ def import_volumes(self) -> list[Volume]:
9
+ pass
@@ -1,15 +1,15 @@
1
- from typing import Optional
2
-
3
- from pydantic import BaseModel, ConfigDict
4
-
5
-
6
- class AuthenticationInfo(BaseModel):
7
- model_config = ConfigDict(strict=True)
8
-
9
- auth_url: str
10
- project_name: str
11
- username: str
12
- password: str
13
- user_domain_name: str
14
- project_domain_name: str
15
- interface: Optional[str] = "public"
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict
4
+
5
+
6
+ class AuthenticationInfo(BaseModel):
7
+ model_config = ConfigDict(strict=True)
8
+
9
+ auth_url: str
10
+ project_name: str
11
+ username: str
12
+ password: str
13
+ user_domain_name: str
14
+ project_domain_name: str
15
+ interface: Optional[str] = "public"
@@ -1,30 +1,30 @@
1
- from typing import Optional
2
-
3
- from pydantic import BaseModel, ConfigDict, ValidationError
4
-
5
-
6
- class ExternalPort(BaseModel):
7
- model_config = ConfigDict(strict=True)
8
-
9
- port_id: str
10
-
11
- project_id: Optional[str]
12
-
13
- subnet_id: Optional[str]
14
-
15
- subnet_cidr: Optional[str]
16
-
17
- ip_address: Optional[str]
18
-
19
- network_name: Optional[str]
20
- network_id: Optional[str]
21
-
22
- allowed_address_pairs: Optional[list[dict]]
23
-
24
- device_id: Optional[str]
25
-
26
- device_owner: Optional[str]
27
-
28
- status: Optional[str]
29
-
30
- vlan_id: Optional[int]
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, ValidationError
4
+
5
+
6
+ class ExternalPort(BaseModel):
7
+ model_config = ConfigDict(strict=True)
8
+
9
+ port_id: str
10
+
11
+ project_id: Optional[str]
12
+
13
+ subnet_id: Optional[str]
14
+
15
+ subnet_cidr: Optional[str]
16
+
17
+ ip_address: Optional[str]
18
+
19
+ network_name: Optional[str]
20
+ network_id: Optional[str]
21
+
22
+ allowed_address_pairs: Optional[list[dict]]
23
+
24
+ device_id: Optional[str]
25
+
26
+ device_owner: Optional[str]
27
+
28
+ status: Optional[str]
29
+
30
+ vlan_id: Optional[int]
osi_dump/model/flavor.py CHANGED
@@ -1,20 +1,20 @@
1
- from typing import Optional
2
-
3
- from pydantic import BaseModel, ConfigDict
4
-
5
-
6
- class Flavor(BaseModel):
7
- model_config = ConfigDict(strict=True)
8
-
9
- flavor_id: str
10
-
11
- flavor_name: str
12
-
13
- properties: Optional[dict]
14
-
15
- ram: int
16
- vcpus: int
17
- disk: int
18
- swap: Optional[int]
19
-
20
- public: bool
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict
4
+
5
+
6
+ class Flavor(BaseModel):
7
+ model_config = ConfigDict(strict=True)
8
+
9
+ flavor_id: str
10
+
11
+ flavor_name: str
12
+
13
+ properties: Optional[dict]
14
+
15
+ ram: int
16
+ vcpus: int
17
+ disk: int
18
+ swap: Optional[int]
19
+
20
+ public: bool
@@ -1,24 +1,24 @@
1
- from typing import Optional
2
-
3
- from pydantic import BaseModel, ConfigDict, ValidationError
4
-
5
-
6
- class FloatingIP(BaseModel):
7
- model_config = ConfigDict(strict=True)
8
-
9
- floating_ip_id: str
10
- project_id: Optional[str]
11
-
12
- floating_network: str
13
-
14
- floating_ip_address: str
15
-
16
- fixed_ip_address: Optional[str]
17
-
18
- router_id: Optional[str]
19
-
20
- port_id: Optional[str]
21
-
22
- status: str
23
- created_at: str
24
- updated_at: str
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, ValidationError
4
+
5
+
6
+ class FloatingIP(BaseModel):
7
+ model_config = ConfigDict(strict=True)
8
+
9
+ floating_ip_id: str
10
+ project_id: Optional[str]
11
+
12
+ floating_network: str
13
+
14
+ floating_ip_address: str
15
+
16
+ fixed_ip_address: Optional[str]
17
+
18
+ router_id: Optional[str]
19
+
20
+ port_id: Optional[str]
21
+
22
+ status: str
23
+ created_at: str
24
+ updated_at: str
@@ -1,24 +1,24 @@
1
- from typing import Optional
2
- from pydantic import BaseModel, ConfigDict, ValidationError
3
-
4
-
5
- class Hypervisor(BaseModel):
6
- hypervisor_id: str
7
- hypervisor_type: str
8
- name: str
9
- state: str
10
- status: str
11
-
12
- vcpus: int
13
- vcpus_usage: int
14
-
15
- memory_size: int
16
- memory_usage: int
17
-
18
- local_disk_usage: int
19
- local_disk_size: int
20
-
21
- aggregates: Optional[list[dict]] # id, name, az
22
- availability_zone: Optional[str]
23
-
24
- vm_count: int
1
+ from typing import Optional
2
+ from pydantic import BaseModel, ConfigDict, ValidationError
3
+
4
+
5
+ class Hypervisor(BaseModel):
6
+ hypervisor_id: str
7
+ hypervisor_type: str
8
+ name: str
9
+ state: str
10
+ status: str
11
+
12
+ vcpus: int
13
+ vcpus_usage: int
14
+
15
+ memory_size: int
16
+ memory_usage: int
17
+
18
+ local_disk_usage: int
19
+ local_disk_size: int
20
+
21
+ aggregates: Optional[list[dict]] # id, name, az
22
+ availability_zone: Optional[str]
23
+
24
+ vm_count: int