From 03b4fcc6efeb5932c6232f1429f740301618cbd2 Mon Sep 17 00:00:00 2001 From: seanrathier Date: Wed, 15 Jan 2025 12:07:02 -0500 Subject: [PATCH] [Cloud Security] Default CSPM integration to use Agentless as the setup technology. (#205965) (cherry picked from commit c30212f9c0d091bd2564592ac21a6ef2f30368c8) # Conflicts: # x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts --- .../fleet/common/constants/agentless.ts | 4 + .../single_page_layout/hooks/form.tsx | 7 - .../hooks/setup_technology.test.ts | 85 ++++++- .../hooks/setup_technology.ts | 233 ++++++++---------- .../single_page_layout/index.test.tsx | 24 +- .../single_page_layout/index.tsx | 20 +- .../fleet/public/types/ui_extensions.ts | 1 + .../fleet_extensions/policy_template_form.tsx | 8 + .../use_setup_technology.test.ts | 5 +- .../use_setup_technology.ts | 12 +- 10 files changed, 235 insertions(+), 164 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts b/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts index cbc7e85e563c1..49ddccd16c5e2 100644 --- a/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts +++ b/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts @@ -5,6 +5,10 @@ * 2.0. */ +import type { MonitoringType } from '../types'; + +export const AGENTLESS_AGENT_POLICY_INACTIVITY_TIMEOUT = 3600; +export const AGENTLESS_AGENT_POLICY_MONITORING: MonitoringType = ['logs', 'metrics']; export const AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION = 'organization'; export const AGENTLESS_GLOBAL_TAG_NAME_DIVISION = 'division'; export const AGENTLESS_GLOBAL_TAG_NAME_TEAM = 'team'; diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx index 69a73c8a2e87c..5ed4cabd9e4bd 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/form.tsx @@ -191,9 +191,6 @@ export function useOnSubmit({ if (packageInfo) { setHasAgentPolicyError(false); } - - // eslint-disable-next-line no-console - console.debug('Agent policy updated', updatedAgentPolicies); }, [packageInfo, agentPolicies] ); @@ -208,8 +205,6 @@ export function useOnSubmit({ spaceSettings ); setValidationResults(newValidationResult); - // eslint-disable-next-line no-console - console.debug('Package policy validation results', newValidationResult); return newValidationResult; } @@ -225,8 +220,6 @@ export function useOnSubmit({ }; setPackagePolicy(newPackagePolicy); - // eslint-disable-next-line no-console - console.debug('Package policy updated', newPackagePolicy); const newValidationResults = updatePackagePolicyValidation(newPackagePolicy); const hasPackage = newPackagePolicy.package; const hasValidationErrors = newValidationResults diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts index 1564d934b960e..613418cda5ea9 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts @@ -246,12 +246,11 @@ describe('useSetupTechnology', () => { }) ); - expect(generateNewAgentPolicyWithDefaults).toHaveBeenCalled(); - act(() => { result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { + expect(generateNewAgentPolicyWithDefaults).toHaveBeenCalled(); expect(updatePackagePolicyMock).toHaveBeenCalledWith({ supports_agentless: true }); expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENTLESS); expect(setNewAgentPolicy).toHaveBeenCalledWith({ @@ -290,13 +289,12 @@ describe('useSetupTechnology', () => { initialProps, }); - expect(generateNewAgentPolicyWithDefaults).toHaveBeenCalled(); - act(() => { result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENTLESS); + expect(generateNewAgentPolicyWithDefaults).toHaveBeenCalled(); expect(updatePackagePolicyMock).toHaveBeenCalledWith({ supports_agentless: true }); expect(setNewAgentPolicy).toHaveBeenCalledWith({ inactivity_timeout: 3600, @@ -450,6 +448,7 @@ describe('useSetupTechnology', () => { updateAgentPolicies: updateAgentPoliciesMock, setSelectedPolicyTab: setSelectedPolicyTabMock, packagePolicy: packagePolicyMock, + packageInfo: packageInfoMock, updatePackagePolicy: updatePackagePolicyMock, }) ); @@ -469,6 +468,11 @@ describe('useSetupTechnology', () => { name: 'Agentless policy for endpoint-1', supports_agentless: true, inactivity_timeout: 3600, + global_data_tags: [ + { name: 'organization', value: 'org' }, + { name: 'division', value: 'div' }, + { name: 'team', value: 'team' }, + ], }); expect(updatePackagePolicyMock).toHaveBeenCalledWith({ supports_agentless: true }); }); @@ -512,7 +516,7 @@ describe('useSetupTechnology', () => { ); act(() => { - result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS, 'cspm'); + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { @@ -544,6 +548,34 @@ describe('useSetupTechnology', () => { }, }); + const packageInfoWithoutGlobalDataTags = { + policy_templates: [ + { + name: 'cspm', + title: 'Template 1', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + agentless: { + enabled: true, + }, + }, + }, + { + name: 'not-cspm', + title: 'Template 2', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + }, + }, + ] as RegistryPolicyTemplate[], + } as PackageInfo; + const { result } = renderHook(() => useSetupTechnology({ setNewAgentPolicy, @@ -551,16 +583,13 @@ describe('useSetupTechnology', () => { updateAgentPolicies: updateAgentPoliciesMock, setSelectedPolicyTab: setSelectedPolicyTabMock, packagePolicy: packagePolicyMock, - packageInfo: packageInfoMock, + packageInfo: packageInfoWithoutGlobalDataTags, updatePackagePolicy: updatePackagePolicyMock, }) ); act(() => { - result.current.handleSetupTechnologyChange( - SetupTechnology.AGENTLESS, - 'never-gonna-give-you-up' - ); + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { @@ -594,6 +623,34 @@ describe('useSetupTechnology', () => { }, }); + const packageInfoWithoutGlobalDataTags = { + policy_templates: [ + { + name: 'cspm', + title: 'Template 1', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + agentless: { + enabled: true, + }, + }, + }, + { + name: 'not-cspm', + title: 'Template 2', + description: '', + deployment_modes: { + default: { + enabled: true, + }, + }, + }, + ] as RegistryPolicyTemplate[], + } as PackageInfo; + const { result } = renderHook(() => useSetupTechnology({ setNewAgentPolicy, @@ -601,7 +658,7 @@ describe('useSetupTechnology', () => { updateAgentPolicies: updateAgentPoliciesMock, setSelectedPolicyTab: setSelectedPolicyTabMock, packagePolicy: packagePolicyMock, - packageInfo: packageInfoMock, + packageInfo: packageInfoWithoutGlobalDataTags, updatePackagePolicy: updatePackagePolicyMock, }) ); @@ -653,7 +710,7 @@ describe('useSetupTechnology', () => { ); act(() => { - result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS, 'cspm'); + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { @@ -700,10 +757,11 @@ describe('useSetupTechnology', () => { ); act(() => { - result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS, 'cspm'); + result.current.handleSetupTechnologyChange(SetupTechnology.AGENTLESS); }); await waitFor(() => { + expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENTLESS); expect(setNewAgentPolicy).toHaveBeenCalledWith( expect.objectContaining({ supports_agentless: true, @@ -721,6 +779,7 @@ describe('useSetupTechnology', () => { }); await waitFor(() => { + expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENT_BASED); expect(setNewAgentPolicy).toHaveBeenCalledWith(newAgentPolicyMock); expect(setNewAgentPolicy).not.toHaveBeenCalledWith({ global_data_tags: [ diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts index bf2765232e9d8..fe5e5ca0e03f2 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { useCallback, useEffect, useRef, useState } from 'react'; +import { useCallback, useMemo, useRef, useState } from 'react'; import { useConfig } from '../../../../../hooks'; import { generateNewAgentPolicyWithDefaults } from '../../../../../../../../common/services/generate_new_agent_policy'; @@ -22,10 +22,13 @@ import { AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION, AGENTLESS_GLOBAL_TAG_NAME_DIVISION, AGENTLESS_GLOBAL_TAG_NAME_TEAM, + AGENTLESS_AGENT_POLICY_INACTIVITY_TIMEOUT, + AGENTLESS_AGENT_POLICY_MONITORING, } from '../../../../../../../../common/constants'; import { isAgentlessIntegration as isAgentlessIntegrationFn, getAgentlessAgentPolicyNameFromPackagePolicyName, + isOnlyAgentlessIntegration, } from '../../../../../../../../common/services/agentless_policy_helper'; export const useAgentless = () => { @@ -80,146 +83,126 @@ export function useSetupTechnology({ const { isAgentlessEnabled } = useAgentless(); // this is a placeholder for the new agent-BASED policy that will be used when the user switches from agentless to agent-based and back - const newAgentBasedPolicy = useRef(newAgentPolicy); - const [selectedSetupTechnology, setSelectedSetupTechnology] = useState( - SetupTechnology.AGENT_BASED - ); - const [newAgentlessPolicy, setNewAgentlessPolicy] = useState(() => { - const agentless = generateNewAgentPolicyWithDefaults({ - inactivity_timeout: 3600, - supports_agentless: true, - monitoring_enabled: ['logs', 'metrics'], - }); - return agentless; - }); - - useEffect(() => { - if (isEditPage && agentPolicies && agentPolicies.some((policy) => policy.supports_agentless)) { - setSelectedSetupTechnology(SetupTechnology.AGENTLESS); - return; - } - if (isAgentlessEnabled && selectedSetupTechnology === SetupTechnology.AGENTLESS) { - const nextNewAgentlessPolicy = { - ...newAgentlessPolicy, - name: getAgentlessAgentPolicyNameFromPackagePolicyName(packagePolicy.name), - }; - if (!newAgentlessPolicy.name || nextNewAgentlessPolicy.name !== newAgentlessPolicy.name) { - setNewAgentlessPolicy(nextNewAgentlessPolicy); - setNewAgentPolicy(nextNewAgentlessPolicy as NewAgentPolicy); - updateAgentPolicies([nextNewAgentlessPolicy] as AgentPolicy[]); - } - } - if ( - selectedSetupTechnology === SetupTechnology.AGENTLESS && - !packagePolicy.supports_agentless - ) { - updatePackagePolicy({ - supports_agentless: true, - }); - } else if ( - selectedSetupTechnology !== SetupTechnology.AGENTLESS && - packagePolicy.supports_agentless - ) { - updatePackagePolicy({ - supports_agentless: false, - }); - } - }, [ - isAgentlessEnabled, - isEditPage, - newAgentlessPolicy, - packagePolicy.name, - packagePolicy.supports_agentless, - selectedSetupTechnology, - updateAgentPolicies, - setNewAgentPolicy, - agentPolicies, - setSelectedSetupTechnology, - updatePackagePolicy, - ]); + const orginalAgentPolicyRef = useRef({ ...newAgentPolicy }); + const [currentAgentPolicy, setCurrentAgentPolicy] = useState(newAgentPolicy); + const defaultSetupTechnology = useMemo(() => { + return isOnlyAgentlessIntegration(packageInfo) || isAgentlessSetupDefault(packageInfo) + ? SetupTechnology.AGENTLESS + : SetupTechnology.AGENT_BASED; + }, [packageInfo]); + const [selectedSetupTechnology, setSelectedSetupTechnology] = + useState(defaultSetupTechnology); + + const agentlessPolicyName = getAgentlessAgentPolicyNameFromPackagePolicyName(packagePolicy.name); const handleSetupTechnologyChange = useCallback( - (setupTechnology: SetupTechnology, policyTemplateName?: string) => { + (setupTechnology: SetupTechnology) => { if (!isAgentlessEnabled || setupTechnology === selectedSetupTechnology) { return; } - - if (setupTechnology === SetupTechnology.AGENTLESS) { - if (isAgentlessEnabled) { - const agentlessPolicy = { - ...newAgentlessPolicy, - ...getAdditionalAgentlessPolicyInfo(policyTemplateName, packageInfo), - } as NewAgentPolicy; - - setNewAgentPolicy(agentlessPolicy); - setNewAgentlessPolicy(agentlessPolicy); - setSelectedPolicyTab(SelectedPolicyTab.NEW); - updateAgentPolicies([agentlessPolicy] as AgentPolicy[]); - } - updatePackagePolicy({ - supports_agentless: true, - }); - } else if (setupTechnology === SetupTechnology.AGENT_BASED) { - setNewAgentPolicy({ - ...newAgentBasedPolicy.current, - supports_agentless: false, - }); - updatePackagePolicy({ - supports_agentless: false, - }); - setSelectedPolicyTab(SelectedPolicyTab.NEW); - updateAgentPolicies([newAgentBasedPolicy.current] as AgentPolicy[]); - } + setSelectedPolicyTab(SelectedPolicyTab.NEW); setSelectedSetupTechnology(setupTechnology); }, - [ - isAgentlessEnabled, - selectedSetupTechnology, - updatePackagePolicy, - setNewAgentPolicy, - newAgentlessPolicy, - packageInfo, - setSelectedPolicyTab, - updateAgentPolicies, - ] + [isAgentlessEnabled, selectedSetupTechnology, setSelectedPolicyTab, setSelectedSetupTechnology] ); + if ( + isEditPage && + agentPolicies && + agentPolicies.some((policy) => policy.supports_agentless) && + selectedSetupTechnology === SetupTechnology.AGENT_BASED + ) { + setSelectedSetupTechnology(SetupTechnology.AGENTLESS); + } + + if ( + !isEditPage && + packagePolicy && + isAgentlessEnabled && + selectedSetupTechnology === SetupTechnology.AGENTLESS && + (!currentAgentPolicy.supports_agentless || agentlessPolicyName !== currentAgentPolicy.name) + ) { + const nextNewAgentlessPolicy = { + ...generateNewAgentPolicyWithDefaults({ + inactivity_timeout: AGENTLESS_AGENT_POLICY_INACTIVITY_TIMEOUT, + supports_agentless: true, + monitoring_enabled: AGENTLESS_AGENT_POLICY_MONITORING, + }), + name: agentlessPolicyName, + global_data_tags: getGlobaDataTags(packageInfo), + }; + setCurrentAgentPolicy(nextNewAgentlessPolicy); + setNewAgentPolicy(nextNewAgentlessPolicy as NewAgentPolicy); + updateAgentPolicies([nextNewAgentlessPolicy] as AgentPolicy[]); + updatePackagePolicy({ + supports_agentless: true, + }); + } + + if ( + !isEditPage && + selectedSetupTechnology === SetupTechnology.AGENT_BASED && + (currentAgentPolicy.supports_agentless || packagePolicy.supports_agentless) + ) { + const nextNewAgentlessPolicy = { + ...orginalAgentPolicyRef.current, + supports_agentless: false, + }; + setCurrentAgentPolicy(nextNewAgentlessPolicy); + setNewAgentPolicy(nextNewAgentlessPolicy); + updateAgentPolicies([nextNewAgentlessPolicy] as AgentPolicy[]); + updatePackagePolicy({ + supports_agentless: false, + }); + } + return { handleSetupTechnologyChange, selectedSetupTechnology, + defaultSetupTechnology, }; } -const getAdditionalAgentlessPolicyInfo = ( - policyTemplateName?: string, - packageInfo?: PackageInfo -) => { - if (!policyTemplateName || !packageInfo) { - return {}; +const isAgentlessSetupDefault = (packageInfo?: PackageInfo) => { + // TODO: https://github.com/elastic/kibana/issues/205761 + // placeholder for the logic to determine if the agentless setup is the default + return false; +}; + +const getGlobaDataTags = (packageInfo?: PackageInfo) => { + if ( + !packageInfo?.policy_templates && + !packageInfo?.policy_templates?.some((policy) => policy.deployment_modes) + ) { + return undefined; } - const agentlessPolicyTemplate = policyTemplateName - ? packageInfo?.policy_templates?.find((policy) => policy.name === policyTemplateName) - : undefined; + const agentlessPolicyTemplate = packageInfo.policy_templates.find( + (policy) => policy.deployment_modes + ); + // assumes that all the policy templates agentless deployments modes indentify have the same organization, division and team const agentlessInfo = agentlessPolicyTemplate?.deployment_modes?.agentless; - return !agentlessInfo - ? {} - : { - global_data_tags: agentlessInfo - ? [ - { - name: AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION, - value: agentlessInfo.organization, - }, - { - name: AGENTLESS_GLOBAL_TAG_NAME_DIVISION, - value: agentlessInfo.division, - }, - { - name: AGENTLESS_GLOBAL_TAG_NAME_TEAM, - value: agentlessInfo.team, - }, - ] - : [], - }; + if ( + agentlessInfo === undefined || + !agentlessInfo.organization || + !agentlessInfo.division || + !agentlessInfo.team + ) { + return undefined; + } + + return [ + { + name: AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION, + value: agentlessInfo.organization, + }, + { + name: AGENTLESS_GLOBAL_TAG_NAME_DIVISION, + value: agentlessInfo.division, + }, + { + name: AGENTLESS_GLOBAL_TAG_NAME_TEAM, + value: agentlessInfo.team, + }, + ]; }; diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx index 9515654c9311e..078dbe91a34ea 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx @@ -83,7 +83,13 @@ jest.mock('../../../../hooks', () => { data: { item: {} }, }), sendCreatePackagePolicy: jest.fn().mockResolvedValue({ - data: { item: { id: 'policy-1', inputs: [], policy_ids: ['agent-policy-1'] } }, + data: { + item: { + id: 'policy-1', + inputs: [], + policy_ids: ['agent-policy-1'], + }, + }, }), sendCreateAgentPolicy: jest.fn().mockResolvedValue({ data: { item: { id: 'agent-policy-2', name: 'Agent policy 2', namespace: 'default' } }, @@ -190,7 +196,16 @@ describe('When on the package policy create page', () => { }, ], multiple: true, - deployment_modes: { agentless: { enabled: options?.agentlessEnabled } }, + deployment_modes: options?.agentlessEnabled + ? { + agentless: { + enabled: true, + organization: 'org', + division: 'division', + team: 'team', + }, + } + : { agentless: { enabled: false } }, }, ], data_streams: [ @@ -740,8 +755,13 @@ describe('When on the package policy create page', () => { }); test('should create agentless agent policy and package policy when in cloud and agentless API url is set', async () => { + await waitFor(() => { + expect(renderResult.getByTestId(SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ)).toBeInTheDocument(); + }); + fireEvent.click(renderResult.getByTestId(SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ)); fireEvent.click(renderResult.getAllByText('Agentless')[0]); + await act(async () => { fireEvent.click(renderResult.getByText(/Save and continue/).closest('button')!); }); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx index d9a9dd29d5b71..19f9fe0c44cf4 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.tsx @@ -351,15 +351,16 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ ); } const { isAgentlessIntegration } = useAgentless(); - const { handleSetupTechnologyChange, selectedSetupTechnology } = useSetupTechnology({ - newAgentPolicy, - setNewAgentPolicy, - updateAgentPolicies, - updatePackagePolicy, - setSelectedPolicyTab, - packageInfo, - packagePolicy, - }); + const { handleSetupTechnologyChange, selectedSetupTechnology, defaultSetupTechnology } = + useSetupTechnology({ + newAgentPolicy, + setNewAgentPolicy, + updateAgentPolicies, + updatePackagePolicy, + setSelectedPolicyTab, + packageInfo, + packagePolicy, + }); const replaceStepConfigurePackagePolicy = replaceDefineStepView && packageInfo?.name ? ( @@ -376,6 +377,7 @@ export const CreatePackagePolicySinglePage: CreatePackagePolicyParams = ({ isEditPage={false} handleSetupTechnologyChange={handleSetupTechnologyChange} isAgentlessEnabled={isAgentlessIntegration(packageInfo)} + defaultSetupTechnology={defaultSetupTechnology} /> ) diff --git a/x-pack/platform/plugins/shared/fleet/public/types/ui_extensions.ts b/x-pack/platform/plugins/shared/fleet/public/types/ui_extensions.ts index 9e485f6f5ea9a..21e645771d523 100644 --- a/x-pack/platform/plugins/shared/fleet/public/types/ui_extensions.ts +++ b/x-pack/platform/plugins/shared/fleet/public/types/ui_extensions.ts @@ -45,6 +45,7 @@ export type PackagePolicyReplaceDefineStepExtensionComponentProps = ( packageInfo: PackageInfo; isAgentlessEnabled?: boolean; handleSetupTechnologyChange?: (setupTechnology: SetupTechnology) => void; + defaultSetupTechnology?: SetupTechnology; }; /** diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx index 8d6f7292928e9..40ce67f297057 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx @@ -669,6 +669,7 @@ export const CspPolicyTemplateForm = memo { const integrationParam = useParams<{ integration: CloudSecurityPolicyTemplate }>().integration; const integration = SUPPORTED_POLICY_TEMPLATES.includes(integrationParam) @@ -687,6 +688,7 @@ export const CspPolicyTemplateForm = memo { }); expect(result.current.setupTechnology).toBe(SetupTechnology.AGENTLESS); - expect(handleSetupTechnologyChangeMock).toHaveBeenCalledWith( - SetupTechnology.AGENTLESS, - inputPackage.policy_template - ); + expect(handleSetupTechnologyChangeMock).toHaveBeenCalledWith(SetupTechnology.AGENTLESS); }); }); diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts index 3f68fb87f2639..48b7fec879794 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts @@ -14,11 +14,13 @@ export const useSetupTechnology = ({ input, isAgentlessEnabled, handleSetupTechnologyChange, + defaultSetupTechnology, isEditPage, }: { input: NewPackagePolicyInput; isAgentlessEnabled?: boolean; - handleSetupTechnologyChange?: (value: SetupTechnology, policyTemplateName?: string) => void; + handleSetupTechnologyChange?: (value: SetupTechnology) => void; + defaultSetupTechnology?: SetupTechnology; isEditPage?: boolean; }) => { const isCspmAws = input.type === CLOUDBEAT_AWS; @@ -26,15 +28,17 @@ export const useSetupTechnology = ({ const isCspmAzure = input.type === CLOUDBEAT_AZURE; const isAgentlessSupportedForCloudProvider = isCspmAws || isCspmGcp || isCspmAzure; const isAgentlessAvailable = isAgentlessSupportedForCloudProvider && isAgentlessEnabled; - const defaultSetupTechnology = + const defaultEditSetupTechnology = isEditPage && isAgentlessAvailable ? SetupTechnology.AGENTLESS : SetupTechnology.AGENT_BASED; - const [setupTechnology, setSetupTechnology] = useState(defaultSetupTechnology); + const [setupTechnology, setSetupTechnology] = useState( + defaultSetupTechnology || defaultEditSetupTechnology + ); const updateSetupTechnology = (value: SetupTechnology) => { setSetupTechnology(value); if (handleSetupTechnologyChange) { - handleSetupTechnologyChange(value, input.policy_template); + handleSetupTechnologyChange(value); } };