Skip to content

Commit

Permalink
[Fleet] Fix package policy validation (elastic#123153) (elastic#123223)
Browse files Browse the repository at this point in the history
(cherry picked from commit e721b2b)

Co-authored-by: Nicolas Chaulet <nicolas.chaulet@elastic.co>
  • Loading branch information
kibanamachine and nchaulet authored Jan 18, 2022
1 parent 5042ef3 commit fd2c459
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 26 deletions.
39 changes: 16 additions & 23 deletions x-pack/plugins/fleet/common/services/validate_package_policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,23 +162,17 @@ export const validatePackagePolicy = (
const streamVarDefs =
streamVarDefsByDatasetAndInput[`${stream.data_stream.dataset}-${input.type}`];

// Validate stream-level config fields
if (stream.vars) {
streamValidationResults.vars = Object.entries(stream.vars).reduce(
(results, [name, configEntry]) => {
results[name] =
streamVarDefs && streamVarDefs[name] && input.enabled && stream.enabled
? validatePackagePolicyConfig(
configEntry,
streamVarDefs[name],
name,
safeLoadYaml
)
: null;
return results;
},
{} as ValidationEntry
);
if (streamVarDefs && Object.keys(streamVarDefs).length) {
streamValidationResults.vars = Object.keys(streamVarDefs).reduce((results, name) => {
const configEntry = stream?.vars?.[name];

results[name] =
input.enabled && stream.enabled
? validatePackagePolicyConfig(configEntry, streamVarDefs[name], name, safeLoadYaml)
: null;

return results;
}, {} as ValidationEntry);
}

inputValidationResults.streams![stream.data_stream.dataset] = streamValidationResults;
Expand All @@ -200,13 +194,15 @@ export const validatePackagePolicy = (
};

export const validatePackagePolicyConfig = (
configEntry: PackagePolicyConfigRecordEntry,
configEntry: PackagePolicyConfigRecordEntry | undefined,
varDef: RegistryVarsEntry,
varName: string,
safeLoadYaml: (yaml: string) => any
): string[] | null => {
const errors = [];
const { value } = configEntry;

const value = configEntry?.value;

let parsedValue: any = value;

if (typeof value === 'string') {
Expand Down Expand Up @@ -253,10 +249,7 @@ export const validatePackagePolicyConfig = (
})
);
}
if (
varDef.required &&
(!parsedValue || (Array.isArray(parsedValue) && parsedValue.length === 0))
) {
if (varDef.required && Array.isArray(parsedValue) && parsedValue.length === 0) {
errors.push(
i18n.translate('xpack.fleet.packagePolicyValidation.requiredErrorMessage', {
defaultMessage: '{fieldName} is required',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,10 @@ export const PackagePolicyInputStreamConfig: React.FunctionComponent<{
<EuiFlexGroup direction="column" gutterSize="m">
{requiredVars.map((varDef) => {
const { name: varName, type: varType } = varDef;
const { value, frozen } = packagePolicyInputStream.vars![varName];
const varConfigEntry = packagePolicyInputStream.vars?.[varName];
const value = varConfigEntry?.value;
const frozen = varConfigEntry?.frozen ?? false;

return (
<EuiFlexItem key={varName}>
<PackagePolicyInputVarField
Expand Down Expand Up @@ -164,7 +167,8 @@ export const PackagePolicyInputStreamConfig: React.FunctionComponent<{
{isShowingAdvanced
? advancedVars.map((varDef) => {
const { name: varName, type: varType } = varDef;
const value = packagePolicyInputStream.vars![varName].value;
const value = packagePolicyInputStream.vars?.[varName]?.value;

return (
<EuiFlexItem key={varName}>
<PackagePolicyInputVarField
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export const PackagePolicyInputVarField: React.FunctionComponent<{
if (multi) {
return (
<MultiTextInput
value={value}
value={value ?? []}
onChange={onChange}
onBlur={() => setIsDirty(true)}
isDisabled={frozen}
Expand Down

0 comments on commit fd2c459

Please sign in to comment.