| 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 |
| flagPKIRealm 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.StringVar(&flagPKIRealm, "pki_realm", "svc.cluster.local", "PKI realm") |
| flag.Set("logtostderr", "true") |
| flag.Parse() |
| |
| arista := &aristaClient{ |
| rpc: jsonrpc.NewClient(flagAristaAPI), |
| } |
| |
| opts := &serverOpts{ |
| listenAddress: flagListenAddress, |
| debugAddress: flagDebugAddress, |
| tlsCAPath: flagCAPath, |
| tlsCertificatePath: flagCertificatePath, |
| tlsKeyPath: flagKeyPath, |
| pkiRealm: flagPKIRealm, |
| } |
| server, err := newServer(opts, arista) |
| if err != nil { |
| glog.Errorf("Could not create server: %v", err) |
| } |
| |
| glog.Info("Starting up...") |
| server.serveForever() |
| } |