port-allocator: allocates ports on preconfigured ingress-nginx
Replacement of /core/installer/tcp-udp-transport
Change-Id: I3d116b0f4508b462398f69e980ad55771dc88b7c
diff --git a/core/installer/app.go b/core/installer/app.go
index 64c4078..b710acc 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -78,6 +78,7 @@
ingressClass: string
certificateIssuer: string | *""
domain: string
+ allocatePortAddr: string
}
networks: {
@@ -86,11 +87,13 @@
ingressClass: "\(global.pcloudEnvName)-ingress-public"
certificateIssuer: "\(global.id)-public"
domain: global.domain
+ allocatePortAddr: "http://port-allocator.\(global.pcloudEnvName)-ingress-public.svc.cluster.local/api/allocate"
}
private: #Network & {
name: "Private"
ingressClass: "\(global.id)-ingress-private"
domain: global.privateDomain
+ allocatePortAddr: "http://port-allocator.\(global.id)-ingress-private.svc.cluster.local/api/allocate"
}
}
@@ -127,8 +130,20 @@
#Release: {
namespace: string
+ repoAddr: string
+ appDir: string
}
+#PortForward: {
+ allocator: string
+ protocol: "TCP" | "UDP" | *"TCP"
+ sourcePort: int
+ targetService: string
+ targetPort: int
+}
+
+portForward: [...#PortForward] | *[]
+
global: #Global
release: #Release
@@ -303,6 +318,7 @@
type Rendered struct {
Readme string
Resources map[string][]byte
+ Ports []PortForward
}
type App interface {
@@ -372,9 +388,18 @@
return []string{a.namespace}
}
+type PortForward struct {
+ Allocator string `json:"allocator"`
+ Protocol string `json:"protocol"`
+ SourcePort int `json:"sourcePort"`
+ TargetService string `json:"targetService"`
+ TargetPort int `json:"targetPort"`
+}
+
func (a cueApp) Render(derived Derived) (Rendered, error) {
ret := Rendered{
Resources: make(map[string][]byte),
+ Ports: make([]PortForward, 0),
}
var buf bytes.Buffer
if err := json.NewEncoder(&buf).Encode(derived); err != nil {
@@ -394,6 +419,9 @@
return Rendered{}, err
}
ret.Readme = readme
+ if err := res.LookupPath(cue.ParsePath("portForward")).Decode(&ret.Ports); err != nil {
+ return Rendered{}, err
+ }
output := res.LookupPath(cue.ParsePath("output"))
i, err := output.Fields()
if err != nil {