Skip to content

Commit 7b97b5c

Browse files
authored
[Fleet] Stop loading js-yaml in main plugin bundle (#111169)
1 parent 3f015e1 commit 7b97b5c

File tree

11 files changed

+91
-41
lines changed

11 files changed

+91
-41
lines changed

packages/kbn-optimizer/limits.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pageLoadAssetSize:
3434
indexPatternManagement: 28222
3535
indexPatternEditor: 25000
3636
infra: 184320
37-
fleet: 465774
37+
fleet: 250000
3838
ingestPipelines: 58003
3939
inputControlVis: 172675
4040
inspector: 148711

x-pack/plugins/fleet/common/services/full_agent_policy_to_yaml.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* 2.0.
66
*/
77

8-
import { safeDump } from 'js-yaml';
8+
import type { safeDump } from 'js-yaml';
99

1010
import type { FullAgentPolicy } from '../types';
1111

@@ -25,8 +25,8 @@ const POLICY_KEYS_ORDER = [
2525
'input',
2626
];
2727

28-
export const fullAgentPolicyToYaml = (policy: FullAgentPolicy): string => {
29-
return safeDump(policy, {
28+
export const fullAgentPolicyToYaml = (policy: FullAgentPolicy, toYaml: typeof safeDump): string => {
29+
return toYaml(policy, {
3030
skipInvalid: true,
3131
sortKeys: (keyA: string, keyB: string) => {
3232
const indexA = POLICY_KEYS_ORDER.indexOf(keyA);

x-pack/plugins/fleet/common/services/validate_package_policy.test.ts

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* 2.0.
66
*/
77

8+
import { safeLoad } from 'js-yaml';
9+
810
import { installationStatuses } from '../constants';
911
import type { PackageInfo, NewPackagePolicy, RegistryPolicyTemplate } from '../types';
1012

@@ -371,13 +373,13 @@ describe('Fleet - validatePackagePolicy()', () => {
371373
};
372374

373375
it('returns no errors for valid package policy', () => {
374-
expect(validatePackagePolicy(validPackagePolicy, mockPackage)).toEqual(
376+
expect(validatePackagePolicy(validPackagePolicy, mockPackage, safeLoad)).toEqual(
375377
noErrorsValidationResults
376378
);
377379
});
378380

379381
it('returns errors for invalid package policy', () => {
380-
expect(validatePackagePolicy(invalidPackagePolicy, mockPackage)).toEqual({
382+
expect(validatePackagePolicy(invalidPackagePolicy, mockPackage, safeLoad)).toEqual({
381383
name: ['Name is required'],
382384
description: null,
383385
namespace: null,
@@ -423,7 +425,11 @@ describe('Fleet - validatePackagePolicy()', () => {
423425
enabled: false,
424426
}));
425427
expect(
426-
validatePackagePolicy({ ...validPackagePolicy, inputs: disabledInputs }, mockPackage)
428+
validatePackagePolicy(
429+
{ ...validPackagePolicy, inputs: disabledInputs },
430+
mockPackage,
431+
safeLoad
432+
)
427433
).toEqual(noErrorsValidationResults);
428434
});
429435

@@ -439,7 +445,8 @@ describe('Fleet - validatePackagePolicy()', () => {
439445
expect(
440446
validatePackagePolicy(
441447
{ ...invalidPackagePolicy, inputs: inputsWithDisabledStreams },
442-
mockPackage
448+
mockPackage,
449+
safeLoad
443450
)
444451
).toEqual({
445452
name: ['Name is required'],
@@ -485,21 +492,29 @@ describe('Fleet - validatePackagePolicy()', () => {
485492

486493
it('returns no errors for packages with no package policies', () => {
487494
expect(
488-
validatePackagePolicy(validPackagePolicy, {
489-
...mockPackage,
490-
policy_templates: undefined,
491-
})
495+
validatePackagePolicy(
496+
validPackagePolicy,
497+
{
498+
...mockPackage,
499+
policy_templates: undefined,
500+
},
501+
safeLoad
502+
)
492503
).toEqual({
493504
name: null,
494505
description: null,
495506
namespace: null,
496507
inputs: null,
497508
});
498509
expect(
499-
validatePackagePolicy(validPackagePolicy, {
500-
...mockPackage,
501-
policy_templates: [],
502-
})
510+
validatePackagePolicy(
511+
validPackagePolicy,
512+
{
513+
...mockPackage,
514+
policy_templates: [],
515+
},
516+
safeLoad
517+
)
503518
).toEqual({
504519
name: null,
505520
description: null,
@@ -510,21 +525,29 @@ describe('Fleet - validatePackagePolicy()', () => {
510525

511526
it('returns no errors for packages with no inputs', () => {
512527
expect(
513-
validatePackagePolicy(validPackagePolicy, {
514-
...mockPackage,
515-
policy_templates: [{} as RegistryPolicyTemplate],
516-
})
528+
validatePackagePolicy(
529+
validPackagePolicy,
530+
{
531+
...mockPackage,
532+
policy_templates: [{} as RegistryPolicyTemplate],
533+
},
534+
safeLoad
535+
)
517536
).toEqual({
518537
name: null,
519538
description: null,
520539
namespace: null,
521540
inputs: null,
522541
});
523542
expect(
524-
validatePackagePolicy(validPackagePolicy, {
525-
...mockPackage,
526-
policy_templates: [({ inputs: [] } as unknown) as RegistryPolicyTemplate],
527-
})
543+
validatePackagePolicy(
544+
validPackagePolicy,
545+
{
546+
...mockPackage,
547+
policy_templates: [({ inputs: [] } as unknown) as RegistryPolicyTemplate],
548+
},
549+
safeLoad
550+
)
528551
).toEqual({
529552
name: null,
530553
description: null,
@@ -539,7 +562,8 @@ describe('Fleet - validatePackagePolicy()', () => {
539562
expect(
540563
validatePackagePolicy(
541564
INVALID_AWS_POLICY as NewPackagePolicy,
542-
(AWS_PACKAGE as unknown) as PackageInfo
565+
(AWS_PACKAGE as unknown) as PackageInfo,
566+
safeLoad
543567
)
544568
).toMatchSnapshot();
545569
});
@@ -549,7 +573,8 @@ describe('Fleet - validatePackagePolicy()', () => {
549573
validationHasErrors(
550574
validatePackagePolicy(
551575
VALID_AWS_POLICY as NewPackagePolicy,
552-
(AWS_PACKAGE as unknown) as PackageInfo
576+
(AWS_PACKAGE as unknown) as PackageInfo,
577+
safeLoad
553578
)
554579
)
555580
).toBe(false);

x-pack/plugins/fleet/common/services/validate_package_policy.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import { getFlattenedObject } from '@kbn/std';
99
import { i18n } from '@kbn/i18n';
10-
import { safeLoad } from 'js-yaml';
1110
import { keyBy } from 'lodash';
1211

1312
import type {
@@ -47,7 +46,8 @@ export type PackagePolicyValidationResults = {
4746
*/
4847
export const validatePackagePolicy = (
4948
packagePolicy: NewPackagePolicy,
50-
packageInfo: PackageInfo
49+
packageInfo: PackageInfo,
50+
safeLoadYaml: (yaml: string) => any
5151
): PackagePolicyValidationResults => {
5252
const hasIntegrations = doesPackageHaveIntegrations(packageInfo);
5353
const validationResults: PackagePolicyValidationResults = {
@@ -75,7 +75,12 @@ export const validatePackagePolicy = (
7575
const packageVars = Object.entries(packagePolicy.vars || {});
7676
if (packageVars.length) {
7777
validationResults.vars = packageVars.reduce((results, [name, varEntry]) => {
78-
results[name] = validatePackagePolicyConfig(varEntry, packageVarsByName[name], name);
78+
results[name] = validatePackagePolicyConfig(
79+
varEntry,
80+
packageVarsByName[name],
81+
name,
82+
safeLoadYaml
83+
);
7984
return results;
8085
}, {} as ValidationEntry);
8186
}
@@ -139,7 +144,8 @@ export const validatePackagePolicy = (
139144
? validatePackagePolicyConfig(
140145
configEntry,
141146
inputVarDefsByPolicyTemplateAndType[inputKey][name],
142-
name
147+
name,
148+
safeLoadYaml
143149
)
144150
: null;
145151
return results;
@@ -162,7 +168,12 @@ export const validatePackagePolicy = (
162168
(results, [name, configEntry]) => {
163169
results[name] =
164170
streamVarDefs && streamVarDefs[name] && input.enabled && stream.enabled
165-
? validatePackagePolicyConfig(configEntry, streamVarDefs[name], name)
171+
? validatePackagePolicyConfig(
172+
configEntry,
173+
streamVarDefs[name],
174+
name,
175+
safeLoadYaml
176+
)
166177
: null;
167178
return results;
168179
},
@@ -191,7 +202,8 @@ export const validatePackagePolicy = (
191202
export const validatePackagePolicyConfig = (
192203
configEntry: PackagePolicyConfigRecordEntry,
193204
varDef: RegistryVarsEntry,
194-
varName: string
205+
varName: string,
206+
safeLoadYaml: (yaml: string) => any
195207
): string[] | null => {
196208
const errors = [];
197209
const { value } = configEntry;
@@ -223,7 +235,7 @@ export const validatePackagePolicyConfig = (
223235

224236
if (varDef.type === 'yaml') {
225237
try {
226-
parsedValue = safeLoad(value);
238+
parsedValue = safeLoadYaml(value);
227239
} catch (e) {
228240
errors.push(
229241
i18n.translate('xpack.fleet.packagePolicyValidation.invalidYamlFormatErrorMessage', {

x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_yaml_flyout.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import React, { memo } from 'react';
99
import styled from 'styled-components';
1010
import { FormattedMessage } from '@kbn/i18n/react';
11+
import { safeDump } from 'js-yaml';
1112
import {
1213
EuiCodeBlock,
1314
EuiFlexGroup,
@@ -54,7 +55,7 @@ export const AgentPolicyYamlFlyout = memo<{ policyId: string; onClose: () => voi
5455
</EuiCallOut>
5556
) : (
5657
<EuiCodeBlock language="yaml" isCopyable fontSize="m" whiteSpace="pre">
57-
{fullAgentPolicyToYaml(yamlData!.item)}
58+
{fullAgentPolicyToYaml(yamlData!.item, safeDump)}
5859
</EuiCodeBlock>
5960
);
6061

x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
} from '@elastic/eui';
2424
import type { EuiStepProps } from '@elastic/eui/src/components/steps/step';
2525
import type { ApplicationStart } from 'kibana/public';
26+
import { safeLoad } from 'js-yaml';
2627

2728
import { toMountPoint } from '../../../../../../../../../src/plugins/kibana_react/public';
2829
import type {
@@ -191,7 +192,8 @@ export const CreatePackagePolicyPage: React.FunctionComponent = () => {
191192
if (packageInfo) {
192193
const newValidationResult = validatePackagePolicy(
193194
newPackagePolicy || packagePolicy,
194-
packageInfo
195+
packageInfo,
196+
safeLoad
195197
);
196198
setValidationResults(newValidationResult);
197199
// eslint-disable-next-line no-console

x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/services/has_invalid_but_required_var.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
* 2.0.
66
*/
77

8+
import { safeLoad } from 'js-yaml';
9+
810
import type { PackagePolicyConfigRecord, RegistryVarsEntry } from '../../../../types';
911

1012
import { validatePackagePolicyConfig } from './';
@@ -25,7 +27,8 @@ export const hasInvalidButRequiredVar = (
2527
validatePackagePolicyConfig(
2628
packagePolicyVars[registryVar.name],
2729
registryVar,
28-
registryVar.name
30+
registryVar.name,
31+
safeLoad
2932
)?.length)
3033
)
3134
)

x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/index.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import React, { useState, useEffect, useCallback, useMemo, memo } from 'react';
99
import { useRouteMatch } from 'react-router-dom';
1010
import { i18n } from '@kbn/i18n';
1111
import { FormattedMessage } from '@kbn/i18n/react';
12+
import { safeLoad } from 'js-yaml';
1213
import {
1314
EuiButtonEmpty,
1415
EuiButton,
@@ -201,7 +202,9 @@ export const EditPackagePolicyForm = memo<{
201202

202203
if (packageData?.response) {
203204
setPackageInfo(packageData.response);
204-
setValidationResults(validatePackagePolicy(newPackagePolicy, packageData.response));
205+
setValidationResults(
206+
validatePackagePolicy(newPackagePolicy, packageData.response, safeLoad)
207+
);
205208
setFormState('VALID');
206209
}
207210
}
@@ -239,7 +242,8 @@ export const EditPackagePolicyForm = memo<{
239242
if (packageInfo) {
240243
const newValidationResult = validatePackagePolicy(
241244
newPackagePolicy || packagePolicy,
242-
packageInfo
245+
packageInfo,
246+
safeLoad
243247
);
244248
setValidationResults(newValidationResult);
245249
// eslint-disable-next-line no-console

x-pack/plugins/fleet/public/components/agent_enrollment_flyout/standalone_instructions.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
import type { EuiContainedStepProps } from '@elastic/eui/src/components/steps/steps';
2222
import { i18n } from '@kbn/i18n';
2323
import { FormattedMessage } from '@kbn/i18n/react';
24+
import { safeDump } from 'js-yaml';
2425

2526
import { useStartServices, useLink, sendGetOneAgentPolicyFull } from '../../hooks';
2627
import { fullAgentPolicyToYaml, agentPolicyRouteService } from '../../services';
@@ -71,7 +72,7 @@ export const StandaloneInstructions = React.memo<Props>(({ agentPolicy, agentPol
7172
fetchFullPolicy();
7273
}, [selectedPolicyId, notifications.toasts]);
7374

74-
const yaml = useMemo(() => fullAgentPolicyToYaml(fullAgentPolicy), [fullAgentPolicy]);
75+
const yaml = useMemo(() => fullAgentPolicyToYaml(fullAgentPolicy, safeDump), [fullAgentPolicy]);
7576
const steps = [
7677
DownloadStep(),
7778
!agentPolicy

x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import type { TypeOf } from '@kbn/config-schema';
99
import type { RequestHandler, ResponseHeaders } from 'src/core/server';
1010
import bluebird from 'bluebird';
11+
import { safeDump } from 'js-yaml';
1112

1213
import { fullAgentPolicyToYaml } from '../../../common/services';
1314
import { appContextService, agentPolicyService, packagePolicyService } from '../../services';
@@ -269,7 +270,7 @@ export const downloadFullAgentPolicy: RequestHandler<
269270
standalone: request.query.standalone === true,
270271
});
271272
if (fullAgentPolicy) {
272-
const body = fullAgentPolicyToYaml(fullAgentPolicy);
273+
const body = fullAgentPolicyToYaml(fullAgentPolicy, safeDump);
273274
const headers: ResponseHeaders = {
274275
'content-type': 'text/x-yaml',
275276
'content-disposition': `attachment; filename="elastic-agent.yml"`,

0 commit comments

Comments
 (0)