Provisioning: Hide full path for classic provisioing resources (#105440)

pull/105492/head
Ryan McKinley 2 months ago committed by GitHub
parent 0041c7e9b7
commit da24ad06bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 9
      pkg/registry/apis/dashboard/legacy/sql_dashboards.go
  2. 2
      pkg/services/dashboards/service/dashboard_service.go
  3. 6
      pkg/storage/unified/apistore/managed.go
  4. 2
      public/app/features/apiserver/types.ts
  5. 12
      public/app/features/dashboard/api/v1.ts

@ -304,14 +304,17 @@ func (a *dashboardSqlAccess) scanRow(rows *sql.Rows, history bool) (*dashboardRo
}
if origin_name.String != "" {
editable := a.provisioning.GetAllowUIUpdatesFromConfig(origin_name.String)
prefix := a.provisioning.GetDashboardProvisionerResolvedPath(origin_name.String) + "/"
meta.SetSourceProperties(utils.SourceProperties{
Path: origin_path.String,
Path: strings.TrimPrefix(origin_path.String, prefix),
Checksum: origin_hash.String,
TimestampMillis: origin_ts.Int64,
})
meta.SetManagerProperties(utils.ManagerProperties{
Kind: utils.ManagerKindClassicFP, // nolint:staticcheck
Identity: origin_name.String,
Kind: utils.ManagerKindClassicFP, // nolint:staticcheck
Identity: origin_name.String,
AllowsEdits: editable,
})
} else if plugin_id.String != "" {
meta.SetManagerProperties(utils.ManagerProperties{

@ -1849,6 +1849,8 @@ func (dr *DashboardServiceImpl) saveProvisionedDashboardThroughK8s(ctx context.C
m := utils.ManagerProperties{}
s := utils.SourceProperties{}
if !unprovision {
// TODO: the path should be relative to the root
// HOWEVER, maybe OK to leave this for now and "fix" it by using file provisioning for mode 4
m.Kind = utils.ManagerKindClassicFP // nolint:staticcheck
m.Identity = provisioning.Name
s.Path = provisioning.ExternalID

@ -114,11 +114,13 @@ func (s *Storage) handleManagedResourceRouting(ctx context.Context,
return fmt.Errorf("expected managed resource")
}
if repo.Kind != utils.ManagerKindRepo {
return fmt.Errorf("expected managed repository")
if !repo.AllowsEdits {
return fmt.Errorf("managed resource does not allow edits")
}
}
src, ok := obj.GetSourceProperties()
if !ok || src.Path == "" {
return fmt.Errorf("missing source properties")
return fmt.Errorf("managed resource is missing source path annotation")
}
cfg, err := s.configProvider.GetRestConfig(ctx)

@ -48,6 +48,7 @@ export enum ManagerKind {
export const AnnoKeyManagerKind = 'grafana.app/managedBy';
export const AnnoKeyManagerIdentity = 'grafana.app/managerId';
export const AnnoKeyManagerAllowsEdits = 'grafana.app/managerAllowsEdits';
export const AnnoKeySourcePath = 'grafana.app/sourcePath';
export const AnnoKeySourceChecksum = 'grafana.app/sourceChecksum';
export const AnnoKeySourceTimestamp = 'grafana.app/sourceTimestamp';
@ -84,6 +85,7 @@ type GrafanaAnnotations = {
[AnnoKeyManagerKind]?: ManagerKind;
[AnnoKeyManagerIdentity]?: string;
[AnnoKeyManagerAllowsEdits]?: string;
[AnnoKeySourcePath]?: string;
[AnnoKeySourceChecksum]?: string;
[AnnoKeySourceTimestamp]?: string;

@ -12,6 +12,10 @@ import {
AnnoKeyGrantPermissions,
Resource,
DeprecatedInternalId,
AnnoKeyManagerKind,
AnnoKeySourcePath,
AnnoKeyManagerAllowsEdits,
ManagerKind,
} from 'app/features/apiserver/types';
import { getDashboardUrl } from 'app/features/dashboard-scene/utils/getDashboardUrl';
import { DeleteDashboardResponse } from 'app/features/manage-dashboards/types';
@ -126,6 +130,14 @@ export class K8sDashboardAPI implements DashboardAPI<DashboardDTO, Dashboard> {
},
};
const annotations = dash.metadata.annotations ?? {};
const managerKind = annotations[AnnoKeyManagerKind];
if (managerKind) {
result.meta.provisioned = annotations[AnnoKeyManagerAllowsEdits] === 'true' || managerKind === ManagerKind.Repo;
result.meta.provisionedExternalId = annotations[AnnoKeySourcePath];
}
if (dash.metadata.labels?.[DeprecatedInternalId]) {
result.dashboard.id = parseInt(dash.metadata.labels[DeprecatedInternalId], 10);
}

Loading…
Cancel
Save