diff --git a/public/app/plugins/datasource/cloud-monitoring/datasource.ts b/public/app/plugins/datasource/cloud-monitoring/datasource.ts index e6762799894..94b78a815f8 100644 --- a/public/app/plugins/datasource/cloud-monitoring/datasource.ts +++ b/public/app/plugins/datasource/cloud-monitoring/datasource.ts @@ -1,4 +1,4 @@ -import { chunk, flatten, isString } from 'lodash'; +import { chunk, flatten, isString, isArray } from 'lodash'; import { from, lastValueFrom, Observable, of } from 'rxjs'; import { map, mergeMap } from 'rxjs/operators'; import { @@ -296,7 +296,9 @@ export default class CloudMonitoringDatasource extends DataSourceWithBackend< completeFilter.map(({ key, operator, value, condition }: Filter) => [ this.templateSrv.replace(key, scopedVars || {}), operator, - this.templateSrv.replace(value, scopedVars || {}, 'regex'), + this.templateSrv.replace(value, scopedVars || {}, (value: string | string[]) => { + return isArray(value) && value.length ? `(${value.join('|')})` : value; + }), ...(condition ? [condition] : []), ]) ); diff --git a/public/app/plugins/datasource/cloud-monitoring/specs/datasource.test.ts b/public/app/plugins/datasource/cloud-monitoring/specs/datasource.test.ts index db478db95d6..2058e476feb 100644 --- a/public/app/plugins/datasource/cloud-monitoring/specs/datasource.test.ts +++ b/public/app/plugins/datasource/cloud-monitoring/specs/datasource.test.ts @@ -113,6 +113,22 @@ describe('CloudMonitoringDataSource', () => { expect(interpolated[2]).toBe('(filtervalue1|filtervalue2)'); }); + + it('should not escape a regex', () => { + const templateSrv = initTemplateSrv('/[a-Z]*.html', true); + const { ds } = getTestcontext({ templateSrv }); + const interpolated = ds.interpolateFilters(['resource.label.zone', '=~', '[[test]]'], {}); + + expect(interpolated[2]).toBe('/[a-Z]*.html'); + }); + + it('should not escape an array of regexes but join them as a regex', () => { + const templateSrv = initTemplateSrv(['/[a-Z]*.html', '/foo.html'], true); + const { ds } = getTestcontext({ templateSrv }); + const interpolated = ds.interpolateFilters(['resource.label.zone', '=~', '[[test]]'], {}); + + expect(interpolated[2]).toBe('(/[a-Z]*.html|/foo.html)'); + }); }); });