Files
minilb/cmd/minilbctl/service/srvcmd.go

92 lines
2.0 KiB
Go

package service
import (
"context"
"fmt"
"time"
"helmet/pkg/client"
"helmet/pkg/mlbctl"
"github.com/spf13/cobra"
"sigs.k8s.io/yaml"
)
type Tool struct {
cmd *cobra.Command
serviceHelloParams ServiceHelloParams
}
func NewTool() *Tool {
tool := &Tool{}
tool.cmd = &cobra.Command{
Use: "service",
Short: "Service operation",
}
serviceHelloCmd := &cobra.Command{
Use: "hello",
Args: cobra.ExactArgs(1),
Short: "Send and receive hello",
Run: tool.ServiceHello,
}
tool.cmd.AddCommand(serviceHelloCmd)
return tool
}
func (tool *Tool) GetCmd() *cobra.Command {
return tool.cmd
}
type ServiceHelloParams struct {
Hostname string
}
type ServiceHelloResult struct {
Message string `json:"message,omitempty"`
}
func (tool *Tool) ServiceHello(cmd *cobra.Command, args []string) {
tool.serviceHelloParams.Hostname = args[0]
res, err := tool.serviceHello(&tool.serviceHelloParams)
printResponse(res, err)
}
func (tool *Tool) serviceHello(params *ServiceHelloParams) (*ServiceHelloResult, error) {
var err error
res := &ServiceHelloResult{}
ref, err := client.NewReferer(params.Hostname)
if err != nil {
return res, err
}
authCred := client.NewAuthCredential(ref.Userinfo())
conn, cli, err := client.NewClient(ref.Hostinfo(), authCred)
if err != nil {
return res, err
}
defer conn.Close()
ctx, _ := context.WithTimeout(context.Background(), 1*time.Second)
opReq := &mlbctl.GetHelloParams{}
opRes, err := cli.GetHello(ctx, opReq)
if err != nil {
return res, err
}
res.Message = opRes.Message
return res, err
}
func printResponse(res any, err error) {
type Response struct {
Error bool `json:"error" json:"error"`
Message string `json:"message,omitempty" json:"message,omitempty"`
Result any `json:"result,omitempty" json:"result,omitempty"`
}
resp := Response{}
if err != nil {
resp.Error = true
resp.Message = err.Error()
} else {
resp.Result = res
}
respBytes, _ := yaml.Marshal(resp)
fmt.Printf("---\n%s\n", string(respBytes))
}