go 调用 salt-api 接口
go get github.com/daixijun/go-saltpackage main
import (
"context"
"fmt"
salt "github.com/daixijun/go-salt/v2"
)
func main() {
ctx := context.TODO()
// 初始化客户端
client := salt.NewClient(
salt.WithEndpoint("https://saltapi.example.com"),
salt.WithUsername("saltapi"),
salt.WithPassword("saltapi"),
salt.WithAuthBackend("pam"),
salt.WithInsecure(),
)
if err := client.Login(ctx); err != nil {
panic(err)
}
// 列表 minions
minions, err := client.ListMinions(ctx)
if err != nil {
panic(err)
}
fmt.Println(minions)
// 执行命令
resp, err := client.LocalClient(ctx, "cmd.run", []string{"whoami"}, salt.WithGlobTarget("minion1"))
if err != nil {
panic(err)
}
fmt.Println(resp)
// 监听事件流
eventChan, err := client.Events(ctx)
if err != nil {
panic(err)
}
defer close(eventChan)
for event := range eventChan {
fmt.Printf("Event: %s\n", event)
}
// WebSocket 连接
wsClient, err := client.NewWebSocket(ctx)
if err != nil {
panic(err)
}
defer wsClient.Close()
// 发送 ready 信号以开始接收事件
if err := wsClient.SendReady(ctx); err != nil {
panic(err)
}
// 监听 WebSocket 事件
for {
event, err := wsClient.ReceiveEvent(ctx)
if err != nil {
break
}
fmt.Printf("WebSocket Event: %s\n", event)
}
}