diff --git a/docs/settings/fleet-settings.asciidoc b/docs/settings/fleet-settings.asciidoc index 468cef7ad90f9..6d3bb247e6ed4 100644 --- a/docs/settings/fleet-settings.asciidoc +++ b/docs/settings/fleet-settings.asciidoc @@ -269,6 +269,8 @@ List of {fleet-server} hosts that are configured when the {fleet} app starts. ===== `is_default`::: Whether or not this host should be the default to use for {fleet-server}. + `is_internal`::: + If `true` the host will not appear in the UI, and can only be managed via `kibana.yml` or the Fleet API. `proxy_id`::: Unique ID of the proxy to access the {fleet-server} host. ===== diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index c04f0da6a3d85..008e1d1f0ba37 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -5083,6 +5083,9 @@ "is_default": { "type": "boolean" }, + "is_internal": { + "type": "boolean" + }, "host_urls": { "type": "array", "items": { @@ -5195,6 +5198,9 @@ "is_default": { "type": "boolean" }, + "is_internal": { + "type": "boolean" + }, "host_urls": { "type": "array", "items": { @@ -8904,6 +8910,9 @@ "is_default": { "type": "boolean" }, + "is_internal": { + "type": "boolean" + }, "is_preconfigured": { "type": "boolean" }, diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index ab486bb2fb8c2..849c22b47069a 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -3171,6 +3171,8 @@ paths: type: string is_default: type: boolean + is_internal: + type: boolean host_urls: type: array items: @@ -3241,6 +3243,8 @@ paths: type: string is_default: type: boolean + is_internal: + type: boolean host_urls: type: array items: @@ -5762,6 +5766,8 @@ components: type: string is_default: type: boolean + is_internal: + type: boolean is_preconfigured: type: boolean host_urls: diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/fleet_server_host.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/fleet_server_host.yaml index 133bc7fcce13c..2bb08f3acc2a3 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/fleet_server_host.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/fleet_server_host.yaml @@ -7,6 +7,8 @@ properties: type: string is_default: type: boolean + is_internal: + type: boolean is_preconfigured: type: boolean host_urls: diff --git a/x-pack/plugins/fleet/common/openapi/paths/fleet_server_hosts.yaml b/x-pack/plugins/fleet/common/openapi/paths/fleet_server_hosts.yaml index d7668f3683b7b..987f61cd7619b 100644 --- a/x-pack/plugins/fleet/common/openapi/paths/fleet_server_hosts.yaml +++ b/x-pack/plugins/fleet/common/openapi/paths/fleet_server_hosts.yaml @@ -51,6 +51,8 @@ post: type: string is_default: type: boolean + is_internal: + type: boolean host_urls: type: array items: diff --git a/x-pack/plugins/fleet/common/openapi/paths/fleet_server_hosts@{item_id}.yaml b/x-pack/plugins/fleet/common/openapi/paths/fleet_server_hosts@{item_id}.yaml index d46a8b86fb7f6..21d5342d18a5e 100644 --- a/x-pack/plugins/fleet/common/openapi/paths/fleet_server_hosts@{item_id}.yaml +++ b/x-pack/plugins/fleet/common/openapi/paths/fleet_server_hosts@{item_id}.yaml @@ -59,6 +59,8 @@ put: type: string is_default: type: boolean + is_internal: + type: boolean host_urls: type: array items: diff --git a/x-pack/plugins/fleet/common/types/models/fleet_server_policy_config.ts b/x-pack/plugins/fleet/common/types/models/fleet_server_policy_config.ts index 5609853a4ad2e..1e634df2b766d 100644 --- a/x-pack/plugins/fleet/common/types/models/fleet_server_policy_config.ts +++ b/x-pack/plugins/fleet/common/types/models/fleet_server_policy_config.ts @@ -11,6 +11,7 @@ export interface NewFleetServerHost { host_urls: string[]; is_default: boolean; is_preconfigured: boolean; + is_internal?: boolean; proxy_id?: string | null; } diff --git a/x-pack/plugins/fleet/common/types/rest_spec/fleet_server_hosts.ts b/x-pack/plugins/fleet/common/types/rest_spec/fleet_server_hosts.ts index 4a334c7e71b62..f07e96a0b927b 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/fleet_server_hosts.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/fleet_server_hosts.ts @@ -19,6 +19,7 @@ export interface PutFleetServerHostsRequest { name?: string; host_urls?: string[]; is_default?: boolean; + is_internal?: boolean; proxy_id?: string | null; }; } @@ -29,6 +30,7 @@ export interface PostFleetServerHostsRequest { name?: string; host_urls?: string[]; is_default?: boolean; + is_internal?: boolean; proxy_id?: string | null; }; } diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx index 5b36fd831bb65..7409f75a593dd 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/hooks.tsx @@ -224,9 +224,12 @@ export function useFleetServerHostsOptions(agentPolicy: Partial !item.is_default) .map((item) => { + const isInternalFleetServerHost = !!item.is_internal; + return { value: item.id, inputDisplay: item.name, + disabled: isInternalFleetServerHost, }; }), ]; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/index.tsx index 889635a9df71c..93f541d2ffd8b 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/index.tsx @@ -50,6 +50,7 @@ export const SettingsApp = withConfirmModalProvider(() => { const { outputs, fleetServerHosts, downloadSources, proxies } = useSettingsAppData(); const outputItems = outputs.data?.items.filter((item) => !item.is_internal); + const fleetServerHostsItems = fleetServerHosts.data?.items.filter((item) => !item.is_internal); const { deleteOutput } = useDeleteOutput(outputs.resendRequest); const { deleteDownloadSource } = useDeleteDownloadSource(downloadSources.resendRequest); @@ -81,7 +82,7 @@ export const SettingsApp = withConfirmModalProvider(() => { (outputs.isLoading && outputs.isInitialRequest) || !outputItems || (fleetServerHosts.isLoading && fleetServerHosts.isInitialRequest) || - !fleetServerHosts.data?.items || + !fleetServerHostsItems || (downloadSources.isLoading && downloadSources.isInitialRequest) || !downloadSources.data?.items || (proxies.isLoading && proxies.isInitialRequest) || @@ -99,7 +100,7 @@ export const SettingsApp = withConfirmModalProvider(() => { {(route: { match: { params: { itemId: string } } }) => { - const fleetServerHost = fleetServerHosts.data?.items.find( + const fleetServerHost = fleetServerHostsItems.find( (o) => route.match.params.itemId === o.id ); if (!fleetServerHost) { @@ -198,7 +199,7 @@ export const SettingsApp = withConfirmModalProvider(() => { deleteFleetProxy={deleteFleetProxy} proxies={proxies.data.items} outputs={outputItems} - fleetServerHosts={fleetServerHosts.data.items} + fleetServerHosts={fleetServerHostsItems} deleteOutput={deleteOutput} deleteFleetServerHost={deleteFleetServerHost} downloadSources={downloadSources.data.items} diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index a1d6e61c0fa66..b69b17e6e59b0 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -626,6 +626,7 @@ const getSavedObjectTypes = (): { [key: string]: SavedObjectsType } => ({ properties: { name: { type: 'keyword' }, is_default: { type: 'boolean' }, + is_internal: { type: 'boolean', index: false }, host_urls: { type: 'keyword', index: false }, is_preconfigured: { type: 'boolean' }, proxy_id: { type: 'keyword' }, diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts b/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts index f622b1115e16e..5959cc25288ce 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/fleet_server_host.ts @@ -110,6 +110,7 @@ export async function createOrUpdatePreconfiguredFleetServerHosts( (!existingHost.is_preconfigured || existingHost.is_default !== preconfiguredFleetServerHost.is_default || existingHost.name !== preconfiguredFleetServerHost.name || + isDifferent(existingHost.is_internal, preconfiguredFleetServerHost.is_internal) || isDifferent( existingHost.host_urls.map(normalizeHostsForAgents), preconfiguredFleetServerHost.host_urls.map(normalizeHostsForAgents) diff --git a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts index 7572da134bd99..e814616268d3d 100644 --- a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts @@ -103,6 +103,7 @@ export const PreconfiguredFleetServerHostsSchema = schema.arrayOf( id: schema.string(), name: schema.string(), is_default: schema.boolean({ defaultValue: false }), + is_internal: schema.maybe(schema.boolean()), host_urls: schema.arrayOf(schema.string(), { minSize: 1 }), proxy_id: schema.nullable(schema.string()), }), diff --git a/x-pack/plugins/fleet/server/types/rest_spec/fleet_server_policy_config.ts b/x-pack/plugins/fleet/server/types/rest_spec/fleet_server_policy_config.ts index bf112a7d9abfe..d3f2f36a1624f 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/fleet_server_policy_config.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/fleet_server_policy_config.ts @@ -13,6 +13,7 @@ export const PostFleetServerHostRequestSchema = { name: schema.string(), host_urls: schema.arrayOf(schema.string(), { minSize: 1 }), is_default: schema.boolean({ defaultValue: false }), + is_internal: schema.maybe(schema.boolean()), proxy_id: schema.nullable(schema.string()), }), }; @@ -27,6 +28,7 @@ export const PutFleetServerHostRequestSchema = { name: schema.maybe(schema.string()), host_urls: schema.maybe(schema.arrayOf(schema.string(), { minSize: 1 })), is_default: schema.maybe(schema.boolean({ defaultValue: false })), + is_internal: schema.maybe(schema.boolean()), proxy_id: schema.nullable(schema.string()), }), }; diff --git a/x-pack/plugins/fleet/server/types/so_attributes.ts b/x-pack/plugins/fleet/server/types/so_attributes.ts index 09b49440fe3c3..05b2cc1b05bae 100644 --- a/x-pack/plugins/fleet/server/types/so_attributes.ts +++ b/x-pack/plugins/fleet/server/types/so_attributes.ts @@ -104,6 +104,7 @@ export interface FleetServerHostSOAttributes { host_urls: string[]; is_default: boolean; is_preconfigured: boolean; + is_internal?: boolean; proxy_id?: string | null; }