mirror of
https://github.com/xcat2/confluent.git
synced 2025-09-21 17:48:28 +00:00
111 lines
3.5 KiB
Go
111 lines
3.5 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"flag"
|
|
"os"
|
|
"io"
|
|
"fmt"
|
|
)
|
|
|
|
func get_confluent_server() (string, error) {
|
|
var confluentsrv string
|
|
dcfg, err := os.ReadFile("/etc/confluent/confluent.deploycfg")
|
|
if err == nil {
|
|
dcfglines := bytes.Split(dcfg, []byte("\n"))
|
|
for _, dcfgline := range(dcfglines) {
|
|
dkeyval := bytes.Split(dcfgline, []byte(" "))
|
|
if bytes.Contains(dkeyval[0], []byte("deploy_server")) && (bytes.Contains(dkeyval[1], []byte(".")) || bytes.Contains(dkeyval[1], []byte(":"))) {
|
|
confluentsrv = string(dkeyval[1])
|
|
return confluentsrv, nil
|
|
}
|
|
}
|
|
} else {
|
|
_, err := os.ReadFile("/etc/confluent/confluent.info")
|
|
if err != nil {
|
|
return "Unable to determine Confluent server", err
|
|
}
|
|
}
|
|
return "", err
|
|
}
|
|
func main() {
|
|
var nodename string
|
|
var cacerts string
|
|
var apikey string
|
|
var usejson bool
|
|
var confluentsrv string
|
|
hmacreg := flag.NewFlagSet("hmacregister", flag.ExitOnError)
|
|
hmacreg.StringVar(&apikey, "k", "/etc/confluent/apikey", "Output file for the api key")
|
|
hmacKey := hmacreg.String("i", "", "Identity yaml file")
|
|
hmacreg.StringVar(&cacerts, "c", "/etc/confluent/ca.pem", "Certeficate authorities to use in PEM")
|
|
hmacreg.StringVar(&nodename, "n", "", "Node name")
|
|
hmacreg.StringVar(&confluentsrv, "s", "", "Confluent server to request from")
|
|
|
|
invokeapi := flag.NewFlagSet("invoke", flag.ExitOnError)
|
|
invokeapi.StringVar(&nodename, "n", "", "Node name")
|
|
|
|
invokeapi.StringVar(&cacerts, "c", "/etc/confluent/ca.pem", "Certeficate authorities to use in PEM")
|
|
invokeapi.StringVar(&apikey, "k", "/etc/confluent/confluent.apikey", "File containing Confluent API key")
|
|
invokeapi.BoolVar(&usejson, "j", false, "Request JSON formatted reply")
|
|
outputfile := invokeapi.String("o", "", "Filename to store download to")
|
|
invokeapi.StringVar(&confluentsrv, "s", "", "Confluent server to request from")
|
|
invokedata := invokeapi.String("d", "", "Data to submit")
|
|
invokedatafile := invokeapi.String("i", "", "File containing data to submit")
|
|
|
|
|
|
|
|
if len(os.Args) < 2 {
|
|
panic("Insufficient arguments, no subcommand")
|
|
}
|
|
switch os.Args[1] {
|
|
case "hmacregister":
|
|
var err error
|
|
hmacreg.Parse(os.Args[2:])
|
|
if confluentsrv == "" {
|
|
confluentsrv, err = get_confluent_server()
|
|
}
|
|
password, crypted, hmac, err := genpasshmac(*hmacKey)
|
|
if err != nil { panic(err) }
|
|
//apiclient(cacerts, "/confluent-api/self/registerapikey", apikey, nodename, usejson)
|
|
apiclient, err := NewApiClient(cacerts, "", nodename, confluentsrv)
|
|
if err != nil { panic(err) }
|
|
err = apiclient.RegisterKey(crypted, hmac)
|
|
if err != nil { panic(err) }
|
|
outp, err := os.Create(apikey)
|
|
if err != nil { panic(err) }
|
|
defer outp.Close()
|
|
outp.Write([]byte(password))
|
|
case "invoke":
|
|
var err error
|
|
var body io.Reader
|
|
body = nil
|
|
invokeapi.Parse(os.Args[2:])
|
|
if *invokedata != "" {
|
|
body = bytes.NewBuffer([]byte(*invokedata))
|
|
}
|
|
if *invokedatafile != "" {
|
|
body, err = os.Open(*invokedatafile)
|
|
if err != nil { panic(err) }
|
|
}
|
|
if confluentsrv == "" {
|
|
confluentsrv, err = get_confluent_server()
|
|
}
|
|
apiclient, err := NewApiClient(cacerts, apikey, nodename, confluentsrv)
|
|
if err != nil { panic(err) }
|
|
mime := ""
|
|
if usejson {
|
|
mime = "application/json"
|
|
}
|
|
if *outputfile != "" {
|
|
err := apiclient.Fetch(invokeapi.Arg(0), *outputfile, mime, body)
|
|
if err != nil { panic(err) }
|
|
} else {
|
|
rsp, err := apiclient.GrabText(invokeapi.Arg(0), mime, body)
|
|
if err != nil { panic(err) }
|
|
fmt.Println(rsp)
|
|
}
|
|
default:
|
|
panic("Unrecognized subcommand")
|
|
}
|
|
}
|