StartProxyCommands starts the reverse commands functionality
(ctx devspacecontext.Context, devPod *latest.DevPod, selector targetselector.TargetSelector, parent *tomb.Tomb)
| 22 | |
| 23 | // StartProxyCommands starts the reverse commands functionality |
| 24 | func StartProxyCommands(ctx devspacecontext.Context, devPod *latest.DevPod, selector targetselector.TargetSelector, parent *tomb.Tomb) error { |
| 25 | if ctx == nil || ctx.Config() == nil || ctx.Config().Config() == nil { |
| 26 | return fmt.Errorf("DevSpace config is nil") |
| 27 | } |
| 28 | |
| 29 | // init done array is used to track when sync was initialized |
| 30 | initDoneArray := []chan struct{}{} |
| 31 | remotePort := DefaultRemotePort |
| 32 | loader.EachDevContainer(devPod, func(devContainer *latest.DevContainer) bool { |
| 33 | if len(devContainer.ProxyCommands) == 0 { |
| 34 | return true |
| 35 | } |
| 36 | |
| 37 | oldRemotePort := remotePort |
| 38 | initDone := parent.NotifyGo(func() error { |
| 39 | return startProxyCommands(ctx, devPod.Name, string(devContainer.Arch), oldRemotePort, devContainer.ProxyCommands, selector.WithContainer(devContainer.Container), parent) |
| 40 | }) |
| 41 | initDoneArray = append(initDoneArray, initDone) |
| 42 | remotePort++ |
| 43 | return true |
| 44 | }) |
| 45 | |
| 46 | // wait for init chans to be finished |
| 47 | for _, initDone := range initDoneArray { |
| 48 | <-initDone |
| 49 | } |
| 50 | return nil |
| 51 | } |
| 52 | |
| 53 | func startProxyCommands(ctx devspacecontext.Context, name, arch string, remotePort int, reverseCommands []*latest.ProxyCommand, selector targetselector.TargetSelector, parent *tomb.Tomb) error { |
| 54 | if ctx.IsDone() { |
no test coverage detected