Skip to content

Commit ada8eca

Browse files
authored
Merge pull request #433 from ndustrialio/SUP-15403-service-instance-dependency-flow
feat: add grant querying for edge nodes, service instances
2 parents 12edac9 + 11052cc commit ada8eca

File tree

5 files changed

+85
-20
lines changed

5 files changed

+85
-20
lines changed

contxt/cli/commands/edge_nodes.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from contxt.cli.clients import Clients
66
from contxt.cli.utils import fields_option, print_item, print_table, sort_option
7-
from contxt.models.contxt import EdgeNode
7+
from contxt.models.contxt import EdgeNode, EdgeNodeGrant
88

99

1010
@click.group("edge-nodes")
@@ -13,14 +13,15 @@ def edge_nodes() -> None:
1313

1414

1515
@edge_nodes.command()
16-
@click.argument("org_id")
17-
@click.argument("project_id")
18-
@fields_option(default="id, name, stack_id, description", obj=EdgeNode)
16+
@click.argument("project_slug")
17+
@fields_option(default="id, name, project_id, description", obj=EdgeNode)
1918
@sort_option(default="id")
2019
@click.pass_obj
21-
def get(clients: Clients, org_id: str, project_id: int, fields: List[str], sort: str) -> None:
20+
def get(clients: Clients, project_slug: int, fields: List[str], sort: str) -> None:
2221
"""Get edge nodes for a project"""
23-
items = clients.contxt.get_edge_nodes(organization_id=org_id, project_id=project_id)
22+
items = clients.contxt_deployments.get_edge_nodes(
23+
organization_id=clients.org_id, project_slug=project_slug
24+
)
2425
print_table(items=items, keys=fields, sort_by=sort)
2526

2627

@@ -34,3 +35,15 @@ def add_grant(clients: Clients, edge_node_id: str, target: int) -> None:
3435
edge_node_id=edge_node_id, to_service_instance_id=target
3536
)
3637
print_item(result)
38+
39+
40+
@edge_nodes.command()
41+
@click.argument("edge_node_id")
42+
@fields_option(default="id, from_edge_node_id, to_service_instance_id", obj=EdgeNodeGrant)
43+
@sort_option(default="id")
44+
@click.pass_obj
45+
def get_grants(clients: Clients, edge_node_id: str, fields: List[str], sort: str) -> None:
46+
"""Get all edge node grants"""
47+
items = clients.contxt_deployments.get_edge_node_grants(clients.org_id, edge_node_id=edge_node_id)
48+
49+
print_table(items=items, keys=fields, sort_by=sort)

contxt/cli/commands/service_instances.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from contxt.cli.clients import Clients
66
from contxt.cli.utils import fields_option, print_item, print_table, sort_option
7-
from contxt.models.contxt import ServiceInstance
7+
from contxt.models.contxt import ServiceInstance, ServiceInstanceGrant
88

99

1010
@click.group()
@@ -78,3 +78,16 @@ def add_grant(clients: Clients, service_instance_id: str, target: int) -> None:
7878
f"{clients.org_id}/service_instances/{service_instance_id}/grants", json
7979
)
8080
print_item(result)
81+
82+
83+
@service_instances.command()
84+
@click.argument("service_instance_id")
85+
@fields_option(default="id, from_service_instance_id, to_service_instance_id", obj=ServiceInstanceGrant)
86+
@sort_option(default="id")
87+
@click.pass_obj
88+
def get_grants(clients: Clients, service_instance_id: str, fields: List[str], sort: str) -> None:
89+
"""Get all service instance grants"""
90+
items = clients.contxt_deployments.get_service_instance_grants(
91+
clients.org_id, service_instance_id=service_instance_id
92+
)
93+
print_table(items=items, keys=fields, sort_by=sort)

contxt/models/contxt.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,21 @@ class ServiceInstance(ApiObject):
320320
created_at: Optional[datetime] = None
321321

322322

323+
@dataclass
324+
class ServiceInstanceGrant(ApiObject):
325+
_api_fields: ClassVar = (
326+
ApiField("id"),
327+
ApiField("from_service_instance_id"),
328+
ApiField("to_service_instance_id"),
329+
ApiField("created_at", data_type=Parsers.datetime),
330+
)
331+
332+
id: str
333+
from_service_instance_id: str
334+
to_service_instance_id: int
335+
created_at: Optional[datetime] = None
336+
337+
323338
@dataclass
324339
class Project(ApiObject):
325340
_api_fields: ClassVar = (
@@ -372,24 +387,39 @@ class ProjectEnvironment(ApiObject):
372387
@dataclass
373388
class EdgeNode(ApiObject):
374389
_api_fields: ClassVar = (
375-
ApiField("id", data_type=int),
390+
ApiField("id"),
376391
ApiField("name"),
377-
ApiField("stack_id"),
392+
ApiField("project_id"),
378393
ApiField("organization_id"),
379394
ApiField("description"),
380395
ApiField("client_id"),
381396
ApiField("created_at", data_type=Parsers.datetime),
382397
)
383398

384-
id: int
399+
id: str
385400
name: str
386-
stack_id: int
401+
project_id: int
387402
organization_id: str
388403
description: str
389404
client_id: str
390405
created_at: Optional[datetime] = None
391406

392407

408+
@dataclass
409+
class EdgeNodeGrant(ApiObject):
410+
_api_fields: ClassVar = (
411+
ApiField("id"),
412+
ApiField("from_edge_node_id"),
413+
ApiField("to_service_instance_id"),
414+
ApiField("created_at", data_type=Parsers.datetime),
415+
)
416+
417+
id: str
418+
from_edge_node_id: str
419+
to_service_instance_id: int
420+
created_at: Optional[datetime] = None
421+
422+
393423
@dataclass
394424
class Cluster(ApiObject):
395425
_api_fields: ClassVar = (

contxt/services/contxt.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from ..models.contxt import (
66
Config,
77
ConfigValue,
8-
EdgeNode,
98
Organization,
109
OrganizationUser,
1110
Project,
@@ -108,15 +107,11 @@ def get_services(self, project_id: Union[int, None] = None) -> List[Service]:
108107
resp = self.get("services")
109108
return [Service.from_api(rec) for rec in resp]
110109

111-
def get_edge_nodes(self, organization_id: str, project_id: int) -> List[EdgeNode]:
112-
resp = self.get(f"organizations/{organization_id}/stacks/{project_id}/edgenodes")
113-
return [EdgeNode.from_api(rec) for rec in resp]
110+
def get_service(self, service_id: int) -> Service:
111+
resp = self.get(f"services/{service_id}")
112+
return Service.from_api(resp)
114113

115114
def create_edge_node_grant(self, edge_node_id: str, to_service_instance_id: int) -> Dict:
116115
return self.post(
117116
f"edgenodes/{edge_node_id}/grants", data={"to_service_instance_id": to_service_instance_id}
118117
)
119-
120-
def get_service(self, service_id: int) -> Service:
121-
resp = self.get(f"services/{service_id}")
122-
return Service.from_api(resp)

contxt/services/contxt_deployments.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from requests.exceptions import HTTPError
44

55
from ..auth import Auth
6-
from ..models.contxt import Cluster
6+
from ..models.contxt import Cluster, EdgeNode, EdgeNodeGrant, ServiceInstanceGrant
77
from .api import ApiEnvironment, ConfiguredApi
88

99

@@ -41,3 +41,17 @@ def register_cluster(self, organization_id: str, cluster: Cluster) -> None:
4141
except HTTPError:
4242
pass
4343
return
44+
45+
def get_edge_nodes(self, organization_id: str, project_slug: int) -> List[EdgeNode]:
46+
resp = self.get(f"{organization_id}/projects/{project_slug}/edgenodes")
47+
return [EdgeNode.from_api(rec) for rec in resp]
48+
49+
def get_edge_node_grants(self, organization_id: str, edge_node_id: int) -> List[EdgeNodeGrant]:
50+
resp = self.get(f"{organization_id}/edgenodes/{edge_node_id}/grants")
51+
return [EdgeNodeGrant.from_api(rec) for rec in resp]
52+
53+
def get_service_instance_grants(
54+
self, organization_id: str, service_instance_id: int
55+
) -> List[ServiceInstanceGrant]:
56+
resp = self.get(f"{organization_id}/service_instances/{service_instance_id}/grants")
57+
return [ServiceInstanceGrant.from_api(rec) for rec in resp]

0 commit comments

Comments
 (0)