1
0
Fork 0
hscloud/dc/arista-proxy/main.go

68 lines
1.2 KiB
Go
Raw Normal View History

2018-08-27 19:40:10 +00:00
package main
import (
"flag"
"fmt"
2018-10-25 11:14:18 +00:00
"code.hackerspace.pl/hscloud/go/mirko"
2018-08-27 19:40:10 +00:00
"github.com/golang/glog"
cursedjsonrpc "github.com/q3k/cursedjsonrpc"
2018-10-14 15:25:43 +00:00
pb "code.hackerspace.pl/hscloud/dc/arista-proxy/proto"
2018-08-27 19:40:10 +00:00
)
var (
2018-10-14 15:25:43 +00:00
flagAristaAPI string
2018-08-27 19:40:10 +00:00
)
type aristaClient struct {
rpc cursedjsonrpc.RPCClient
2018-08-27 19:40:10 +00:00
}
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
}
2018-10-14 15:25:43 +00:00
type server struct {
arista *aristaClient
}
2018-08-27 19:40:10 +00:00
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: cursedjsonrpc.NewClient(flagAristaAPI),
2018-08-27 19:40:10 +00:00
}
2018-10-14 15:25:43 +00:00
m := mirko.New()
if err := m.Listen(); err != nil {
glog.Exitf("Listen(): %v", err)
2018-08-27 19:40:10 +00:00
}
2018-10-14 15:25:43 +00:00
s := &server{
arista: arista,
}
pb.RegisterAristaProxyServer(m.GRPC(), s)
if err := m.Serve(); err != nil {
glog.Exitf("Serve(): %v", err)
2018-08-27 19:40:10 +00:00
}
2018-10-14 15:25:43 +00:00
select {}
2018-08-27 19:40:10 +00:00
}