fix(networking): treat host-network services as host-exposed in summaries (#1430)

The exposure summaries derived a stack's exposure solely from the declared
published-port list, so a service running with network_mode: host (which
publishes every container port on the host but declares no ports:) was
under-reported as less exposed than it actually is.

Capture network_mode in the lightweight dependency parser, add an
isHostNetwork predicate, and treat a host-network service as exposed and
publishing across the Fleet networking summary, the Stack Dossier export, and
the Networking panel, matching how the Compose Doctor already flags host
networking.
This commit is contained in:
Anso
2026-06-24 19:50:45 -04:00
committed by GitHub
parent 2ed01641c8
commit 2eafee3594
11 changed files with 111 additions and 10 deletions
@@ -66,6 +66,15 @@ describe('parseComposeDependencies - ports', () => {
});
});
describe('parseComposeDependencies - network_mode', () => {
it('captures network_mode and leaves it undefined when absent', () => {
const host = parseComposeDependencies(svc('web', 'image: nginx\nnetwork_mode: host'));
expect(host.services[0].networkMode).toBe('host');
const none = parseComposeDependencies(svc('web', 'image: nginx'));
expect(none.services[0].networkMode).toBeUndefined();
});
});
describe('parseComposeDependencies - top-level resources', () => {
it('normalizes external (bool), legacy external object, and name: override', () => {
const r = parseComposeDependencies('services:\n web:\n image: nginx\nnetworks:\n a:\n b:\n external: true\n c:\n external:\n name: legacy_net\n d:\n name: custom_net\nvolumes:\n v:\n external: true\n');