learning_go/ceph/ceph.go
Alexander Pivkin 13cd379d1a sdf
2025-09-05 18:36:17 +03:00

63 lines
1.4 KiB
Go

package main
import (
"encoding/json"
"fmt"
"log"
"github.com/ceph/go-ceph/rados"
)
func makeMonQuery(cephConn *cephConnection, query map[string]string) []byte {
monJson, err := json.Marshal(query)
if err != nil {
log.Fatalf("Can't marshal json mon query. Error: %v", err)
}
monRawAnswer, _, err := cephConn.conn.MonCommand(monJson)
if err != nil {
log.Fatalf("Failed exec monCommand. Error: %v", err)
}
return monRawAnswer
}
func getPoolSize(cephConn *cephConnection, params string) Poolinfo {
monRawAnswer := makeMonQuery(cephConn, map[string]string{"prefix": "osd pool get", "pool": params,
"format": "json", "var": "size"})
monAnswer := Poolinfo{}
if err := json.Unmarshal([]byte(monRawAnswer), &monAnswer); err != nil {
log.Fatalf("Can't parse monitor answer. Error: %v", err)
}
return monAnswer
}
func main() {
var connect cephConnection
var err error
var poolInfo Poolinfo
fmt.Println("Creating connection object")
connect.conn,err = rados.NewConn()
if err != nil {
log.Fatal("Cannot create Connection object\n")
}
connect.conn.ReadConfigFile("/etc/ceph/ceph.conf")
connect.conn.Connect()
defer connect.conn.Shutdown()
poolInfo = getPoolSize(&connect,"test")
fmt.Println(poolInfo)
// poolnames,err := connect.conn.ListPools()
// if err != nil {
// log.Fatal("Cannot list pools")
// }
// for i,j := range poolnames {
// fmt.Printf("%d %s\n",i,j)
}