DodoApp: Support remote clusters
Change-Id: I6f4e6a0a32cc723b47c96518d83b1ffdb5169f14
diff --git a/core/installer/cmd/dodo_app.go b/core/installer/cmd/dodo_app.go
index 8512691..bcd8a68 100644
--- a/core/installer/cmd/dodo_app.go
+++ b/core/installer/cmd/dodo_app.go
@@ -1,9 +1,14 @@
package main
import (
+ "bytes"
"database/sql"
"encoding/json"
+ "fmt"
+ "io"
"log"
+ "net"
+ "net/http"
"os"
"github.com/giolekva/pcloud/core/installer"
@@ -201,8 +206,7 @@
},
}
vpnKeyGen := installer.NewHeadscaleAPIClient(dodoAppFlags.headscaleAPIAddr)
- // TOOD(gio): implement
- var cnc installer.ClusterNetworkConfigurator
+ cnc := &proxyConfigurator{dodoAppFlags.envAppManagerAddr}
s, err := welcome.NewDodoAppServer(
st,
nf,
@@ -230,3 +234,54 @@
}
return s.Start()
}
+
+type proxyConfigurator struct {
+ apiAddr string
+}
+
+func (pc *proxyConfigurator) AddCluster(name string, ingressIP net.IP) error {
+ return fmt.Errorf("NOT IMPLEMENTED")
+}
+
+func (pc *proxyConfigurator) RemoveCluster(name string, ingressIP net.IP) error {
+ return fmt.Errorf("NOT IMPLEMENTED")
+}
+
+type proxyPair struct {
+ From string `json:"from"`
+ To string `json:"to"`
+}
+
+func (pc *proxyConfigurator) AddProxy(src, dst string) error {
+ var buf bytes.Buffer
+ if err := json.NewEncoder(&buf).Encode(proxyPair{src, dst}); err != nil {
+ return err
+ }
+ resp, err := http.Post(fmt.Sprintf("%s/api/proxy/add", pc.apiAddr), "application/json", &buf)
+ if err != nil {
+ return err
+ }
+ if resp.StatusCode != http.StatusOK {
+ var buf bytes.Buffer
+ io.Copy(&buf, resp.Body)
+ return fmt.Errorf(buf.String())
+ }
+ return nil
+}
+
+func (pc *proxyConfigurator) RemoveProxy(src, dst string) error {
+ var buf bytes.Buffer
+ if err := json.NewEncoder(&buf).Encode(proxyPair{src, dst}); err != nil {
+ return err
+ }
+ resp, err := http.Post(fmt.Sprintf("%s/api/proxy/remove", pc.apiAddr), "application/json", &buf)
+ if err != nil {
+ return err
+ }
+ if resp.StatusCode != http.StatusOK {
+ var buf bytes.Buffer
+ io.Copy(&buf, resp.Body)
+ return fmt.Errorf(buf.String())
+ }
+ return nil
+}