[APM] ensure rum_allow_origins setting only saves valid YAML strings (#128703) (#128704)

This commit is contained in:
Oliver Gupte 2022-03-29 08:10:00 -04:00 committed by GitHub
parent 17086ad6ce
commit 92aea763cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 3 deletions

View file

@ -23,6 +23,7 @@ import {
import { getApmPackagePolicyDefinition } from './get_apm_package_policy_definition';
import { Setup } from '../../lib/helpers/setup_request';
import { mergePackagePolicyWithApm } from './merge_package_policy_with_apm';
import { ELASTIC_CLOUD_APM_AGENT_POLICY_ID } from '../../../common/fleet';
export async function createCloudApmPackgePolicy({
cloudPluginSetup,
@ -65,7 +66,7 @@ export async function createCloudApmPackgePolicy({
savedObjectsClient,
esClient,
mergedAPMPackagePolicy,
{ force: true, bumpRevision: true }
{ id: ELASTIC_CLOUD_APM_AGENT_POLICY_ID, force: true, bumpRevision: true }
);
logger.info(`Fleet migration on Cloud - apmPackagePolicy create end`);
return apmPackagePolicy;

View file

@ -5,12 +5,12 @@
* 2.0.
*/
import yaml from 'js-yaml';
import { KibanaRequest } from 'kibana/server';
import { RegistryVarsEntry } from '../../../../fleet/common';
import {
POLICY_ELASTIC_AGENT_ON_CLOUD,
INPUT_VAR_NAME_TO_SCHEMA_PATH,
ELASTIC_CLOUD_APM_AGENT_POLICY_ID,
} from '../../../common/fleet';
import {
APMPluginSetupDependencies,
@ -36,7 +36,6 @@ export async function getApmPackagePolicyDefinition({
});
return {
id: ELASTIC_CLOUD_APM_AGENT_POLICY_ID,
name: 'Elastic APM',
namespace: 'default',
enabled: true,
@ -73,6 +72,9 @@ function getApmPackageInputVars({
}): Record<string, { type: string; value: any }> {
const overrideValues: Record<string, any> = {
url: cloudPluginSetup?.apm?.url, // overrides 'apm-server.url' to be the cloud APM host
rum_allow_origins: ensureValidMultiText(
apmServerSchema[INPUT_VAR_NAME_TO_SCHEMA_PATH.rum_allow_origins]
), // fixes issue where "*" needs to be wrapped in quotes to be parsed as a YAML string
};
return policyTemplateInputVars.reduce((acc, registryVarsEntry) => {
@ -90,3 +92,20 @@ function getApmPackageInputVars({
};
}, {});
}
function ensureValidMultiText(textMultiValue: string[] | undefined) {
if (!textMultiValue) {
return undefined;
}
return textMultiValue.map(escapeInvalidYamlString);
}
function escapeInvalidYamlString(yamlString: string) {
try {
yaml.load(yamlString);
} catch (error) {
if (error instanceof yaml.YAMLException) {
return `"${yamlString}"`;
}
}
return yamlString;
}