go/svc/(dc stuff) -> dc/
We want to start keeping codebases separated per 'team'/intent, to then
have simple OWNER files/trees to specify review rules.
This means dc/ stuff can all be OWNED by q3k, and review will only
involve a +1 for style/readability, instead of a +2 for approval.
Change-Id: I05afbc4e1018944b841ec0d88cd24cc95bec8bf1
diff --git a/dc/arista-proxy/main.go b/dc/arista-proxy/main.go
new file mode 100644
index 0000000..ccd1046
--- /dev/null
+++ b/dc/arista-proxy/main.go
@@ -0,0 +1,67 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+
+ "code.hackerspace.pl/hscloud/go/mirko"
+ "github.com/golang/glog"
+ "github.com/ybbus/jsonrpc"
+
+ pb "code.hackerspace.pl/hscloud/dc/arista-proxy/proto"
+)
+
+var (
+ flagAristaAPI string
+)
+
+type aristaClient struct {
+ rpc jsonrpc.RPCClient
+}
+
+func (c *aristaClient) structuredCall(res interface{}, command ...string) error {
+ cmd := struct {
+ Version int `json:"version"`
+ Cmds []string `json:"cmds"`
+ Format string `json:"format"`
+ }{
+ Version: 1,
+ Cmds: command,
+ Format: "json",
+ }
+
+ err := c.rpc.CallFor(res, "runCmds", cmd)
+ if err != nil {
+ return fmt.Errorf("could not execute structured call: %v", err)
+ }
+ return nil
+}
+
+type server struct {
+ arista *aristaClient
+}
+
+func main() {
+ flag.StringVar(&flagAristaAPI, "arista_api", "http://admin:password@1.2.3.4:80/command-api", "Arista remote endpoint")
+ flag.Parse()
+
+ arista := &aristaClient{
+ rpc: jsonrpc.NewClient(flagAristaAPI),
+ }
+
+ m := mirko.New()
+ if err := m.Listen(); err != nil {
+ glog.Exitf("Listen(): %v", err)
+ }
+
+ s := &server{
+ arista: arista,
+ }
+ pb.RegisterAristaProxyServer(m.GRPC(), s)
+
+ if err := m.Serve(); err != nil {
+ glog.Exitf("Serve(): %v", err)
+ }
+
+ select {}
+}