feat: add discovery role hints

This commit is contained in:
Peter Steinberger
2026-01-20 12:10:13 +00:00
parent c613769d22
commit 7720106624
3 changed files with 15 additions and 0 deletions

View File

@@ -82,6 +82,12 @@ export function renderBeaconLines(beacon: GatewayBonjourBeacon, rich: boolean):
if (wsUrl) {
lines.push(` ${colorize(rich, theme.muted, "ws")}: ${colorize(rich, theme.command, wsUrl)}`);
}
if (beacon.role) {
lines.push(` ${colorize(rich, theme.muted, "role")}: ${beacon.role}`);
}
if (beacon.transport) {
lines.push(` ${colorize(rich, theme.muted, "transport")}: ${beacon.transport}`);
}
if (beacon.gatewayTls) {
const fingerprint = beacon.gatewayTlsFingerprintSha256
? `sha256 ${beacon.gatewayTlsFingerprintSha256}`

View File

@@ -14,6 +14,8 @@ export type GatewayBonjourBeacon = {
gatewayTls?: boolean;
gatewayTlsFingerprintSha256?: string;
cliPath?: string;
role?: string;
transport?: string;
txt?: Record<string, string>;
};
@@ -211,6 +213,8 @@ function parseDnsSdResolve(stdout: string, instanceName: string): GatewayBonjour
beacon.gatewayTls = raw === "1" || raw === "true" || raw === "yes";
}
if (txt.gatewayTlsSha256) beacon.gatewayTlsFingerprintSha256 = txt.gatewayTlsSha256;
if (txt.role) beacon.role = txt.role;
if (txt.transport) beacon.transport = txt.transport;
if (!beacon.displayName) beacon.displayName = decodedInstanceName;
return beacon;
@@ -351,6 +355,8 @@ async function discoverWideAreaViaTailnetDns(
beacon.gatewayTls = raw === "1" || raw === "true" || raw === "yes";
}
if (txtMap.gatewayTlsSha256) beacon.gatewayTlsFingerprintSha256 = txtMap.gatewayTlsSha256;
if (txtMap.role) beacon.role = txtMap.role;
if (txtMap.transport) beacon.transport = txtMap.transport;
results.push(beacon);
}
@@ -409,6 +415,8 @@ function parseAvahiBrowse(stdout: string): GatewayBonjourBeacon[] {
current.gatewayTls = raw === "1" || raw === "true" || raw === "yes";
}
if (txt.gatewayTlsSha256) current.gatewayTlsFingerprintSha256 = txt.gatewayTlsSha256;
if (txt.role) current.role = txt.role;
if (txt.transport) current.transport = txt.transport;
}
}

View File

@@ -86,6 +86,7 @@ function renderZone(opts: WideAreaGatewayZoneOpts & { serial: number }): string
const txt = [
`displayName=${opts.displayName.trim() || hostname}`,
`role=gateway`,
`transport=gateway`,
`gatewayPort=${opts.gatewayPort}`,
];