diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 16dde0fe5e140..5e11cd588cbef 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -34170,6 +34170,71 @@ paths: x-metaTags: - content: Kibana, Elastic Cloud Serverless name: product_name + /api/fleet/agents/{agentId}/effective_config: + get: + description: |- + **Spaces method and path for this operation:** + +
get /s/{space_id}/api/fleet/agents/{agentId}/effective_config
+ + Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information. + + Get an agent's effective config by ID.

[Required authorization] Route required privileges: fleet-agents-read. + operationId: get-fleet-agents-agentid-effective-config + parameters: + - description: The agent ID to get effective config of + in: path + name: agentId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + successResponse: + value: + effective_config: {} + schema: + additionalProperties: false + type: object + properties: + effective_config: {} + required: + - effective_config + description: 'OK: A successful request.' + '400': + content: + application/json: + examples: + badRequestResponse: + value: + message: Bad Request + schema: + additionalProperties: false + description: Generic Error + type: object + properties: + attributes: {} + error: + type: string + errorType: + type: string + message: + type: string + statusCode: + type: number + required: + - message + - attributes + description: A bad request. + summary: Get an agent's effective config + tags: + - Elastic Agents + x-metaTags: + - content: Kibana, Elastic Cloud Serverless + name: product_name /api/fleet/agents/{agentId}/migrate: post: description: |- diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index c9790aec8fbe0..fa36cf7426007 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -36745,6 +36745,71 @@ paths: x-metaTags: - content: Kibana name: product_name + /api/fleet/agents/{agentId}/effective_config: + get: + description: |- + **Spaces method and path for this operation:** + +
get /s/{space_id}/api/fleet/agents/{agentId}/effective_config
+ + Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information. + + Get an agent's effective config by ID.

[Required authorization] Route required privileges: fleet-agents-read. + operationId: get-fleet-agents-agentid-effective-config + parameters: + - description: The agent ID to get effective config of + in: path + name: agentId + required: true + schema: + type: string + responses: + '200': + content: + application/json: + examples: + successResponse: + value: + effective_config: {} + schema: + additionalProperties: false + type: object + properties: + effective_config: {} + required: + - effective_config + description: 'OK: A successful request.' + '400': + content: + application/json: + examples: + badRequestResponse: + value: + message: Bad Request + schema: + additionalProperties: false + description: Generic Error + type: object + properties: + attributes: {} + error: + type: string + errorType: + type: string + message: + type: string + statusCode: + type: number + required: + - message + - attributes + description: A bad request. + summary: Get an agent's effective config + tags: + - Elastic Agents + x-metaTags: + - content: Kibana + name: product_name /api/fleet/agents/{agentId}/migrate: post: description: |- diff --git a/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts b/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts index d6c8dcf141e7e..c15891f1e305a 100644 --- a/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts +++ b/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts @@ -29,7 +29,7 @@ const _allowedExperimentalValues = { enableVarGroups: false, // When enabled, var_groups from the package spec drive conditional variable visibility and input filtering. enableIntegrationInactivityAlerting: true, // When enabled, an inactivity monitoring alerting rule template is created on fresh integration package install. enableSimplifiedAgentlessUX: true, // When enabled, the agentless deployment mode will be simplified for single input/datastreams integrations. - enableOpAMP: false, // When enabled, OpAMP features will be available in the API and UI. + enableOpAMP: true, // When enabled, OpAMP features will be available in the API and UI. enableOTelVerifier: false, // When enabled, OTel-based cloud connector permission verification is active. enableResolveDependencies: false, // When enabled, the resolve dependencies step will be available during package installation. }; diff --git a/x-pack/platform/plugins/shared/fleet/cypress/e2e/fleet_agent_flyout.cy.ts b/x-pack/platform/plugins/shared/fleet/cypress/e2e/fleet_agent_flyout.cy.ts index 8f6987ab1d1d1..d32051efc24c1 100644 --- a/x-pack/platform/plugins/shared/fleet/cypress/e2e/fleet_agent_flyout.cy.ts +++ b/x-pack/platform/plugins/shared/fleet/cypress/e2e/fleet_agent_flyout.cy.ts @@ -5,14 +5,15 @@ * 2.0. */ -import { ADD_AGENT_BUTTON, AGENT_FLYOUT } from '../screens/fleet'; +import { API_VERSIONS } from '@kbn/fleet-plugin/common/constants'; + +import { ADD_AGENT_BUTTON, ADD_AGENT_MENU_BUTTON, AGENT_FLYOUT } from '../screens/fleet'; import { cleanupAgentPolicies, deleteAgentDocs } from '../tasks/cleanup'; import { createAgentDoc } from '../tasks/agents'; import { setFleetServerHost } from '../tasks/fleet_server'; import { FLEET, navigateTo } from '../tasks/navigation'; import { request } from '../tasks/common'; -import { API_VERSIONS } from '@kbn/fleet-plugin/common/constants'; import { login } from '../tasks/login'; const FLEET_SERVER_POLICY_ID = 'fleet-server-policy'; @@ -66,6 +67,8 @@ describe('Fleet add agent flyout', () => { const AGENT_ID = 'agent' + Date.now(); navigateTo(FLEET); + // When enableOpAMP is on, addAgentButton lives inside a popover — open it first. + cy.getBySel(ADD_AGENT_MENU_BUTTON).click(); cy.getBySel(ADD_AGENT_BUTTON).click(); cy.intercept('POST', '/api/fleet/agent_policies?sys_monitoring=true').as('createAgentPolicy'); diff --git a/x-pack/platform/plugins/shared/fleet/cypress/screens/fleet.ts b/x-pack/platform/plugins/shared/fleet/cypress/screens/fleet.ts index 3ce215ae8ee87..3b47cfe1de8a5 100644 --- a/x-pack/platform/plugins/shared/fleet/cypress/screens/fleet.ts +++ b/x-pack/platform/plugins/shared/fleet/cypress/screens/fleet.ts @@ -6,6 +6,7 @@ */ export const ADD_AGENT_BUTTON = 'addAgentButton'; +export const ADD_AGENT_MENU_BUTTON = 'addAgentMenuButton'; export const ADD_AGENT_BUTTON_TOP = 'addAgentBtnTop'; export const LANDING_PAGE_ADD_FLEET_SERVER_BUTTON = 'fleetServerLanding.addFleetServerButton'; diff --git a/x-pack/platform/plugins/shared/fleet/test/scout/ui/fixtures/page_objects/fleet_home.ts b/x-pack/platform/plugins/shared/fleet/test/scout/ui/fixtures/page_objects/fleet_home.ts index 16b0101d634de..e36ebdf2d6987 100644 --- a/x-pack/platform/plugins/shared/fleet/test/scout/ui/fixtures/page_objects/fleet_home.ts +++ b/x-pack/platform/plugins/shared/fleet/test/scout/ui/fixtures/page_objects/fleet_home.ts @@ -33,10 +33,19 @@ export class FleetHomePage { return this.page.testSubj.locator('fleet-agents-tab'); } + getAddAgentMenuButton() { + return this.page.testSubj.locator('addAgentMenuButton'); + } + getAddAgentButton() { return this.page.testSubj.locator('addAgentButton'); } + async openAddAgentMenu() { + const menuButton = this.getAddAgentMenuButton(); + await menuButton.click(); + } + getAddFleetServerHeader() { return this.page.testSubj.locator('addFleetServerHeader'); } diff --git a/x-pack/platform/plugins/shared/fleet/test/scout/ui/tests/privileges_editor_role.spec.ts b/x-pack/platform/plugins/shared/fleet/test/scout/ui/tests/privileges_editor_role.spec.ts index cd088978f4ec1..130a28b14bf96 100644 --- a/x-pack/platform/plugins/shared/fleet/test/scout/ui/tests/privileges_editor_role.spec.ts +++ b/x-pack/platform/plugins/shared/fleet/test/scout/ui/tests/privileges_editor_role.spec.ts @@ -42,6 +42,9 @@ test.describe('When the user has Editor built-in role', { tag: tags.stateful.cla await fleetHome.navigateTo(); await fleetHome.waitForPageToLoad(); + // When enableOpAMP is on, addAgentButton lives inside a popover — open it first. + await fleetHome.openAddAgentMenu(); + // Verify Add Agent button exists await expect(fleetHome.getAddAgentButton()).toBeVisible(); });