feat: distinguish same-name GPU service resources across users
Resource names are unique per owning principal, so different users can legally create same-name GPU instances, templates, SSH public keys, storage volumes and storage types — but the admin's cross-tenant lists and the instance-create template picker rendered them indistinguishably. - Group the template picker by owning scope: Your Templates, Global Templates, then — admin cross-tenant view only — one group per owner. A single group renders flat without headers. A plugin can take over grouping via hooks.useTemplateOwnerGroups when its principal model scopes templates beyond USER owners; a plugin without the hook keeps the flat list. - Add an admin-only Creator column to the Instances, SSH Public Keys, Storage and Storage Types tables, sitting right before Created (mirroring the API Keys page convention). Resolves creator_id to a username via the user directory, falling back to owner_principal_id for legacy rows — a personal-scope row's creator IS its owner. - Tag template cards with their owner scope (Global / username) for admins. The Creator column and the card tag defer to a plugin that registers the page's list columns / the OwnerScopeTag slot. Requires the gpustack server change that records creator_id on templates, SSH public keys and storage types.
This commit is contained in:
@@ -14,6 +14,7 @@ import tensorflowkLogo from '@/assets/logo/tensorflow.svg';
|
||||
import ubuntuLogo from '@/assets/logo/ubuntu_logo.png';
|
||||
import vllmLogo from '@/assets/logo/vllm.png';
|
||||
import PluginExtraFields from '@/components/plugin-extra-fields';
|
||||
import OwnerTag from '@/pages/gpu-service/components/owner-tag';
|
||||
import {
|
||||
GPUsConfigs,
|
||||
manfacturerValueMap
|
||||
@@ -266,6 +267,7 @@ const TemplateCardItem: React.FC<TemplateCardProps> = ({ data, onSelect }) => {
|
||||
name="OwnerScopeTag"
|
||||
context={{ ownerPrincipalId: data.owner_principal_id }}
|
||||
/>
|
||||
<OwnerTag ownerId={data.owner_principal_id} />
|
||||
</CardName>
|
||||
<InfoItem>
|
||||
<span>
|
||||
|
||||
@@ -40,6 +40,7 @@ export interface ListItem extends FormData {
|
||||
// the `OwnerScopeTag` slot on the card so the owner is visible at a
|
||||
// glance. Optional on the wire — absent in single-owner builds.
|
||||
owner_principal_id?: number | null;
|
||||
creator_id?: number | null;
|
||||
created_at?: string;
|
||||
updated_at?: string;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user