Skip to content

Commit 986e03b

Browse files
committed
improve(network): change to convert security group rules into objects during security group conversion (#85)
1 parent aea9490 commit 986e03b

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

src/openstack_mcp_server/tools/network_tools.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
Router,
1313
RouterInterface,
1414
SecurityGroup,
15+
SecurityGroupRule,
1516
Subnet,
1617
)
1718

@@ -1280,16 +1281,10 @@ def _convert_to_security_group_model(self, openstack_sg) -> SecurityGroup:
12801281
rule_ids: list[str] | None = None
12811282
rules = getattr(openstack_sg, "security_group_rules", None)
12821283
if rules is not None:
1283-
extracted: list[str] = []
1284-
for r in rules:
1285-
rid = None
1286-
if isinstance(r, dict):
1287-
rid = r.get("id")
1288-
else:
1289-
rid = getattr(r, "id", None)
1290-
if rid:
1291-
extracted.append(str(rid))
1292-
rule_ids = extracted
1284+
dto_rules = [
1285+
self._convert_to_security_group_rule_model(r) for r in rules
1286+
]
1287+
rule_ids = [str(r.id) for r in dto_rules if getattr(r, "id", None)]
12931288

12941289
return SecurityGroup(
12951290
id=openstack_sg.id,
@@ -1299,3 +1294,12 @@ def _convert_to_security_group_model(self, openstack_sg) -> SecurityGroup:
12991294
project_id=getattr(openstack_sg, "project_id", None),
13001295
security_group_rule_ids=rule_ids,
13011296
)
1297+
1298+
def _convert_to_security_group_rule_model(self, rule) -> SecurityGroupRule:
1299+
"""
1300+
Convert an OpenStack Security Group Rule to a SecurityGroupRule DTO.
1301+
1302+
:param rule: OpenStack security group rule object or dict
1303+
:return: Pydantic SecurityGroupRule model
1304+
"""
1305+
return SecurityGroupRule.model_validate(rule, from_attributes=True)

0 commit comments

Comments
 (0)