diff --git a/internal/master/deploy.go b/internal/master/deploy.go index da6751c..6de4193 100644 --- a/internal/master/deploy.go +++ b/internal/master/deploy.go @@ -51,12 +51,23 @@ func (m *Master) Deploy(ctx context.Context, req *mcpv1.MasterDeployRequest) (*m return resp, nil } - // Parse the node's Tailnet IP from its address (host:port). + // Resolve the node's address to an IP for DNS registration. + // Node addresses may be Tailscale DNS names (e.g., rift.scylla-hammerhead.ts.net:9444) + // but MCNS needs an IP address for A records. nodeHost, _, err := net.SplitHostPort(node.Address) if err != nil { resp.Error = fmt.Sprintf("invalid node address %q: %v", node.Address, err) return resp, nil } + // If nodeHost is not an IP, resolve it. + if net.ParseIP(nodeHost) == nil { + ips, lookupErr := net.LookupHost(nodeHost) + if lookupErr != nil || len(ips) == 0 { + m.Logger.Warn("cannot resolve node address", "host", nodeHost, "err", lookupErr) + } else { + nodeHost = ips[0] + } + } // Step 2: Forward deploy to the agent. client, err := m.Pool.Get(nodeName)