diff --git a/public/app/features/plugins/datasource_srv.ts b/public/app/features/plugins/datasource_srv.ts index 63626277670..3e0c1ae8537 100644 --- a/public/app/features/plugins/datasource_srv.ts +++ b/public/app/features/plugins/datasource_srv.ts @@ -27,7 +27,6 @@ import { instanceSettings as expressionInstanceSettings, } from 'app/features/expressions/ExpressionDatasource'; import { DataSourceVariableModel } from '../variables/types'; -import { cloneDeep } from 'lodash'; export class DatasourceSrv implements DataSourceService { private datasources: Record = {}; // UID @@ -101,13 +100,14 @@ export class DatasourceSrv implements DataSourceService { if (!dsSettings) { return undefined; } - // The return name or uid needs preservet string containing the variable - const clone = cloneDeep(dsSettings); - clone.name = nameOrUid; - // A data source being looked up using a variable should not be considered default - clone.isDefault = false; - return clone; + // Return an instance with un-interpolated values for name and uid + return { + ...dsSettings, + isDefault: false, + name: nameOrUid, + uid: nameOrUid, + }; } return this.settingsMapByUid[nameOrUid] ?? this.settingsMapByName[nameOrUid]; @@ -243,6 +243,7 @@ export class DatasourceSrv implements DataSourceService { base.push({ ...dsSettings, name: key, + uid: key, }); } } diff --git a/public/app/features/plugins/specs/datasource_srv.test.ts b/public/app/features/plugins/specs/datasource_srv.test.ts index 53b8516b9bb..81eaf5442e6 100644 --- a/public/app/features/plugins/specs/datasource_srv.test.ts +++ b/public/app/features/plugins/specs/datasource_srv.test.ts @@ -125,7 +125,7 @@ describe('datasource_srv', () => { it('should work with variable', () => { const ds = dataSourceSrv.getInstanceSettings('${datasource}'); expect(ds?.name).toBe('${datasource}'); - expect(ds?.uid).toBe('uid-code-BBB'); + expect(ds?.uid).toBe('${datasource}'); }); it('should not set isDefault when being fetched via variable', () => { @@ -136,7 +136,7 @@ describe('datasource_srv', () => { it('should work with variable', () => { const ds = dataSourceSrv.getInstanceSettings('${datasourceDefault}'); expect(ds?.name).toBe('${datasourceDefault}'); - expect(ds?.uid).toBe('uid-code-BBB'); + expect(ds?.uid).toBe('${datasourceDefault}'); }); });