mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Added WaitForReady() to Tailscale interface
When using running `tailscale up` in the AuthKey flow process, the tailscale client immediately enters PollMap after registration - avoiding a race condition. When using the web auth (up -> go to the Control website -> CLI `register`) the client is polling checking if it has been authorized. If we immediately ask for the client IP, as done in CreateHeadscaleEnv() we might have the client in NotReady status. This method provides a way to wait for the client to be ready. Signed-off-by: Juan Font Alonso <juanfontalonso@gmail.com>
This commit is contained in:
		
							parent
							
								
									18c0009a51
								
							
						
					
					
						commit
						cb2790984f
					
				| @ -15,6 +15,7 @@ type TailscaleClient interface { | ||||
| 	IPs() ([]netip.Addr, error) | ||||
| 	FQDN() (string, error) | ||||
| 	Status() (*ipnstate.Status, error) | ||||
| 	WaitForReady() error | ||||
| 	WaitForPeers(expected int) error | ||||
| 	Ping(hostnameOrIP string) error | ||||
| } | ||||
|  | ||||
| @ -25,6 +25,7 @@ var ( | ||||
| 	errTailscalePingFailed     = errors.New("ping failed") | ||||
| 	errTailscaleNotLoggedIn    = errors.New("tailscale not logged in") | ||||
| 	errTailscaleWrongPeerCount = errors.New("wrong peer count") | ||||
| 	errTailscaleNotConnected   = errors.New("tailscale not connected") | ||||
| ) | ||||
| 
 | ||||
| type TailscaleInContainer struct { | ||||
| @ -222,6 +223,21 @@ func (t *TailscaleInContainer) FQDN() (string, error) { | ||||
| 	return status.Self.DNSName, nil | ||||
| } | ||||
| 
 | ||||
| func (t *TailscaleInContainer) WaitForReady() error { | ||||
| 	return t.pool.Retry(func() error { | ||||
| 		status, err := t.Status() | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("failed to fetch tailscale status: %w", err) | ||||
| 		} | ||||
| 
 | ||||
| 		if status.CurrentTailnet != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 
 | ||||
| 		return errTailscaleNotConnected | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func (t *TailscaleInContainer) WaitForPeers(expected int) error { | ||||
| 	return t.pool.Retry(func() error { | ||||
| 		status, err := t.Status() | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user