Add get ips command to scenario

Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
Kristoffer Dalby 2022-10-14 12:17:59 +02:00
parent f109b54e79
commit 25e39d9ff9
No known key found for this signature in database
2 changed files with 31 additions and 3 deletions

View file

@ -4,6 +4,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"log" "log"
"net/netip"
"os" "os"
"sync" "sync"
@ -210,3 +211,20 @@ func (s *Scenario) RunTailscaleUp(
return fmt.Errorf("failed to up tailscale node: %w", errNoNamespaceAvailable) return fmt.Errorf("failed to up tailscale node: %w", errNoNamespaceAvailable)
} }
func (s *Scenario) GetIPs(namespace string) ([]netip.Addr, error) {
var ips []netip.Addr
if ns, ok := s.namespaces[namespace]; ok {
for _, client := range ns.Clients {
clientIps, err := client.IPs()
if err != nil {
return ips, fmt.Errorf("failed to get ips: %w", err)
}
ips = append(ips, clientIps...)
}
return ips, nil
}
return ips, fmt.Errorf("failed to get ips: %w", errNoNamespaceAvailable)
}

View file

@ -17,6 +17,7 @@ const tsicHashLength = 6
const dockerContextPath = "../." const dockerContextPath = "../."
var errTailscalePingFailed = errors.New("ping failed") var errTailscalePingFailed = errors.New("ping failed")
var errTailscaleNotLoggedIn = errors.New("tailscale not logged in")
type TailscaleInContainer struct { type TailscaleInContainer struct {
version string version string
@ -102,14 +103,17 @@ func (t *TailscaleInContainer) Up(
log.Println("Join command:", command) log.Println("Join command:", command)
log.Printf("Running join command for %s\n", t.Hostname) log.Printf("Running join command for %s\n", t.Hostname)
_, _, err := dockertestutil.ExecuteCommand( stdout, stderr, err := dockertestutil.ExecuteCommand(
t.container, t.container,
command, command,
[]string{}, []string{},
) )
if err != nil { if err != nil {
log.Printf("tailscale join stderr: %s\n", stderr)
return err return err
} }
log.Printf("tailscale join stdout: %s\n", stdout)
log.Printf("%s joined\n", t.Hostname) log.Printf("%s joined\n", t.Hostname)
return nil return nil
@ -123,12 +127,18 @@ func (t *TailscaleInContainer) IPs() ([]netip.Addr, error) {
"ip", "ip",
} }
result, _, err := dockertestutil.ExecuteCommand( result, stderr, err := dockertestutil.ExecuteCommand(
t.container, t.container,
command, command,
[]string{}, []string{},
) )
if err != nil { if err != nil {
log.Printf("failed commands stderr: %s\n", stderr)
if strings.Contains(stderr, "NeedsLogin") {
return []netip.Addr{}, errTailscaleNotLoggedIn
}
return []netip.Addr{}, err return []netip.Addr{}, err
} }
@ -165,7 +175,7 @@ func (t *TailscaleInContainer) Ping(ip netip.Addr) error {
return err return err
} }
if !strings.Contains(result, "pong") { if !strings.Contains(result, "pong") || !strings.Contains(result, "is local") {
return errTailscalePingFailed return errTailscalePingFailed
} }