diff --git a/main.go b/main.go index 7f85976..36d1960 100644 --- a/main.go +++ b/main.go @@ -33,7 +33,7 @@ var ( ) // Returns the kubectl args, kubectl context name, resource name, and the port pair (i.e. 8080:1222) from the input. -func parse(in string) ([]string, string, string, string) { +func parse(in string) ([]string, string, string, string, string) { var args []string var ctx, name, ports, address string rctype := "pod" @@ -126,7 +126,6 @@ func parse(in string) ([]string, string, string, string) { "--no-headers=true", fmt.Sprintf("--context=%s", ctx), fmt.Sprintf("--namespace=%s", ns), - fmt.Sprintf("--address=%s", address), "-o", "custom-columns=:metadata.name,:metadata.namespace", } @@ -135,7 +134,7 @@ func parse(in string) ([]string, string, string, string) { fail("skip unknown target: " + in) } - return args, ctx, name, ports + return args, ctx, name, ports, address } func Run(cmd *cobra.Command, args []string) error { @@ -153,7 +152,7 @@ func Run(cmd *cobra.Command, args []string) error { // Range through our input targets. for _, c := range targets { - v, ctx, name, portpair := parse(c) + v, ctx, name, portpair, address := parse(c) if v == nil { return fmt.Errorf("invalid target: %v", c) } @@ -185,13 +184,18 @@ func Run(cmd *cobra.Command, args []string) error { targetList := re.FindAllString(parts[0], -1) if len(targetList) > 0 { var addcmd *exec.Cmd - if ctx == "" { + switch { + case ctx == "" && address == "": addcmd = exec.Command("kubectl", "port-forward", "-n", parts[1], rctype+"/"+targetList[0], portpair) - } else { + case address == "": addcmd = exec.Command("kubectl", "--context", ctx, "port-forward", "-n", parts[1], rctype+"/"+targetList[0], portpair) + case ctx == "": + addcmd = exec.Command("kubectl", "port-forward", "-n", parts[1], rctype+"/"+targetList[0], "--address", address, portpair) + default: + addcmd = exec.Command("kubectl", "--context", ctx, "port-forward", "-n", parts[1], rctype+"/"+targetList[0], "--address", address, portpair) } - key := fmt.Sprintf("%s:%s:%s:%s", ctx, parts[1], name, portpair) + key := fmt.Sprintf("%s:%s:%s:%s:%s", ctx, parts[1], name, address, portpair) if _, ok := cs[key]; !ok { cs[key] = addcmd } diff --git a/main_test.go b/main_test.go index 8ae275c..f2390f4 100644 --- a/main_test.go +++ b/main_test.go @@ -17,7 +17,7 @@ type check struct { func Test_parse(t *testing.T) { var args []string - args, _, _, _ = parse("8080:1222") + args, _, _, _, _ = parse("8080:1222") if args != nil { t.Fatal("should be nil") } @@ -31,7 +31,7 @@ func Test_parse(t *testing.T) { {"ctx=minikube:ns=system:deployment/name:127.0.0.2:8080:1222", "minikube", "deployment", "deployment/name", "system", "8080:1222", "127.0.0.2"}, {"ctx=minikube:system:name:8080:1222", "minikube", "pod", "name", "system", "8080:1222", ""}, } { - args, ctx, name, ports := parse(v.target) + args, ctx, name, ports, address := parse(v.target) if ctx != v.ctx { t.Fatalf("[%v] context should be %v, got %v", v.target, v.ctx, ctx) } @@ -52,5 +52,8 @@ func Test_parse(t *testing.T) { if ports != v.ports { t.Fatalf("[%v] ports should be %v, got %v", v.target, v.ports, ports) } + if address != v.address { + t.Fatalf("[%v] address should be %v, got %v", v.target, v.address, address) + } } }