Skip to content

Commit 3334a87

Browse files
committed
Add "ignore" option to port forwarding settings
Signed-off-by: Jan Dubois <[email protected]>
1 parent 7ac20c7 commit 3334a87

File tree

4 files changed

+24
-20
lines changed

4 files changed

+24
-20
lines changed

pkg/hostagent/hostagent.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,17 @@ func New(instName string, stdout, stderr io.Writer, sigintCh chan os.Signal) (*H
8686
AdditionalArgs: sshArgs,
8787
}
8888

89+
ports := make([]limayaml.Port, 0, 2+len(y.Ports))
90+
ports = append(ports, limayaml.Port{GuestPort: sshGuestPort, Ignore: true})
91+
ports = append(ports, limayaml.Port{GuestPort: y.SSH.LocalPort, Ignore: true})
92+
ports = append(ports, y.Ports...)
93+
8994
a := &HostAgent{
9095
l: l,
9196
y: y,
9297
instDir: inst.Dir,
9398
sshConfig: sshConfig,
94-
portForwarder: newPortForwarder(l, sshConfig, y.SSH.LocalPort, y.Ports),
99+
portForwarder: newPortForwarder(l, sshConfig, y.SSH.LocalPort, ports),
95100
qExe: qExe,
96101
qArgs: qArgs,
97102
sigintCh: sigintCh,

pkg/hostagent/port.go

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,35 +31,30 @@ func newPortForwarder(l *logrus.Logger, sshConfig *ssh.SSHConfig, sshHostPort in
3131
}
3232
}
3333

34-
func (pf *portForwarder) forwardingAddresses(guestPort int) (string, string) {
34+
func (pf *portForwarder) forwardingAddresses(guest api.IPPort) (string, string) {
3535
for _, port := range pf.ports {
36-
if port.GuestPortRange[0] <= guestPort && guestPort <= port.GuestPortRange[1] {
37-
guestAddr := fmt.Sprintf("%s:%d", port.GuestIP, guestPort)
36+
if port.GuestPortRange[0] <= guest.Port && guest.Port <= port.GuestPortRange[1] {
37+
guestAddr := fmt.Sprintf("%s:%d", port.GuestIP, guest.Port)
38+
if port.Ignore {
39+
return guestAddr, ""
40+
}
3841
offset := port.HostPortRange[0] - port.GuestPortRange[0]
39-
hostAddr := fmt.Sprintf("%s:%d", port.HostIP, guestPort + offset)
42+
hostAddr := fmt.Sprintf("%s:%d", port.HostIP, guest.Port + offset)
4043
return guestAddr, hostAddr
4144
}
4245
}
43-
addr := "127.0.0.1:" + strconv.Itoa(guestPort)
46+
addr := "127.0.0.1:" + strconv.Itoa(guest.Port)
4447
return addr, addr
4548
}
4649

4750
func (pf *portForwarder) OnEvent(ctx context.Context, ev api.Event) {
48-
ignore := func(x api.IPPort) bool {
49-
switch x.Port {
50-
case sshGuestPort, pf.sshHostPort:
51-
return true
52-
default:
53-
return false
54-
}
55-
}
5651
for _, f := range ev.LocalPortsRemoved {
57-
if ignore(f) {
58-
continue
59-
}
6052
// pf.tcp might be inconsistent with the actual state of the SSH master,
6153
// so we always attempt to cancel forwarding, even when f.Port is not tracked in pf.tcp.
62-
guestAddr, hostAddr := pf.forwardingAddresses(f.Port)
54+
guestAddr, hostAddr := pf.forwardingAddresses(f)
55+
if hostAddr == "" {
56+
continue
57+
}
6358
pf.l.Infof("Stopping forwarding TCP from %s to %s", guestAddr, hostAddr)
6459
verbCancel := true
6560
if err := forwardSSH(ctx, pf.sshConfig, pf.sshHostPort, hostAddr, guestAddr, verbCancel); err != nil {
@@ -72,10 +67,11 @@ func (pf *portForwarder) OnEvent(ctx context.Context, ev api.Event) {
7267
delete(pf.tcp, f.Port)
7368
}
7469
for _, f := range ev.LocalPortsAdded {
75-
if ignore(f) {
70+
guestAddr, hostAddr := pf.forwardingAddresses(f)
71+
if hostAddr == "" {
72+
pf.l.Infof("Not forwarding TCP from %s", guestAddr)
7673
continue
7774
}
78-
guestAddr, hostAddr := pf.forwardingAddresses(f.Port)
7975
pf.l.Infof("Forwarding TCP from %s to %s", guestAddr, hostAddr)
8076
if err := forwardSSH(ctx, pf.sshConfig, pf.sshHostPort, hostAddr, guestAddr, false); err != nil {
8177
pf.l.WithError(err).Warnf("failed to setting up forward TCP port %d (negligible if already forwarded)", f.Port)

pkg/limayaml/default.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ containerd:
9090
# - guestPort: 80
9191
# hostPort: 8080 # overrides the default value 80
9292

93+
# - guestPort: 8888
94+
# ignore: true (don't forward this port)
9395

9496
# Provisioning scripts need to be idempotent because they might be called
9597
# multiple times, e.g. when the host VM is being restarted.

pkg/limayaml/limayaml.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,5 @@ type Port struct {
9999
HostPort int `yaml:"hostPort,omitempty"`
100100
HostPortRange [2]int `yaml:"hostPortRange,omitempty"`
101101
Proto Proto `yaml:"proto,omitempty"`
102+
Ignore bool `yaml:"ignore,omitempty"`
102103
}

0 commit comments

Comments
 (0)