[Fleet] Fix package policy validation (#123153)

This commit is contained in:
Nicolas Chaulet 2022-01-18 07:58:05 -05:00 committed by GitHub
parent c1b98ba7fb
commit e721b2b8bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 26 deletions

View file

@ -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;
@ -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') {
@ -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',

View file

@ -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
@ -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

View file

@ -46,7 +46,7 @@ export const PackagePolicyInputVarField: React.FunctionComponent<{
if (multi) {
return (
<MultiTextInput
value={value}
value={value ?? []}
onChange={onChange}
onBlur={() => setIsDirty(true)}
isDisabled={frozen}