hscloud/main.go

71 lines
1.9 KiB
Go

package main
import (
"flag"
"fmt"
"github.com/golang/glog"
"github.com/ybbus/jsonrpc"
)
var (
flagAristaAPI string
flagListenAddress string
flagDebugAddress string
flagCAPath string
flagCertificatePath string
flagKeyPath 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
}
func main() {
flag.StringVar(&flagAristaAPI, "arista_api", "http://admin:password@1.2.3.4:80/command-api", "Arista remote endpoint")
flag.StringVar(&flagListenAddress, "listen_address", "127.0.0.1:42000", "gRPC listen address")
flag.StringVar(&flagDebugAddress, "debug_address", "127.0.0.1:42001", "Debug HTTP listen address, or empty to disable")
flag.StringVar(&flagCAPath, "tls_ca_path", "pki/ca.pem", "Path to PKI CA certificate")
flag.StringVar(&flagCertificatePath, "tls_certificate_path", "pki/service.pem", "Path to PKI service certificate")
flag.StringVar(&flagKeyPath, "tls_key_path", "pki/service-key.pem", "Path to PKI service private key")
flag.Set("logtostderr", "true")
flag.Parse()
arista := &aristaClient{
rpc: jsonrpc.NewClient(flagAristaAPI),
}
opts := &serverOpts{
listenAddress: flagListenAddress,
debugAddress: flagDebugAddress,
tlsCAPath: flagCAPath,
tlsCertificatePath: flagCertificatePath,
tlsKeyPath: flagKeyPath,
}
server, err := newServer(opts, arista)
if err != nil {
glog.Errorf("Could not create server: %v", err)
}
glog.Info("Starting up...")
server.serveForever()
}