tailscale: Add runtime exit node API

This commit is contained in:
世界
2026-05-21 12:37:15 +08:00
parent 715e5c4c2b
commit 9afbd45d4b
9 changed files with 329 additions and 78 deletions
+13
View File
@@ -780,6 +780,19 @@ func (c *CommandClient) SubscribeTailscaleStatus(handler TailscaleStatusHandler)
}
}
func (c *CommandClient) SetTailscaleExitNode(endpointTag string, stableID string) error {
_, err := callWithResult(c, func(client daemon.StartedServiceClient) (*emptypb.Empty, error) {
return client.SetTailscaleExitNode(context.Background(), &daemon.SetTailscaleExitNodeRequest{
EndpointTag: endpointTag,
StableID: stableID,
})
})
if err != nil {
return E.Cause(err, "set tailscale exit node")
}
return nil
}
func (c *CommandClient) StartTailscalePing(endpointTag string, peerIP string, handler TailscalePingHandler) error {
client, err := c.getClientForCall()
if err != nil {
@@ -22,6 +22,7 @@ type TailscaleEndpointStatus struct {
NetworkName string
MagicDNSSuffix string
Self *TailscalePeer
ExitNode *TailscalePeer
userGroups []*TailscaleUserGroup
}
@@ -52,6 +53,7 @@ type TailscalePeerIterator interface {
}
type TailscalePeer struct {
StableID string
HostName string
DNSName string
OS string
@@ -98,6 +100,9 @@ func tailscaleEndpointStatusFromGRPC(status *daemon.TailscaleEndpointStatus) *Ta
if status.Self != nil {
result.Self = tailscalePeerFromGRPC(status.Self)
}
if status.ExitNode != nil {
result.ExitNode = tailscalePeerFromGRPC(status.ExitNode)
}
return result
}
@@ -117,6 +122,7 @@ func tailscaleUserGroupFromGRPC(group *daemon.TailscaleUserGroup) *TailscaleUser
func tailscalePeerFromGRPC(peer *daemon.TailscalePeer) *TailscalePeer {
return &TailscalePeer{
StableID: peer.StableID,
HostName: peer.HostName,
DNSName: peer.DnsName,
OS: peer.Os,