mirror of
https://github.com/bmc-toolbox/bmclib.git
synced 2025-06-03 05:14:43 +00:00
Add examples updated for v2 from https://github.com/bmc-toolbox/bmclib/tree/master/examples/v1
This commit is contained in:
parent
742da048b5
commit
78f8c03f75
@ -11,7 +11,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bmc-toolbox/bmclib"
|
bmclib "github.com/bmc-toolbox/bmclib/v2"
|
||||||
"github.com/bombsimon/logrusr/v2"
|
"github.com/bombsimon/logrusr/v2"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
@ -10,8 +10,9 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bmc-toolbox/bmclib"
|
bmclib "github.com/bmc-toolbox/bmclib/v2"
|
||||||
"github.com/bmc-toolbox/bmclib/devices"
|
"github.com/bmc-toolbox/bmclib/v2/constants"
|
||||||
|
"github.com/bmc-toolbox/common"
|
||||||
"github.com/bombsimon/logrusr/v2"
|
"github.com/bombsimon/logrusr/v2"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
@ -79,12 +80,12 @@ func main() {
|
|||||||
|
|
||||||
// SlugBMC hardcoded here, this can be any of the existing component slugs from devices/constants.go
|
// SlugBMC hardcoded here, this can be any of the existing component slugs from devices/constants.go
|
||||||
// assuming that the BMC provider implements the required component firmware update support
|
// assuming that the BMC provider implements the required component firmware update support
|
||||||
taskID, err := cl.FirmwareInstall(ctx, devices.SlugBMC, devices.FirmwareApplyOnReset, true, fh)
|
taskID, err := cl.FirmwareInstall(ctx, common.SlugBMC, constants.FirmwareApplyOnReset, true, fh)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Error(err)
|
l.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
state, err := cl.FirmwareInstallStatus(ctx, taskID, devices.SlugBMC, *firmwareVersion)
|
state, err := cl.FirmwareInstallStatus(ctx, taskID, common.SlugBMC, *firmwareVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
@ -11,7 +11,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bmc-toolbox/bmclib"
|
bmclib "github.com/bmc-toolbox/bmclib/v2"
|
||||||
"github.com/bombsimon/logrusr/v2"
|
"github.com/bombsimon/logrusr/v2"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
@ -49,7 +49,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cl := bmclib.NewClient(*host, strconv.Itoa(*port), *user, *pass, clientOpts...)
|
cl := bmclib.NewClient(*host, strconv.Itoa(*port), *user, *pass, clientOpts...)
|
||||||
cl.Registry.Drivers = cl.Registry.Using("redfish")
|
// cl.Registry.Drivers = cl.Registry.Using("redfish")
|
||||||
|
|
||||||
err := cl.Open(ctx)
|
err := cl.Open(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
94
examples/main.go
Normal file
94
examples/main.go
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"crypto/x509"
|
||||||
|
"flag"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
bmclib "github.com/bmc-toolbox/bmclib/v2"
|
||||||
|
"github.com/bmc-toolbox/bmclib/v2/constants"
|
||||||
|
"github.com/bmc-toolbox/common"
|
||||||
|
"github.com/bombsimon/logrusr/v2"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
user := flag.String("user", "", "Username to login with")
|
||||||
|
pass := flag.String("password", "", "Username to login with")
|
||||||
|
host := flag.String("host", "", "BMC hostname to connect to")
|
||||||
|
port := flag.Int("port", 443, "BMC port to connect to")
|
||||||
|
withSecureTLS := flag.Bool("secure-tls", false, "Enable secure TLS")
|
||||||
|
certPoolPath := flag.String("cert-pool", "", "Path to an file containing x509 CAs. An empty string uses the system CAs. Only takes effect when --secure-tls=true")
|
||||||
|
firmwarePath := flag.String("firmware", "", "The local path of the firmware to install")
|
||||||
|
firmwareVersion := flag.String("version", "", "The firmware version being installed")
|
||||||
|
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
l := logrus.New()
|
||||||
|
l.Level = logrus.DebugLevel
|
||||||
|
logger := logrusr.New(l)
|
||||||
|
|
||||||
|
if *host == "" || *user == "" || *pass == "" {
|
||||||
|
l.Fatal("required host/user/pass parameters not defined")
|
||||||
|
}
|
||||||
|
clientOpts := []bmclib.Option{bmclib.WithLogger(logger)}
|
||||||
|
|
||||||
|
if *withSecureTLS {
|
||||||
|
var pool *x509.CertPool
|
||||||
|
if *certPoolPath != "" {
|
||||||
|
pool = x509.NewCertPool()
|
||||||
|
data, err := ioutil.ReadFile(*certPoolPath)
|
||||||
|
if err != nil {
|
||||||
|
l.Fatal(err)
|
||||||
|
}
|
||||||
|
pool.AppendCertsFromPEM(data)
|
||||||
|
}
|
||||||
|
// a nil pool uses the system certs
|
||||||
|
clientOpts = append(clientOpts, bmclib.WithSecureTLS(pool))
|
||||||
|
}
|
||||||
|
|
||||||
|
cl := bmclib.NewClient(*host, strconv.Itoa(*port), *user, *pass, clientOpts...)
|
||||||
|
err := cl.Open(ctx)
|
||||||
|
if err != nil {
|
||||||
|
l.Fatal(err, "bmc login failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
defer cl.Close(ctx)
|
||||||
|
|
||||||
|
// collect inventory
|
||||||
|
inventory, err := cl.Inventory(ctx)
|
||||||
|
if err != nil {
|
||||||
|
l.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
l.WithField("bmc-version", inventory.BMC.Firmware.Installed).Info()
|
||||||
|
|
||||||
|
// open file handle
|
||||||
|
fh, err := os.Open(*firmwarePath)
|
||||||
|
if err != nil {
|
||||||
|
l.Fatal(err)
|
||||||
|
}
|
||||||
|
defer fh.Close()
|
||||||
|
|
||||||
|
// SlugBMC hardcoded here, this can be any of the existing component slugs from devices/constants.go
|
||||||
|
// assuming that the BMC provider implements the required component firmware update support
|
||||||
|
taskID, err := cl.FirmwareInstall(ctx, common.SlugBMC, constants.FirmwareApplyOnReset, true, fh)
|
||||||
|
if err != nil {
|
||||||
|
l.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
state, err := cl.FirmwareInstallStatus(ctx, taskID, common.SlugBMC, *firmwareVersion)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
l.WithField("state", state).Info("BMC firmware install state")
|
||||||
|
}
|
@ -1,57 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
// This snippet utilizes the older bmclib interface methods
|
|
||||||
// it connects to the bmc and retries its version
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"flag"
|
|
||||||
|
|
||||||
"github.com/bmc-toolbox/bmclib/devices"
|
|
||||||
"github.com/bmc-toolbox/bmclib/discover"
|
|
||||||
"github.com/bombsimon/logrusr/v2"
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
user := flag.String("user", "", "Username to login with")
|
|
||||||
pass := flag.String("password", "", "Username to login with")
|
|
||||||
host := flag.String("host", "", "BMC hostname to connect to")
|
|
||||||
flag.Parse()
|
|
||||||
ctx := context.TODO()
|
|
||||||
|
|
||||||
l := logrus.New()
|
|
||||||
l.Level = logrus.TraceLevel
|
|
||||||
logger := logrusr.New(l)
|
|
||||||
if *host == "" || *user == "" || *pass == "" {
|
|
||||||
l.Fatal("required host/user/pass parameters not defined")
|
|
||||||
}
|
|
||||||
|
|
||||||
c, err := discover.ScanAndConnect(
|
|
||||||
*host,
|
|
||||||
*user,
|
|
||||||
*pass,
|
|
||||||
discover.WithContext(ctx),
|
|
||||||
discover.WithLogger(logger),
|
|
||||||
)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
l.WithError(err).Fatal("Error connecting to bmc")
|
|
||||||
}
|
|
||||||
|
|
||||||
bmc := c.(devices.Bmc)
|
|
||||||
|
|
||||||
err = bmc.CheckCredentials()
|
|
||||||
if err != nil {
|
|
||||||
l.WithError(err).Fatal("Failed to validate credentials")
|
|
||||||
}
|
|
||||||
|
|
||||||
defer bmc.Close(ctx)
|
|
||||||
|
|
||||||
s, err := bmc.Serial()
|
|
||||||
if err != nil {
|
|
||||||
l.WithError(err).Fatal("Error getting bmc serial")
|
|
||||||
}
|
|
||||||
l.WithField("serial", s).Info()
|
|
||||||
|
|
||||||
}
|
|
@ -1,121 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"crypto/x509"
|
|
||||||
"flag"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/bmc-toolbox/bmclib/devices"
|
|
||||||
"github.com/bmc-toolbox/bmclib/discover"
|
|
||||||
"github.com/bombsimon/logrusr/v2"
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
|
||||||
|
|
||||||
// bmc lib takes in its opts a logger (https://github.com/go-logr/logr).
|
|
||||||
// If you do not define one, by default, it uses logrus (https://github.com/go-logr/logr)
|
|
||||||
// See the logr docs for more details, but the following implementations already exist:
|
|
||||||
// github.com/google/glog: glogr
|
|
||||||
// k8s.io/klog: klogr
|
|
||||||
// go.uber.org/zap: zapr
|
|
||||||
// log (the Go standard library logger): stdr
|
|
||||||
// github.com/sirupsen/logrus: logrusr
|
|
||||||
// github.com/wojas/genericr: genericr
|
|
||||||
func main() {
|
|
||||||
user := flag.String("user", "", "Username to login with")
|
|
||||||
pass := flag.String("password", "", "Username to login with")
|
|
||||||
host := flag.String("host", "", "BMC hostname to connect to")
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
logger := logrus.New()
|
|
||||||
logger.SetLevel(logrus.DebugLevel)
|
|
||||||
//logger.SetFormatter(&logrus.JSONFormatter{})
|
|
||||||
|
|
||||||
logger.Info("printing status with a user defined logger")
|
|
||||||
conn, err := withUserDefinedLogger(*host, *user, *pass, logger)
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
printStatus(conn, logger)
|
|
||||||
|
|
||||||
logger.Info("printing status with the default builtin logger")
|
|
||||||
os.Setenv("BMCLIB_LOG_LEVEL", "trace")
|
|
||||||
conn, err = withDefaultBuiltinLogger(*host, *user, *pass)
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
printStatus(conn, logger)
|
|
||||||
|
|
||||||
logger.Info("printing status with the default secure TLS")
|
|
||||||
conn, err = withSecureTLS(*host, *user, *pass, nil)
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
printStatus(conn, logger)
|
|
||||||
}
|
|
||||||
|
|
||||||
func withUserDefinedLogger(ip, user, pass string, logger *logrus.Logger) (interface{}, error) {
|
|
||||||
myLog := logrusr.New(logger)
|
|
||||||
|
|
||||||
return discover.ScanAndConnect(ip, user, pass, discover.WithLogger(myLog))
|
|
||||||
}
|
|
||||||
|
|
||||||
func withDefaultBuiltinLogger(ip, user, pass string) (interface{}, error) {
|
|
||||||
return discover.ScanAndConnect(ip, user, pass)
|
|
||||||
}
|
|
||||||
|
|
||||||
func withSecureTLS(ip, user, pass string, pool *x509.CertPool) (interface{}, error) {
|
|
||||||
return discover.ScanAndConnect(ip, user, pass, discover.WithSecureTLS(pool))
|
|
||||||
}
|
|
||||||
|
|
||||||
func printStatus(connection interface{}, logger *logrus.Logger) {
|
|
||||||
switch con := connection.(type) {
|
|
||||||
case devices.Bmc:
|
|
||||||
conn := con
|
|
||||||
defer conn.Close(context.TODO())
|
|
||||||
|
|
||||||
sr, err := conn.Serial()
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
logger.WithFields(logrus.Fields{"serial": sr}).Info("serial")
|
|
||||||
|
|
||||||
md, err := conn.Model()
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
logger.WithFields(logrus.Fields{"model": md}).Info("model")
|
|
||||||
|
|
||||||
mm, err := conn.Memory()
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
logger.WithFields(logrus.Fields{"memory": mm}).Info("memory")
|
|
||||||
|
|
||||||
st, err := conn.Status()
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
logger.WithFields(logrus.Fields{"status": st}).Info("status")
|
|
||||||
|
|
||||||
hw := conn.HardwareType()
|
|
||||||
logger.WithFields(logrus.Fields{"hwType": hw}).Info("hwType")
|
|
||||||
|
|
||||||
state, err := conn.PowerState()
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
logger.WithFields(logrus.Fields{"state": state}).Info("state")
|
|
||||||
|
|
||||||
case devices.Cmc:
|
|
||||||
cmc := con
|
|
||||||
defer cmc.Close()
|
|
||||||
sts, err := cmc.Status()
|
|
||||||
if err != nil {
|
|
||||||
logger.Fatal(err)
|
|
||||||
}
|
|
||||||
logger.WithFields(logrus.Fields{"status": sts}).Info("status")
|
|
||||||
default:
|
|
||||||
logger.Fatal("Unknown device")
|
|
||||||
}
|
|
||||||
}
|
|
49
examples/reset_bmc/reset_bmc.go
Normal file
49
examples/reset_bmc/reset_bmc.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/bmc-toolbox/bmclib/v2"
|
||||||
|
"github.com/bombsimon/logrusr/v2"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
// set BMC parameters here
|
||||||
|
host := "10.211.132.157"
|
||||||
|
port := ""
|
||||||
|
user := "root"
|
||||||
|
pass := "yxvZdxAQ38ZWlZ"
|
||||||
|
|
||||||
|
l := logrus.New()
|
||||||
|
l.Level = logrus.DebugLevel
|
||||||
|
logger := logrusr.New(l)
|
||||||
|
|
||||||
|
if host == "" || user == "" || pass == "" {
|
||||||
|
log.Fatal("required host/user/pass parameters not defined")
|
||||||
|
}
|
||||||
|
|
||||||
|
os.Setenv("DEBUG_BMCLIB", "true")
|
||||||
|
defer os.Unsetenv("DEBUG_BMCLIB")
|
||||||
|
|
||||||
|
cl := bmclib.NewClient(host, port, user, pass, bmclib.WithLogger(logger))
|
||||||
|
|
||||||
|
err := cl.Open(ctx)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err, "bmc login failed")
|
||||||
|
}
|
||||||
|
|
||||||
|
defer cl.Close(ctx)
|
||||||
|
|
||||||
|
_, err = cl.ResetBMC(ctx, "GracefulRestart")
|
||||||
|
if err != nil {
|
||||||
|
l.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -8,7 +8,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bmc-toolbox/bmclib"
|
"github.com/bmc-toolbox/bmclib/v2"
|
||||||
"github.com/bombsimon/logrusr/v2"
|
"github.com/bombsimon/logrusr/v2"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
Loading…
Reference in New Issue
Block a user