Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
b492086
initial implementation
dmlemeshko Feb 24, 2026
550fe0a
use 9400 port for _remote_cluster transport profile
dmlemeshko Feb 24, 2026
f07de43
Merge branch 'main' into scout/cps-support
dmlemeshko Feb 25, 2026
12766c7
update test snapshots
dmlemeshko Feb 25, 2026
50bc5ab
Merge branch 'scout/cps-support' of github.com:dmlemeshko/kibana into…
dmlemeshko Feb 25, 2026
940e387
Merge branch 'main' into scout/cps-support
dmlemeshko Feb 25, 2026
2c79359
Merge branch 'main' into scout/cps-support
dmlemeshko Feb 26, 2026
b609b40
Merge branch 'main' into scout/cps-support
dmlemeshko Feb 26, 2026
d975564
refactor linkedProject fixture
dmlemeshko Feb 26, 2026
53fb768
simplify logic by explicitly passing linked ES port
dmlemeshko Feb 26, 2026
8564b2f
add comment
dmlemeshko Feb 26, 2026
81ace1a
allow overriding linked project internal user for MKI
dmlemeshko Feb 26, 2026
b6117e3
add docs
dmlemeshko Feb 26, 2026
1649135
Merge branch 'main' into scout/cps-support
dmlemeshko Feb 26, 2026
eb53ce6
add fixture check
dmlemeshko Feb 26, 2026
1f21efb
Merge branch 'scout/cps-support' of github.com:dmlemeshko/kibana into…
dmlemeshko Feb 26, 2026
dabe2d4
Merge branch 'main' into scout/cps-support
dmlemeshko Mar 2, 2026
cb60d26
Merge branch 'main' into scout/cps-support
dmlemeshko Mar 3, 2026
b8616ba
rename csp => cps
dmlemeshko Mar 9, 2026
a707864
Update src/platform/packages/shared/kbn-es/src/utils/docker.ts
dmlemeshko Mar 9, 2026
dbf767d
Update src/platform/packages/shared/kbn-scout/README.md
dmlemeshko Mar 9, 2026
f07cf11
fix linkedProject+cps check
dmlemeshko Mar 9, 2026
8d7c936
Merge branch 'main' into scout/cps-support
dmlemeshko Mar 9, 2026
a7a4603
Update src/platform/packages/shared/kbn-es/src/utils/docker.ts
dmlemeshko Mar 9, 2026
3f0cdd1
Update src/platform/packages/shared/kbn-es/src/utils/docker.ts
dmlemeshko Mar 9, 2026
b7efffb
Update README.md
dmlemeshko Mar 10, 2026
4cfb12a
Merge branch 'main' into scout/cps-support
dmlemeshko Mar 10, 2026
3f52a2b
wire linkedPorject fixture in test/apiTest,fix comments
dmlemeshko Mar 11, 2026
749e292
Merge branch 'main' into scout/cps-support
dmlemeshko Mar 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export const MOCK_IDP_UIAM_COSMOS_DB_URL =

export const MOCK_IDP_UIAM_ORGANIZATION_ID = 'org1234567890';
export const MOCK_IDP_UIAM_PROJECT_ID = 'abcdef12345678901234567890123456';
export const MOCK_IDP_UIAM_PROJECT_ID2 = 'fedcba65432109876543210987654321';

// Sometimes it is useful or required to point local UIAM service clients, or clients operating within the same Docker
// network (i.e., Elasticsearch), to a different UIAM service URL. For example, http://host.docker.internal:8080 can be
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export {
MOCK_IDP_UIAM_ORG_ADMIN_API_KEY,
MOCK_IDP_UIAM_ORGANIZATION_ID,
MOCK_IDP_UIAM_PROJECT_ID,
MOCK_IDP_UIAM_PROJECT_ID2,
} from './constants';

export {
Expand Down
3 changes: 3 additions & 0 deletions src/platform/packages/shared/kbn-es/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ export {
ELASTIC_SERVERLESS_SUPERUSER,
ELASTIC_SERVERLESS_SUPERUSER_PASSWORD,
SERVERLESS_NODES,
LINKED_CLUSTER_PORT_OFFSET,
getServerlessNodes,
getSharedServerlessParams,
getDockerFileMountPath,
verifyDockerInstalled,
maybeCreateDockerNetwork,
Expand Down
98 changes: 92 additions & 6 deletions src/platform/packages/shared/kbn-es/src/utils/docker.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import {
teardownServerlessClusterSync,
verifyDockerInstalled,
getESp12Volume,
getServerlessNodes,
getSharedServerlessParams,
} from './docker';
import { ToolingLog, ToolingLogCollectingWriter } from '@kbn/tooling-log';
import { CA_CERT_PATH, ES_P12_PATH } from '@kbn/dev-utils';
Expand Down Expand Up @@ -136,6 +138,59 @@ const volumeCmdTest = async (volumeCmd: string[]) => {
expect((await Fsp.stat(serverlessObjectStorePath)).mode & 0o777).toBe(0o777);
};

describe('getServerlessNodes()', () => {
test('should return default node names and ports with no arguments', () => {
const nodes = getServerlessNodes();
expect(nodes).toHaveLength(3);
expect(nodes[0].name).toBe('es01');
expect(nodes[1].name).toBe('es02');
expect(nodes[2].name).toBe('es03');
expect(nodes[0].params).toEqual(expect.arrayContaining(['127.0.0.1:9300:9300']));
expect(nodes[1].params).toEqual(expect.arrayContaining(['127.0.0.1:9202:9202']));
expect(nodes[2].params).toEqual(expect.arrayContaining(['127.0.0.1:9203:9203']));
});

test('should apply name suffix and port offset for linked cluster', () => {
const nodes = getServerlessNodes('-linked', 10);
expect(nodes).toHaveLength(3);
expect(nodes[0].name).toBe('es01-linked');
expect(nodes[1].name).toBe('es02-linked');
expect(nodes[2].name).toBe('es03-linked');
expect(nodes[0].params).toEqual(expect.arrayContaining(['127.0.0.1:9310:9310']));
expect(nodes[1].params).toEqual(expect.arrayContaining(['127.0.0.1:9212:9212']));
expect(nodes[1].params).toEqual(expect.arrayContaining(['127.0.0.1:9312:9312']));
expect(nodes[2].params).toEqual(expect.arrayContaining(['127.0.0.1:9213:9213']));
expect(nodes[2].params).toEqual(expect.arrayContaining(['127.0.0.1:9313:9313']));
});

test('should configure discovery hosts with suffixed names', () => {
const nodes = getServerlessNodes('-linked', 10);
expect(nodes[0].params).toEqual(
expect.arrayContaining([`discovery.seed_hosts=es02-linked,es03-linked`])
);
expect(nodes[1].params).toEqual(
expect.arrayContaining([`discovery.seed_hosts=es01-linked,es03-linked`])
);
expect(nodes[2].params).toEqual(
expect.arrayContaining([`discovery.seed_hosts=es01-linked,es02-linked`])
);
});
});

describe('getSharedServerlessParams()', () => {
test('should return default master nodes with no arguments', () => {
const params = getSharedServerlessParams();
expect(params).toEqual(expect.arrayContaining(['cluster.initial_master_nodes=es01,es02,es03']));
});

test('should return suffixed master nodes for linked cluster', () => {
const params = getSharedServerlessParams('-linked');
expect(params).toEqual(
expect.arrayContaining(['cluster.initial_master_nodes=es01-linked,es02-linked,es03-linked'])
);
});
});

describe('resolveDockerImage()', () => {
const defaultRepo = 'another/repo';
const defaultImg = 'default/reg/repo:tag';
Expand Down Expand Up @@ -637,6 +692,37 @@ describe('resolveEsArgs()', () => {
`);
});

test('should use projectIdOverride when provided in UIAM mode', () => {
const overrideId = 'custom_project_id_123';
const esArgs = resolveEsArgs(
[],
{
ssl: true,
kibanaUrl: 'http://localhost:5601/',
projectType,
basePath: baseEsPath,
uiam: true,
},
overrideId
);

expect(findEnvValue(esArgs, 'serverless.project_id')).toBe(overrideId);
expect(findEnvValue(esArgs, 'serverless.organization_id')).toBeDefined();
expect(findEnvValue(esArgs, 'serverless.universal_iam_service.enabled')).toBe('true');
});

test('should use default project ID when no override is provided in UIAM mode', () => {
const esArgs = resolveEsArgs([], {
ssl: true,
kibanaUrl: 'http://localhost:5601/',
projectType,
basePath: baseEsPath,
uiam: true,
});

expect(findEnvValue(esArgs, 'serverless.project_id')).toBe('abcdef12345678901234567890123456');
});

test('should append refresh interval override when ES_JAVA_OPTS is provided', () => {
const esArgs = resolveEsArgs([], { esArgs: 'ES_JAVA_OPTS=-Xms1g -Xmx1g' });

Expand Down Expand Up @@ -831,13 +917,13 @@ describe('runServerlessCluster()', () => {

// docker version (1)
// docker ps (1)
// docker container rm (5 = 3 for ES nodes, 2 for UIAM containers)
// docker container rm (8 = 3 for ES nodes, 3 for linked ES nodes, 2 for UIAM containers)
// docker network create (1)
// docker pull (1)
// docker inspect (1)
// docker run (3)
// docker logs (1)
expect(execa.mock.calls).toHaveLength(14);
expect(execa.mock.calls).toHaveLength(17);

// UIAM containers should not be started when `--uiam` is not passed
expect(runUiamContainerMock).not.toHaveBeenCalled();
Expand All @@ -855,13 +941,13 @@ describe('runServerlessCluster()', () => {

// docker version (1)
// docker ps (1)
// docker container rm (5 = 3 for ES nodes, 2 for UIAM containers)
// docker container rm (8 = 3 for ES nodes, 3 for linked ES nodes, 2 for UIAM containers)
// docker network create (1)
// docker pull (3 = 1 for ES nodes, 2 for UIAM containers)
// docker inspect (2 = image info call for ES nodes is memoized in the previous test, 2 for UIAM containers)
// docker run (3)
// docker logs (1)
expect(execa.mock.calls).toHaveLength(17);
expect(execa.mock.calls).toHaveLength(20);

expect(runUiamContainerMock).toHaveBeenCalledTimes(2);
expect(runUiamContainerMock).toHaveBeenCalledWith(
Expand Down Expand Up @@ -1023,12 +1109,12 @@ describe('runDockerContainer()', () => {
await expect(runDockerContainer(log, {})).resolves.toBeUndefined();
// docker version (1)
// docker ps (1)
// docker container rm (5 = 3 for ES nodes, 2 for UIAM containers)
// docker container rm (8 = 3 for ES nodes, 3 for linked ES nodes, 2 for UIAM containers)
// docker network create (1)
// docker pull (1)
// docker inspect (1)
// docker run (1)
expect(execa.mock.calls).toHaveLength(11);
expect(execa.mock.calls).toHaveLength(14);
});
});

Expand Down
Loading
Loading