mirror of
https://github.com/grafana/grafana.git
synced 2025-02-11 16:15:42 -06:00
ResourceClient: Add generateName (eg UID) helper (#88037)
This commit is contained in:
parent
f3be9d009e
commit
e8b7b6aa66
@ -8,7 +8,7 @@ import {
|
||||
Resource,
|
||||
ResourceForCreate,
|
||||
ResourceList,
|
||||
ResourceServer,
|
||||
ResourceClient,
|
||||
} from './types';
|
||||
|
||||
export interface GroupVersionResource {
|
||||
@ -17,7 +17,7 @@ export interface GroupVersionResource {
|
||||
resource: string;
|
||||
}
|
||||
|
||||
export class ScopedResourceServer<T = object, K = string> implements ResourceServer<T, K> {
|
||||
export class ScopedResourceClient<T = object, K = string> implements ResourceClient<T, K> {
|
||||
readonly url: string;
|
||||
|
||||
constructor(gvr: GroupVersionResource, namespaced = true) {
|
||||
@ -27,6 +27,9 @@ export class ScopedResourceServer<T = object, K = string> implements ResourceSer
|
||||
}
|
||||
|
||||
public async create(obj: ResourceForCreate<T, K>): Promise<void> {
|
||||
if (!obj.metadata.name && !obj.metadata.generateName) {
|
||||
obj.metadata.generateName = 'g'; // Triggers the server to create a unique value
|
||||
}
|
||||
return getBackendSrv().post(this.url, obj);
|
||||
}
|
||||
|
@ -63,7 +63,10 @@ export interface Resource<T = object, K = string> extends TypeMeta<K> {
|
||||
}
|
||||
|
||||
export interface ResourceForCreate<T = object, K = string> extends Partial<TypeMeta<K>> {
|
||||
metadata: Partial<ObjectMeta>;
|
||||
metadata: Partial<ObjectMeta> & {
|
||||
// When creating a resource, it must set a name or generateName to create a unique one on the server
|
||||
generateName?: string;
|
||||
};
|
||||
spec: T;
|
||||
}
|
||||
|
||||
@ -138,7 +141,7 @@ export interface MetaStatus {
|
||||
details?: object;
|
||||
}
|
||||
|
||||
export interface ResourceServer<T = object, K = string> {
|
||||
export interface ResourceClient<T = object, K = string> {
|
||||
create(obj: ResourceForCreate<T, K>): Promise<void>;
|
||||
get(name: string): Promise<Resource<T, K>>;
|
||||
list(opts?: ListOptions): Promise<ResourceList<T, K>>;
|
||||
|
@ -7,7 +7,7 @@ import { getAppEvents, getBackendSrv } from '@grafana/runtime';
|
||||
import { SceneComponentProps, SceneObjectBase, SceneObjectState } from '@grafana/scenes';
|
||||
import { CustomScrollbar, Icon, Input, useStyles2 } from '@grafana/ui';
|
||||
import { useQueryParams } from 'app/core/hooks/useQueryParams';
|
||||
import { ScopedResourceServer } from 'app/features/apiserver/server';
|
||||
import { ScopedResourceClient } from 'app/features/apiserver/client';
|
||||
|
||||
export interface ScopeDashboard {
|
||||
uid: string;
|
||||
@ -25,7 +25,7 @@ export interface ScopesDashboardsSceneState extends SceneObjectState {
|
||||
export class ScopesDashboardsScene extends SceneObjectBase<ScopesDashboardsSceneState> {
|
||||
static Component = ScopesDashboardsSceneRenderer;
|
||||
|
||||
private server = new ScopedResourceServer<ScopeDashboardBindingSpec, 'ScopeDashboardBinding'>({
|
||||
private server = new ScopedResourceClient<ScopeDashboardBindingSpec, 'ScopeDashboardBinding'>({
|
||||
group: 'scope.grafana.app',
|
||||
version: 'v0alpha1',
|
||||
resource: 'scopedashboardbindings',
|
||||
|
@ -11,7 +11,7 @@ import {
|
||||
SceneObjectUrlValues,
|
||||
} from '@grafana/scenes';
|
||||
import { Checkbox, Icon, Input, Toggletip, useStyles2 } from '@grafana/ui';
|
||||
import { ScopedResourceServer } from 'app/features/apiserver/server';
|
||||
import { ScopedResourceClient } from 'app/features/apiserver/client';
|
||||
|
||||
export interface Node {
|
||||
item: ScopeTreeItemSpec;
|
||||
@ -34,7 +34,7 @@ export class ScopesFiltersScene extends SceneObjectBase<ScopesFiltersSceneState>
|
||||
private serverVersion = 'v0alpha1';
|
||||
private serverNamespace = 'default';
|
||||
|
||||
private server = new ScopedResourceServer<ScopeSpec, 'Scope'>({
|
||||
private server = new ScopedResourceClient<ScopeSpec, 'Scope'>({
|
||||
group: this.serverGroup,
|
||||
version: this.serverVersion,
|
||||
resource: 'scopes',
|
||||
|
@ -8,8 +8,8 @@ import { getGrafanaDatasource } from 'app/plugins/datasource/grafana/datasource'
|
||||
import { GrafanaQuery, GrafanaQueryType } from 'app/plugins/datasource/grafana/types';
|
||||
import { dispatch } from 'app/store/store';
|
||||
|
||||
import { ScopedResourceServer } from '../apiserver/server';
|
||||
import { Resource, ResourceForCreate, ResourceServer } from '../apiserver/types';
|
||||
import { ScopedResourceClient } from '../apiserver/client';
|
||||
import { Resource, ResourceForCreate, ResourceClient } from '../apiserver/types';
|
||||
import { DashboardQueryResult, getGrafanaSearcher, SearchQuery } from '../search/service';
|
||||
|
||||
import { Playlist, PlaylistItem, PlaylistAPI } from './types';
|
||||
@ -47,10 +47,10 @@ interface PlaylistSpec {
|
||||
type K8sPlaylist = Resource<PlaylistSpec>;
|
||||
|
||||
class K8sAPI implements PlaylistAPI {
|
||||
readonly server: ResourceServer<PlaylistSpec>;
|
||||
readonly server: ResourceClient<PlaylistSpec>;
|
||||
|
||||
constructor() {
|
||||
this.server = new ScopedResourceServer<PlaylistSpec>({
|
||||
this.server = new ScopedResourceClient<PlaylistSpec>({
|
||||
group: 'playlist.grafana.app',
|
||||
version: 'v0alpha1',
|
||||
resource: 'playlists',
|
||||
|
Loading…
Reference in New Issue
Block a user