diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 161c4a5114b41..4a0070e9765e2 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -24716,6 +24716,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -25815,6 +25820,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -26696,6 +26706,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -27556,6 +27571,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -28654,6 +28674,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -29627,6 +29652,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -31959,6 +31989,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -48525,6 +48560,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -49071,6 +49111,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -49639,6 +49684,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -50236,6 +50286,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -50882,6 +50937,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -51432,6 +51492,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -51996,6 +52061,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -52937,6 +53007,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -53441,6 +53516,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 70e9af2f69863..46344e50cb002 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -27291,6 +27291,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -28390,6 +28395,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -29271,6 +29281,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -30131,6 +30146,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -31229,6 +31249,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -32202,6 +32227,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -34534,6 +34564,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -51100,6 +51135,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -51646,6 +51686,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -52214,6 +52259,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -52811,6 +52861,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -53457,6 +53512,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -54007,6 +54067,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -54571,6 +54636,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -55512,6 +55582,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false @@ -56016,6 +56091,11 @@ paths: type: array type: type: string + var_group_selections: + additionalProperties: + type: string + description: Variable group selections. Maps var_group name to the selected option name within that group. + type: object vars: additionalProperties: additionalProperties: false diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/epm.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/epm.ts index f23c14bbf1433..167cd07841bb5 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/epm.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/epm.ts @@ -270,6 +270,7 @@ export enum RegistryPolicyTemplateKeys { configuration_links = 'configuration_links', fips_compatible = 'fips_compatible', dynamic_signal_types = 'dynamic_signal_types', + var_groups = 'var_groups', deprecated = 'deprecated', } interface BaseTemplate { @@ -298,6 +299,7 @@ export interface RegistryPolicyInputOnlyTemplate extends BaseTemplate { [RegistryPolicyTemplateKeys.template_paths]?: string[]; [RegistryPolicyTemplateKeys.required_vars]?: RegistryRequiredVars; [RegistryPolicyTemplateKeys.vars]?: RegistryVarsEntry[]; + [RegistryPolicyTemplateKeys.var_groups]?: RegistryVarGroup[]; [RegistryPolicyTemplateKeys.dynamic_signal_types]?: boolean; } @@ -315,6 +317,7 @@ export enum RegistryInputKeys { input_group = 'input_group', required_vars = 'required_vars', vars = 'vars', + var_groups = 'var_groups', deployment_modes = 'deployment_modes', hide_in_var_group_options = 'hide_in_var_group_options', deprecated = 'deprecated', @@ -333,6 +336,7 @@ export interface RegistryInput { [RegistryInputKeys.input_group]?: RegistryInputGroup; [RegistryInputKeys.required_vars]?: RegistryRequiredVars; [RegistryInputKeys.vars]?: RegistryVarsEntry[]; + [RegistryInputKeys.var_groups]?: RegistryVarGroup[]; [RegistryInputKeys.deployment_modes]?: string[]; [RegistryInputKeys.hide_in_var_group_options]?: Record; [RegistryInputKeys.deprecated]?: DeprecationInfo; diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/package_policy.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/package_policy.ts index 1f9477e03a533..e811e2f3edf94 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/package_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/package_policy.ts @@ -66,6 +66,7 @@ export interface NewPackagePolicyInput { enabled: boolean; keep_enabled?: boolean; vars?: PackagePolicyConfigRecord; + var_group_selections?: Record; config?: PackagePolicyConfigRecord; streams: NewPackagePolicyInputStream[]; deprecated?: DeprecationInfo; diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/package_policy_schema.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/package_policy_schema.ts index d1dd32512440f..b91ebed5068d3 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/package_policy_schema.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/package_policy_schema.ts @@ -100,6 +100,7 @@ export const PackagePolicyInputsSchema = { enabled: schema.boolean(), keep_enabled: schema.maybe(schema.boolean()), vars: schema.maybe(ConfigRecordSchema), + var_group_selections: VarGroupSelectionsSchema, config: schema.maybe(ConfigRecordSchema), streams: schema.arrayOf(schema.object(PackagePolicyStreamsSchema), { maxSize: 100 }), deprecated: schema.maybe(DeprecationInfoSchema), diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_config.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_config.tsx index fae42f9849a71..b062abca2b64e 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_config.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_config.tsx @@ -21,12 +21,17 @@ import { import type { NewPackagePolicyInput, NewPackagePolicyInputStream, + RegistryVarGroup, RegistryVarsEntry, } from '../../../../../../types'; import type { PackagePolicyConfigValidationResults } from '../../../services'; import { isAdvancedVar, validationHasErrors } from '../../../services'; +import { shouldShowVar } from '../../../services/var_group_helpers'; +import type { VarGroupSelection } from '../../../services/var_group_helpers'; +import { useAgentless } from '../../../single_page_layout/hooks/setup_technology'; import { PackagePolicyInputVarField } from './package_policy_input_var_field'; +import { VarGroupSelector } from './var_group_selector'; export interface StreamAdvancedVarsConfig { vars: RegistryVarsEntry[]; @@ -43,6 +48,9 @@ export const PackagePolicyInputConfig: React.FunctionComponent<{ inputValidationResults: PackagePolicyConfigValidationResults; forceShowErrors?: boolean; isEditPage?: boolean; + varGroups?: RegistryVarGroup[]; + varGroupSelections?: VarGroupSelection; + onVarGroupSelectionChange?: (groupName: string, optionName: string) => void; showDescriptionColumn?: boolean; streamAdvancedVars?: StreamAdvancedVarsConfig; }> = memo( @@ -54,13 +62,17 @@ export const PackagePolicyInputConfig: React.FunctionComponent<{ inputValidationResults, forceShowErrors, isEditPage = false, + varGroups, + varGroupSelections = {}, + onVarGroupSelectionChange, showDescriptionColumn = true, streamAdvancedVars, }) => { // Showing advanced options toggle state const [isShowingAdvanced, setIsShowingAdvanced] = useState(false); + const { isAgentlessEnabled } = useAgentless(); - // Split vars into required and advanced, filtering out deprecated vars on new installations + // Split vars into required and advanced, filtering by var_group visibility and deprecated vars const [requiredVars, advancedVars] = useMemo(() => { const _advancedVars: RegistryVarsEntry[] = []; const _requiredVars: RegistryVarsEntry[] = []; @@ -68,14 +80,21 @@ export const PackagePolicyInputConfig: React.FunctionComponent<{ if (!isEditPage && !!varDef.deprecated) { return; } - if (isAdvancedVar(varDef)) { + if ( + varGroups && + varGroups.length > 0 && + !shouldShowVar(varDef.name, varGroups, varGroupSelections) + ) { + return; + } + if (isAdvancedVar(varDef, varGroups, varGroupSelections)) { _advancedVars.push(varDef); } else { _requiredVars.push(varDef); } }); return [_requiredVars, _advancedVars]; - }, [packageInputVars, isEditPage]); + }, [packageInputVars, varGroups, varGroupSelections, isEditPage]); const allAdvancedVars = useMemo(() => { if (!streamAdvancedVars?.vars.length) { @@ -170,6 +189,16 @@ export const PackagePolicyInputConfig: React.FunctionComponent<{ ) : null} + {varGroups?.map((varGroup) => ( + + {})} + isAgentlessEnabled={isAgentlessEnabled} + /> + + ))} {requiredVars.map((varDef) => { const { name: varName, type: varType } = varDef; diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_panel.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_panel.tsx index fe2e5164ef4c7..1212f406ded8a 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_panel.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_panel.tsx @@ -39,7 +39,7 @@ import { useAgentless } from '../../../single_page_layout/hooks/setup_technology import type { StreamAdvancedVarsConfig } from './package_policy_input_config'; import { PackagePolicyInputConfig } from './package_policy_input_config'; import { PackagePolicyInputStreamConfig } from './package_policy_input_stream'; -import { useDataStreamId } from './hooks'; +import { useDataStreamId, useVarGroupSelections } from './hooks'; const ShortenedHorizontalRule = styled(EuiHorizontalRule)` &&& { @@ -131,6 +131,18 @@ export const PackagePolicyInputPanel: React.FunctionComponent<{ const theme = useEuiTheme(); const defaultDataStreamId = useDataStreamId(); const { isAgentlessEnabled } = useAgentless(); + + const inputVarGroups = packageInput.var_groups?.length ? packageInput.var_groups : undefined; + + const { + selections: inputVarGroupSelections, + handleSelectionChange: handleInputVarGroupSelectionChange, + } = useVarGroupSelections({ + varGroups: inputVarGroups, + savedSelections: packagePolicyInput.var_group_selections, + isAgentlessEnabled, + onSelectionsChange: (update) => updatePackagePolicyInput(update), + }); // Showing streams toggle state const [isShowingStreams, setIsShowingStreams] = useState( () => @@ -450,6 +462,9 @@ export const PackagePolicyInputPanel: React.FunctionComponent<{ inputValidationResults={inputValidationResults} forceShowErrors={forceShowErrors} isEditPage={isEditPage} + varGroups={inputVarGroups} + varGroupSelections={inputVarGroupSelections} + onVarGroupSelectionChange={handleInputVarGroupSelectionChange} showDescriptionColumn={!isSingleInputAndStreams} streamAdvancedVars={consolidatedStreamAdvancedVars} />