Skip to content

Commit

Permalink
feat: Implement AssociateContainerRegistryWithGroup, `DisassociateC…
Browse files Browse the repository at this point in the history
…ontainerRegistryWithGroup`
  • Loading branch information
jopemachine committed Nov 11, 2024
1 parent 52314a4 commit 29dec8a
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/ai/backend/manager/api/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -1750,6 +1750,12 @@ type Mutations {
"""Object id. Can be either global id or object id. Added in 24.09.0."""
id: String!
): DeleteContainerRegistryNode

"""Added in 24.12.0"""
associate_container_registry_with_group(group_id: String!, registry_id: String!): AssociateContainerRegistryWithGroup

"""Added in 24.12.0"""
disassociate_container_registry_with_group(group_id: String!, registry_id: String!): DisassociateContainerRegistryWithGroup
create_container_registry(hostname: String!, props: CreateContainerRegistryInput!): CreateContainerRegistry
modify_container_registry(hostname: String!, props: ModifyContainerRegistryInput!): ModifyContainerRegistry
delete_container_registry(hostname: String!): DeleteContainerRegistry
Expand Down Expand Up @@ -2464,6 +2470,18 @@ type DeleteContainerRegistryNode {
container_registry: ContainerRegistryNode
}

"""Added in 24.12.0."""
type AssociateContainerRegistryWithGroup {
ok: Boolean
msg: String
}

"""Added in 24.12.0."""
type DisassociateContainerRegistryWithGroup {
ok: Boolean
msg: String
}

type CreateContainerRegistry {
container_registry: ContainerRegistry
}
Expand Down
11 changes: 11 additions & 0 deletions src/ai/backend/manager/models/gql.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@
AgentSummaryList,
ModifyAgent,
)
from .gql_models.container_registry import (
AssociateContainerRegistryWithGroup,
DisassociateContainerRegistryWithGroup,
)
from .gql_models.domain import (
CreateDomainNode,
DomainConnection,
Expand Down Expand Up @@ -332,6 +336,13 @@ class Mutations(graphene.ObjectType):
description="Added in 24.09.0."
)

associate_container_registry_with_group = AssociateContainerRegistryWithGroup.Field(
description="Added in 24.12.0"
)
disassociate_container_registry_with_group = DisassociateContainerRegistryWithGroup.Field(
description="Added in 24.12.0"
)

# Legacy mutations
create_container_registry = CreateContainerRegistry.Field()
modify_container_registry = ModifyContainerRegistry.Field()
Expand Down
72 changes: 72 additions & 0 deletions src/ai/backend/manager/models/gql_models/container_registry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
from __future__ import annotations

import logging
from typing import Self

import graphene
import sqlalchemy as sa

from ai.backend.common.logging_utils import BraceStyleAdapter
from ai.backend.manager.models.association_container_registries_groups import (
AssociationContainerRegistriesGroupsRow,
)
from ai.backend.manager.models.base import simple_db_mutate

from .user import UserRole

log = BraceStyleAdapter(logging.getLogger(__spec__.name)) # type: ignore


class AssociateContainerRegistryWithGroup(graphene.Mutation):
"""Added in 24.12.0."""

allowed_roles = (UserRole.SUPERADMIN,)

class Arguments:
registry_id = graphene.String(required=True)
group_id = graphene.String(required=True)

ok = graphene.Boolean()
msg = graphene.String()

@classmethod
async def mutate(
cls,
root,
info: graphene.ResolveInfo,
registry_id: str,
group_id: str,
) -> Self:
insert_query = sa.insert(AssociationContainerRegistriesGroupsRow).values({
"registry_id": registry_id,
"group_id": group_id,
})
return await simple_db_mutate(cls, info.context, insert_query)


class DisassociateContainerRegistryWithGroup(graphene.Mutation):
"""Added in 24.12.0."""

allowed_roles = (UserRole.SUPERADMIN,)

class Arguments:
registry_id = graphene.String(required=True)
group_id = graphene.String(required=True)

ok = graphene.Boolean()
msg = graphene.String()

@classmethod
async def mutate(
cls,
root,
info: graphene.ResolveInfo,
registry_id: str,
group_id: str,
) -> Self:
delete_query = (
sa.delete(AssociationContainerRegistriesGroupsRow)
.where(AssociationContainerRegistriesGroupsRow.registry_id == registry_id)
.where(AssociationContainerRegistriesGroupsRow.group_id == group_id)
)
return await simple_db_mutate(cls, info.context, delete_query)

0 comments on commit 29dec8a

Please sign in to comment.