Outcome of resolving the tailnet names the daemon’s server certificate
should carry. Unavailable is deliberately distinct from NotApplicable:
a failed query says nothing about the names, so callers must not treat it
as “this node has no tailnet names” and drop names a leaf already carries.
Extract the node identity from tailscale status --json. Missing or
malformed fields yield an empty identity rather than an error; callers
that need a real identity check TailscaleSelf::has_identity.
Classify a tailscale status outcome. Only a usable identity
(TailscaleSelf::has_identity) is Resolved. A failed or timed-out
query, malformed output, and a successful status reported before
tailscaled has its network map are all Unavailable, so the existing
certificate keeps its names instead of being regenerated without them.
Resolve the tailnet names for the daemon’s self-TLS listeners (WSS,
enrollment). Queries tailscaled only when the listeners are reached over
the tailnet. Callers that start several listeners must resolve once and
share the outcome, so every listener presents the same identity.