Installer: Move port forwarding config into the apps

Change-Id: I6d70c8ce72d21ebe74d126a680fa66ba6c3f2857
diff --git a/core/installer/app_manager.go b/core/installer/app_manager.go
index fbee783..c5b849f 100644
--- a/core/installer/app_manager.go
+++ b/core/installer/app_manager.go
@@ -203,25 +203,25 @@
 	return ret, nil
 }
 
-func openPorts(ports []PortForward, reservations map[string]reservePortResp, allocators map[string]string) error {
+func openPorts(ports []PortForward, reservations map[string]reservePortResp, allocators map[string]string, ns string) error {
 	for _, p := range ports {
 		var buf bytes.Buffer
 		req := allocatePortReq{
 			Protocol:      p.Protocol,
-			SourcePort:    p.SourcePort,
-			TargetService: p.TargetService,
-			TargetPort:    p.TargetPort,
+			SourcePort:    p.Port,
+			TargetService: fmt.Sprintf("%s/%s", ns, p.Service.Name),
+			TargetPort:    p.Service.Port,
 		}
 		allocator := ""
 		for n, r := range reservations {
-			if p.SourcePort == r.Port {
+			if p.Port == r.Port {
 				allocator = allocators[n]
 				req.Secret = r.Secret
 				break
 			}
 		}
 		if allocator == "" {
-			return fmt.Errorf("Could not find allocator for: %d", p.SourcePort)
+			return fmt.Errorf("Could not find allocator for: %d", p.Port)
 		}
 		if err := json.NewEncoder(&buf).Encode(req); err != nil {
 			return err
@@ -233,21 +233,21 @@
 		if resp.StatusCode != http.StatusOK {
 			var r bytes.Buffer
 			io.Copy(&r, resp.Body)
-			return fmt.Errorf("Could not allocate port %d, status code %d, message: %s", p.SourcePort, resp.StatusCode, r.String())
+			return fmt.Errorf("Could not allocate port %d, status code %d, message: %s", p.Port, resp.StatusCode, r.String())
 		}
 	}
 	return nil
 }
 
-func closePorts(ports []PortForward) error {
+func closePorts(ports []PortForward, ns string) error {
 	var retErr error
 	for _, p := range ports {
 		var buf bytes.Buffer
 		req := removePortReq{
 			Protocol:      p.Protocol,
-			SourcePort:    p.SourcePort,
-			TargetService: p.TargetService,
-			TargetPort:    p.TargetPort,
+			SourcePort:    p.Port,
+			TargetService: fmt.Sprintf("%s/%s", ns, p.Service.Name),
+			TargetPort:    p.Service.Port,
 		}
 		if err := json.NewEncoder(&buf).Encode(req); err != nil {
 			retErr = err
@@ -259,7 +259,7 @@
 			continue
 		}
 		if resp.StatusCode != http.StatusOK {
-			retErr = fmt.Errorf("Could not deallocate port %d, status code: %d", p.SourcePort, resp.StatusCode)
+			retErr = fmt.Errorf("Could not deallocate port %d, status code: %d", p.Port, resp.StatusCode)
 			continue
 		}
 	}
@@ -478,8 +478,8 @@
 	reservators := map[string]string{}
 	allocators := map[string]string{}
 	for _, pf := range rendered.Ports {
-		reservators[portFields[pf.SourcePort]] = pf.ReserveAddr
-		allocators[portFields[pf.SourcePort]] = pf.Allocator
+		reservators[portFields[pf.Port]] = pf.ReserveAddr
+		allocators[portFields[pf.Port]] = pf.Allocator
 	}
 	portReservations, err := reservePorts(reservators)
 	if err != nil {
@@ -526,7 +526,7 @@
 		return ReleaseResources{}, err
 	}
 	// TODO(gio): add ingress-nginx to release resources
-	if err := openPorts(rendered.Ports, portReservations, allocators); err != nil {
+	if err := openPorts(rendered.Ports, portReservations, allocators, release.Namespace); err != nil {
 		return ReleaseResources{}, err
 	}
 	for _, p := range rendered.ClusterProxies {
@@ -719,7 +719,7 @@
 	}); err != nil {
 		return err
 	}
-	if err := closePorts(cfg.PortForward); err != nil {
+	if err := closePorts(cfg.Output.PortForward, cfg.Release.Namespace); err != nil {
 		return err
 	}
 	for _, cp := range cfg.Out.ClusterProxy {
@@ -1091,9 +1091,14 @@
 }
 
 type renderedInstance struct {
+	Release     Release                                 `json:"release"`
 	LocalCharts map[string]helmv2.HelmChartTemplateSpec `json:"localCharts"`
-	PortForward []PortForward                           `json:"portForward"`
 	Out         outRendered                             `json:"out"`
+	Output      outputRendered                          `json:"output"`
+}
+
+type outputRendered struct {
+	PortForward []PortForward `json:"openPort"`
 }
 
 type outRendered struct {