@@ -3,6 +3,7 @@ package proxycommands
33import (
44 "encoding/base64"
55 "fmt"
6+ "strconv"
67 "strings"
78
89 sshpkg "github.com/gliderlabs/ssh"
@@ -20,22 +21,25 @@ import (
2021var DefaultRemotePort = 10567
2122
2223// StartProxyCommands starts the reverse commands functionality
23- func StartProxyCommands (ctx devspacecontext.Context , devPod * latest.DevPod , selector targetselector.TargetSelector , parent * tomb.Tomb ) ( retErr error ) {
24+ func StartProxyCommands (ctx devspacecontext.Context , devPod * latest.DevPod , selector targetselector.TargetSelector , parent * tomb.Tomb ) error {
2425 if ctx == nil || ctx .Config () == nil || ctx .Config ().Config () == nil {
2526 return fmt .Errorf ("DevSpace config is nil" )
2627 }
2728
2829 // init done array is used to track when sync was initialized
2930 initDoneArray := []chan struct {}{}
31+ remotePort := DefaultRemotePort
3032 loader .EachDevContainer (devPod , func (devContainer * latest.DevContainer ) bool {
3133 if len (devContainer .ProxyCommands ) == 0 {
3234 return true
3335 }
3436
37+ oldRemotePort := remotePort
3538 initDone := parent .NotifyGo (func () error {
36- return startProxyCommands (ctx , devContainer , devPod .Name , string (devContainer .Arch ), devContainer .ProxyCommands , selector .WithContainer (devContainer .Container ), parent )
39+ return startProxyCommands (ctx , devPod .Name , string (devContainer .Arch ), oldRemotePort , devContainer .ProxyCommands , selector .WithContainer (devContainer .Container ), parent )
3740 })
3841 initDoneArray = append (initDoneArray , initDone )
42+ remotePort ++
3943 return true
4044 })
4145
@@ -46,7 +50,7 @@ func StartProxyCommands(ctx devspacecontext.Context, devPod *latest.DevPod, sele
4650 return nil
4751}
4852
49- func startProxyCommands (ctx devspacecontext.Context , devContainer * latest. DevContainer , name , arch string , reverseCommands []* latest.ProxyCommand , selector targetselector.TargetSelector , parent * tomb.Tomb ) error {
53+ func startProxyCommands (ctx devspacecontext.Context , name , arch string , remotePort int , reverseCommands []* latest.ProxyCommand , selector targetselector.TargetSelector , parent * tomb.Tomb ) error {
5054 if ctx .IsDone () {
5155 return nil
5256 }
@@ -59,11 +63,8 @@ func startProxyCommands(ctx devspacecontext.Context, devContainer *latest.DevCon
5963
6064 defer ssh .GetInstance (ctx .Log ()).ReleasePort (port )
6165
62- // get remote port
63- defaultRemotePort := DefaultRemotePort
64-
6566 // start reverse port forwarding from that port
66- mapping := fmt .Sprintf ("%d:%d" , port , defaultRemotePort )
67+ mapping := fmt .Sprintf ("%d:%d" , port , remotePort )
6768 err = portforwarding .StartReversePortForwarding (ctx , name , arch , []* latest.PortMapping {
6869 {
6970 Port : mapping ,
@@ -74,10 +75,10 @@ func startProxyCommands(ctx devspacecontext.Context, devContainer *latest.DevCon
7475 }
7576
7677 // start ssh
77- return startLocalSSH (ctx , selector , devContainer , reverseCommands , fmt .Sprintf (":%d" , port ), parent )
78+ return startLocalSSH (ctx , selector , reverseCommands , remotePort , fmt .Sprintf (":%d" , port ), parent )
7879}
7980
80- func startLocalSSH (ctx devspacecontext.Context , selector targetselector.TargetSelector , devContainer * latest. DevContainer , reverseCommands []* latest.ProxyCommand , addr string , parent * tomb.Tomb ) error {
81+ func startLocalSSH (ctx devspacecontext.Context , selector targetselector.TargetSelector , reverseCommands []* latest.ProxyCommand , remotePort int , addr string , parent * tomb.Tomb ) error {
8182 if ctx .IsDone () {
8283 return nil
8384 }
@@ -111,7 +112,7 @@ func startLocalSSH(ctx devspacecontext.Context, selector targetselector.TargetSe
111112 }
112113
113114 // execute configure command in container
114- command := []string {inject .DevSpaceHelperContainerPath , "proxy-commands" , "configure" , "--public-key" , base64 .StdEncoding .EncodeToString ([]byte (publicKey )), "--private-key" , base64 .StdEncoding .EncodeToString ([]byte (privateKey ))}
115+ command := []string {inject .DevSpaceHelperContainerPath , "proxy-commands" , "configure" , "--port" , strconv . Itoa ( remotePort ), "-- public-key" , base64 .StdEncoding .EncodeToString ([]byte (publicKey )), "--private-key" , base64 .StdEncoding .EncodeToString ([]byte (privateKey ))}
115116 if len (commandsToReplace ) > 0 {
116117 command = append (command , "--commands" , strings .Join (commandsToReplace , "," ))
117118 }
0 commit comments