From 65bc6692afb8ff77be8b483f2cb8e96c449f574c Mon Sep 17 00:00:00 2001 From: Nathan O'Sullivan Date: Tue, 22 Jul 2025 13:27:37 +1000 Subject: [PATCH] feat: add x-cli-lookup attribute to load-balancer and vpc --- .../delete_v2_load_balancers_load_balancer_id.py | 8 +++++++- ...d_balancers_load_balancer_id_forwarding_rules.py | 8 +++++++- ...te_v2_load_balancers_load_balancer_id_servers.py | 8 +++++++- .../console/commands/api/delete_v2_vpcs_vpc_id.py | 8 +++++++- .../console/commands/api/get_v2_load_balancers.py | 13 +++++++++++++ .../api/get_v2_load_balancers_load_balancer_id.py | 8 +++++++- src/binarylane/console/commands/api/get_v2_vpcs.py | 13 +++++++++++++ .../console/commands/api/get_v2_vpcs_vpc_id.py | 8 +++++++- .../commands/api/get_v2_vpcs_vpc_id_members.py | 8 +++++++- .../console/commands/api/patch_v2_vpcs_vpc_id.py | 8 +++++++- ...d_balancers_load_balancer_id_forwarding_rules.py | 8 +++++++- ...st_v2_load_balancers_load_balancer_id_servers.py | 8 +++++++- .../console/commands/api/post_v2_servers.py | 8 +++++++- ..._v_2_servers_server_id_actions_change_network.py | 8 +++++++- .../api/put_v2_load_balancers_load_balancer_id.py | 8 +++++++- .../console/commands/api/put_v2_vpcs_vpc_id.py | 8 +++++++- templates/lookups.jinja | 4 ++++ 17 files changed, 128 insertions(+), 14 deletions(-) diff --git a/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id.py b/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id.py index 4603f519..cedfe415 100644 --- a/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id.py +++ b/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id.py @@ -9,6 +9,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_load_balancers as api_get_v2_load_balancers from binarylane.console.parser import Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -28,13 +29,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_load_balancer_id(ref: str) -> Union[None, int]: + return api_get_v2_load_balancers.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "load_balancer_id", int, required=True, option_name=None, - description="""The ID of the load balancer to cancel.""", + metavar="load_balancer", + description="""The ID or name of the load balancer to cancel.""", + lookup=lookup_load_balancer_id, ) ) diff --git a/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id_forwarding_rules.py b/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id_forwarding_rules.py index f66942ed..478fd8e8 100644 --- a/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id_forwarding_rules.py +++ b/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id_forwarding_rules.py @@ -13,6 +13,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_load_balancers as api_get_v2_load_balancers from binarylane.console.parser import ListAttribute, Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -34,13 +35,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_load_balancer_id(ref: str) -> Union[None, int]: + return api_get_v2_load_balancers.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "load_balancer_id", int, required=True, option_name=None, - description="""The ID of the load balancer for which forwarding rules should be removed.""", + metavar="load_balancer", + description="""The ID or name of the load balancer for which forwarding rules should be removed.""", + lookup=lookup_load_balancer_id, ) ) diff --git a/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id_servers.py b/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id_servers.py index 526c5abf..6f354179 100644 --- a/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id_servers.py +++ b/src/binarylane/console/commands/api/delete_v2_load_balancers_load_balancer_id_servers.py @@ -11,6 +11,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_load_balancers as api_get_v2_load_balancers import binarylane.console.commands.api.get_v2_servers as api_get_v2_servers from binarylane.console.parser import Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -33,13 +34,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_load_balancer_id(ref: str) -> Union[None, int]: + return api_get_v2_load_balancers.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "load_balancer_id", int, required=True, option_name=None, - description="""The ID of the load balancer for which servers should be removed.""", + metavar="load_balancer", + description="""The ID or name of the load balancer for which servers should be removed.""", + lookup=lookup_load_balancer_id, ) ) diff --git a/src/binarylane/console/commands/api/delete_v2_vpcs_vpc_id.py b/src/binarylane/console/commands/api/delete_v2_vpcs_vpc_id.py index 580f60a4..1aca6b3e 100644 --- a/src/binarylane/console/commands/api/delete_v2_vpcs_vpc_id.py +++ b/src/binarylane/console/commands/api/delete_v2_vpcs_vpc_id.py @@ -9,6 +9,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_vpcs as api_get_v2_vpcs from binarylane.console.parser import Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -28,13 +29,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_vpc_id(ref: str) -> Union[None, int]: + return api_get_v2_vpcs.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "vpc_id", int, required=True, option_name=None, - description="""The target vpc id.""", + metavar="vpc", + description="""The target vpc id or name.""", + lookup=lookup_vpc_id, ) ) diff --git a/src/binarylane/console/commands/api/get_v2_load_balancers.py b/src/binarylane/console/commands/api/get_v2_load_balancers.py index ee3c3ff2..54ded702 100644 --- a/src/binarylane/console/commands/api/get_v2_load_balancers.py +++ b/src/binarylane/console/commands/api/get_v2_load_balancers.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union from binarylane.api.load_balancers.get_v2_load_balancers import sync_detailed +from binarylane.console.util import create_client from binarylane.models.links import Links from binarylane.models.load_balancers_response import LoadBalancersResponse @@ -55,6 +56,18 @@ def fields(self) -> Dict[str, str]: "region": """The region the load balancer is located in. If this value is null the load balancer is an 'AnyCast' load balancer.""", } + def lookup(self, ref: str) -> Optional[int]: + status_code, received = self.request(create_client(self._context), CommandRequest()) + if status_code != 200: + super().response(status_code, received) + + assert isinstance(received, LoadBalancersResponse) + for item in received.load_balancers: + if item.name == ref: + return item.id + else: + return None + @property def reference_url(self) -> str: return "https://api.binarylane.com.au/reference/#tag/LoadBalancers/paths/~1v2~1load_balancers/get" diff --git a/src/binarylane/console/commands/api/get_v2_load_balancers_load_balancer_id.py b/src/binarylane/console/commands/api/get_v2_load_balancers_load_balancer_id.py index 5f5ccc5c..c52e0a50 100644 --- a/src/binarylane/console/commands/api/get_v2_load_balancers_load_balancer_id.py +++ b/src/binarylane/console/commands/api/get_v2_load_balancers_load_balancer_id.py @@ -10,6 +10,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_load_balancers as api_get_v2_load_balancers from binarylane.console.parser import Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -29,13 +30,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_load_balancer_id(ref: str) -> Union[None, int]: + return api_get_v2_load_balancers.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "load_balancer_id", int, required=True, option_name=None, - description="""The ID of the load balancer to fetch.""", + metavar="load_balancer", + description="""The ID or name of the load balancer to fetch.""", + lookup=lookup_load_balancer_id, ) ) diff --git a/src/binarylane/console/commands/api/get_v2_vpcs.py b/src/binarylane/console/commands/api/get_v2_vpcs.py index b1cea22e..6556db9b 100644 --- a/src/binarylane/console/commands/api/get_v2_vpcs.py +++ b/src/binarylane/console/commands/api/get_v2_vpcs.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union from binarylane.api.vpcs.get_v2_vpcs import sync_detailed +from binarylane.console.util import create_client from binarylane.models.links import Links from binarylane.models.vpcs_response import VpcsResponse @@ -42,6 +43,18 @@ def fields(self) -> Dict[str, str]: "route_entries": """The route entries that control how network traffic is directed through the VPC environment.""", } + def lookup(self, ref: str) -> Optional[int]: + status_code, received = self.request(create_client(self._context), CommandRequest()) + if status_code != 200: + super().response(status_code, received) + + assert isinstance(received, VpcsResponse) + for item in received.vpcs: + if item.name == ref: + return item.id + else: + return None + @property def reference_url(self) -> str: return "https://api.binarylane.com.au/reference/#tag/Vpcs/paths/~1v2~1vpcs/get" diff --git a/src/binarylane/console/commands/api/get_v2_vpcs_vpc_id.py b/src/binarylane/console/commands/api/get_v2_vpcs_vpc_id.py index 3309914b..8955802e 100644 --- a/src/binarylane/console/commands/api/get_v2_vpcs_vpc_id.py +++ b/src/binarylane/console/commands/api/get_v2_vpcs_vpc_id.py @@ -10,6 +10,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_vpcs as api_get_v2_vpcs from binarylane.console.parser import Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -29,13 +30,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_vpc_id(ref: str) -> Union[None, int]: + return api_get_v2_vpcs.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "vpc_id", int, required=True, option_name=None, - description="""The target vpc id.""", + metavar="vpc", + description="""The target vpc id or name.""", + lookup=lookup_vpc_id, ) ) diff --git a/src/binarylane/console/commands/api/get_v2_vpcs_vpc_id_members.py b/src/binarylane/console/commands/api/get_v2_vpcs_vpc_id_members.py index 837623a0..6eb79212 100644 --- a/src/binarylane/console/commands/api/get_v2_vpcs_vpc_id_members.py +++ b/src/binarylane/console/commands/api/get_v2_vpcs_vpc_id_members.py @@ -13,6 +13,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_vpcs as api_get_v2_vpcs from binarylane.console.parser import Mapping, PrimitiveAttribute from binarylane.console.runners.list import ListRunner @@ -66,13 +67,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_vpc_id(ref: str) -> Union[None, int]: + return api_get_v2_vpcs.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "vpc_id", int, required=True, option_name=None, - description="""The target vpc id.""", + metavar="vpc", + description="""The target vpc id or name.""", + lookup=lookup_vpc_id, ) ) diff --git a/src/binarylane/console/commands/api/patch_v2_vpcs_vpc_id.py b/src/binarylane/console/commands/api/patch_v2_vpcs_vpc_id.py index 90870d7e..568622b5 100644 --- a/src/binarylane/console/commands/api/patch_v2_vpcs_vpc_id.py +++ b/src/binarylane/console/commands/api/patch_v2_vpcs_vpc_id.py @@ -14,6 +14,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_vpcs as api_get_v2_vpcs from binarylane.console.parser import ListAttribute, Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -35,13 +36,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_vpc_id(ref: str) -> Union[None, int]: + return api_get_v2_vpcs.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "vpc_id", int, required=True, option_name=None, - description="""The target vpc id.""", + metavar="vpc", + description="""The target vpc id or name.""", + lookup=lookup_vpc_id, ) ) diff --git a/src/binarylane/console/commands/api/post_v2_load_balancers_load_balancer_id_forwarding_rules.py b/src/binarylane/console/commands/api/post_v2_load_balancers_load_balancer_id_forwarding_rules.py index b3157506..11623a63 100644 --- a/src/binarylane/console/commands/api/post_v2_load_balancers_load_balancer_id_forwarding_rules.py +++ b/src/binarylane/console/commands/api/post_v2_load_balancers_load_balancer_id_forwarding_rules.py @@ -13,6 +13,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_load_balancers as api_get_v2_load_balancers from binarylane.console.parser import ListAttribute, Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -34,13 +35,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_load_balancer_id(ref: str) -> Union[None, int]: + return api_get_v2_load_balancers.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "load_balancer_id", int, required=True, option_name=None, - description="""The ID of the load balancer to which forwarding rules should be added.""", + metavar="load_balancer", + description="""The ID or name of the load balancer to which forwarding rules should be added.""", + lookup=lookup_load_balancer_id, ) ) diff --git a/src/binarylane/console/commands/api/post_v2_load_balancers_load_balancer_id_servers.py b/src/binarylane/console/commands/api/post_v2_load_balancers_load_balancer_id_servers.py index 5085a58b..e643c637 100644 --- a/src/binarylane/console/commands/api/post_v2_load_balancers_load_balancer_id_servers.py +++ b/src/binarylane/console/commands/api/post_v2_load_balancers_load_balancer_id_servers.py @@ -11,6 +11,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_load_balancers as api_get_v2_load_balancers import binarylane.console.commands.api.get_v2_servers as api_get_v2_servers from binarylane.console.parser import Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -33,13 +34,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_load_balancer_id(ref: str) -> Union[None, int]: + return api_get_v2_load_balancers.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "load_balancer_id", int, required=True, option_name=None, - description="""The ID of the load balancer to which servers should be added.""", + metavar="load_balancer", + description="""The ID or name of the load balancer to which servers should be added.""", + lookup=lookup_load_balancer_id, ) ) diff --git a/src/binarylane/console/commands/api/post_v2_servers.py b/src/binarylane/console/commands/api/post_v2_servers.py index e31e16a9..f5d52bda 100644 --- a/src/binarylane/console/commands/api/post_v2_servers.py +++ b/src/binarylane/console/commands/api/post_v2_servers.py @@ -14,6 +14,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_vpcs as api_get_v2_vpcs from binarylane.console.parser import ListAttribute, Mapping, ObjectAttribute, PrimitiveAttribute from binarylane.console.runners.actionlink import ActionLinkRunner @@ -95,13 +96,18 @@ def create_mapping(self) -> Mapping: ) ) + def lookup_vpc_id(ref: str) -> Union[None, int]: + return api_get_v2_vpcs.Command(self._context).lookup(ref) + json_body.add( PrimitiveAttribute( "vpc_id", Union[Unset, None, int], required=False, - option_name="vpc-id", + option_name=("vpc", "vpc-id"), + metavar="vpc", description="""Leave null to use default (public) network for the selected region.""", + lookup=lookup_vpc_id, ) ) diff --git a/src/binarylane/console/commands/api/post_v_2_servers_server_id_actions_change_network.py b/src/binarylane/console/commands/api/post_v_2_servers_server_id_actions_change_network.py index 93662642..6f0a4e37 100644 --- a/src/binarylane/console/commands/api/post_v_2_servers_server_id_actions_change_network.py +++ b/src/binarylane/console/commands/api/post_v_2_servers_server_id_actions_change_network.py @@ -15,6 +15,7 @@ from binarylane.client import Client import binarylane.console.commands.api.get_v2_servers as api_get_v2_servers +import binarylane.console.commands.api.get_v2_vpcs as api_get_v2_vpcs from binarylane.console.parser import Mapping, PrimitiveAttribute from binarylane.console.runners.action import ActionRunner @@ -62,13 +63,18 @@ def lookup_server_id(ref: str) -> Union[None, int]: ) ) + def lookup_vpc_id(ref: str) -> Union[None, int]: + return api_get_v2_vpcs.Command(self._context).lookup(ref) + json_body.add( PrimitiveAttribute( "vpc_id", Union[Unset, None, int], required=False, - option_name="vpc-id", + option_name=("vpc", "vpc-id"), + metavar="vpc", description="""If this is null the server will be moved into the default public network for the server's region.""", + lookup=lookup_vpc_id, ) ) diff --git a/src/binarylane/console/commands/api/put_v2_load_balancers_load_balancer_id.py b/src/binarylane/console/commands/api/put_v2_load_balancers_load_balancer_id.py index c5ec53db..8bca7d9d 100644 --- a/src/binarylane/console/commands/api/put_v2_load_balancers_load_balancer_id.py +++ b/src/binarylane/console/commands/api/put_v2_load_balancers_load_balancer_id.py @@ -17,6 +17,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_load_balancers as api_get_v2_load_balancers import binarylane.console.commands.api.get_v2_servers as api_get_v2_servers from binarylane.console.parser import ListAttribute, Mapping, ObjectAttribute, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -39,13 +40,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_load_balancer_id(ref: str) -> Union[None, int]: + return api_get_v2_load_balancers.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "load_balancer_id", int, required=True, option_name=None, - description="""The ID of the load balancer to update.""", + metavar="load_balancer", + description="""The ID or name of the load balancer to update.""", + lookup=lookup_load_balancer_id, ) ) diff --git a/src/binarylane/console/commands/api/put_v2_vpcs_vpc_id.py b/src/binarylane/console/commands/api/put_v2_vpcs_vpc_id.py index 1aeada7c..619e3c6c 100644 --- a/src/binarylane/console/commands/api/put_v2_vpcs_vpc_id.py +++ b/src/binarylane/console/commands/api/put_v2_vpcs_vpc_id.py @@ -14,6 +14,7 @@ if TYPE_CHECKING: from binarylane.client import Client +import binarylane.console.commands.api.get_v2_vpcs as api_get_v2_vpcs from binarylane.console.parser import ListAttribute, Mapping, PrimitiveAttribute from binarylane.console.runners.command import CommandRunner @@ -35,13 +36,18 @@ def reference_url(self) -> str: def create_mapping(self) -> Mapping: mapping = Mapping(CommandRequest) + def lookup_vpc_id(ref: str) -> Union[None, int]: + return api_get_v2_vpcs.Command(self._context).lookup(ref) + mapping.add( PrimitiveAttribute( "vpc_id", int, required=True, option_name=None, - description="""The target vpc id.""", + metavar="vpc", + description="""The target vpc id or name.""", + lookup=lookup_vpc_id, ) ) diff --git a/templates/lookups.jinja b/templates/lookups.jinja index cdac0be3..2b95d283 100644 --- a/templates/lookups.jinja +++ b/templates/lookups.jinja @@ -8,13 +8,17 @@ available in OpenAPI Specification published by BinaryLane. {# Map of attribute name to command that can resolve attribute reference. #} {% set lookup_map = { + "load_balancer_id": "load-balancer list", "server_id": "server list", + "vpc_id": "vpc list", } %} {# Map of command to {id,ref} obect specifying the attributes within x-cli-command's response that provide the reference (input) and id (output). #} {% set entity_map = { + "load-balancer list": {"id": "id", "ref": "name"}, "server list": {"id": "id", "ref": "name"}, + "vpc list": {"id": "id", "ref": "name"}, } %} {# Add x-cli-lookup to attributes that support lookup. #}