Skip to content

daixijun/go-salt

Repository files navigation

Go SaltStack

go 调用 salt-api 接口

安装

go get github.com/daixijun/go-salt

使用

package 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)
  }
 }

支持的接口

About

Golang saltstack sdk

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages