Fixed formatting via gofmt

Signed-off-by: David J. Allen <davidallendj@gmail.com>
This commit is contained in:
David Allen 2023-09-15 08:32:41 -06:00
parent ac9556a526
commit b3368e5264
11 changed files with 94 additions and 103 deletions

View file

@ -10,9 +10,8 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var collectCmd = &cobra.Command{ var collectCmd = &cobra.Command{
Use: "collect", Use: "collect",
Short: "Query information about BMC", Short: "Query information about BMC",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
// make application logger // make application logger
@ -28,14 +27,14 @@ var collectCmd = &cobra.Command{
threads = mathutil.Clamp(len(probeStates), 1, 255) threads = mathutil.Clamp(len(probeStates), 1, 255)
} }
q := &magellan.QueryParams{ q := &magellan.QueryParams{
User: user, User: user,
Pass: pass, Pass: pass,
Drivers: drivers, Drivers: drivers,
Preferred: preferredDriver, Preferred: preferredDriver,
Timeout: timeout, Timeout: timeout,
Threads: threads, Threads: threads,
Verbose: verbose, Verbose: verbose,
WithSecureTLS: withSecureTLS, WithSecureTLS: withSecureTLS,
} }
magellan.CollectInfo(&probeStates, l, q) magellan.CollectInfo(&probeStates, l, q)
@ -47,7 +46,7 @@ var collectCmd = &cobra.Command{
}, },
} }
func init(){ func init() {
collectCmd.PersistentFlags().StringSliceVar(&drivers, "driver", []string{"redfish"}, "set the driver(s) and fallback drivers to use") collectCmd.PersistentFlags().StringSliceVar(&drivers, "driver", []string{"redfish"}, "set the driver(s) and fallback drivers to use")
collectCmd.PersistentFlags().StringVar(&smd.Host, "host", smd.Host, "set the host to the smd API") collectCmd.PersistentFlags().StringVar(&smd.Host, "host", smd.Host, "set the host to the smd API")
collectCmd.PersistentFlags().IntVar(&smd.Port, "port", smd.Port, "set the port to the smd API") collectCmd.PersistentFlags().IntVar(&smd.Port, "port", smd.Port, "set the port to the smd API")
@ -58,4 +57,4 @@ func init(){
collectCmd.PersistentFlags().BoolVar(&withSecureTLS, "secure-tls", false, "enable secure TLS") collectCmd.PersistentFlags().BoolVar(&withSecureTLS, "secure-tls", false, "enable secure TLS")
collectCmd.PersistentFlags().StringVar(&certPoolFile, "cert-pool", "", "path to CA cert. (defaults to system CAs; used with --secure-tls=true)") collectCmd.PersistentFlags().StringVar(&certPoolFile, "cert-pool", "", "path to CA cert. (defaults to system CAs; used with --secure-tls=true)")
rootCmd.AddCommand(collectCmd) rootCmd.AddCommand(collectCmd)
} }

View file

@ -8,9 +8,8 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var listCmd = &cobra.Command{ var listCmd = &cobra.Command{
Use: "list", Use: "list",
Short: "List information from scan", Short: "List information from scan",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
probeResults, err := sqlite.GetProbeResults(dbpath) probeResults, err := sqlite.GetProbeResults(dbpath)
@ -25,4 +24,4 @@ var listCmd = &cobra.Command{
func init() { func init() {
rootCmd.AddCommand(listCmd) rootCmd.AddCommand(listCmd)
} }

View file

@ -8,19 +8,19 @@ import (
) )
var ( var (
timeout int timeout int
threads int threads int
ports []int ports []int
hosts []string hosts []string
withSecureTLS bool withSecureTLS bool
certPoolFile string certPoolFile string
user string user string
pass string pass string
dbpath string dbpath string
drivers []string drivers []string
preferredDriver string preferredDriver string
ipmitoolPath string ipmitoolPath string
verbose bool verbose bool
) )
// TODO: discover bmc's on network (dora) // TODO: discover bmc's on network (dora)

View file

@ -9,23 +9,23 @@ import (
) )
const ( const (
Host = "http://localhost" Host = "http://localhost"
DbType = "sqlite3" DbType = "sqlite3"
DbPath = "../data/assets.db" DbPath = "../data/assets.db"
BaseEndpoint = "/v1" BaseEndpoint = "/v1"
Port = 8000 Port = 8000
) )
type ScannedResult struct { type ScannedResult struct {
id string id string
site any site any
cidr string cidr string
ip string ip string
port int port int
protocol string protocol string
scanner string scanner string
state string state string
updated string updated string
} }
func makeEndpointUrl(endpoint string) string { func makeEndpointUrl(endpoint string) string {
@ -67,8 +67,8 @@ func LoadScannedPortsFromDB(dbPath string, dbType string) {
for rows.Next() { for rows.Next() {
var r ScannedResult var r ScannedResult
rows.Scan( rows.Scan(
&r.id, &r.site, &r.cidr, &r.ip, &r.port, &r.protocol, &r.scanner, &r.id, &r.site, &r.cidr, &r.ip, &r.port, &r.protocol, &r.scanner,
&r.state, &r.updated, &r.state, &r.updated,
) )
} }
} }

View file

@ -10,12 +10,11 @@ import (
) )
var ( var (
Host = "http://localhost" Host = "http://localhost"
BaseEndpoint = "/hsm/v2" BaseEndpoint = "/hsm/v2"
Port = 27779 Port = 27779
) )
func makeEndpointUrl(endpoint string) string { func makeEndpointUrl(endpoint string) string {
return Host + ":" + fmt.Sprint(Port) + BaseEndpoint + endpoint return Host + ":" + fmt.Sprint(Port) + BaseEndpoint + endpoint
} }
@ -49,7 +48,7 @@ func AddRedfishEndpoint(data []byte, headers map[string]string) error {
// var ep hms.RedfishEP // var ep hms.RedfishEP
// _ = ep // _ = ep
// Add redfish endpoint via POST `/hsm/v2/Inventory/RedfishEndpoints` endpoint // Add redfish endpoint via POST `/hsm/v2/Inventory/RedfishEndpoints` endpoint
url := makeEndpointUrl("/Inventory/RedfishEndpoints") url := makeEndpointUrl("/Inventory/RedfishEndpoints")
res, body, _ := api.MakeRequest(url, "POST", data, headers) res, body, _ := api.MakeRequest(url, "POST", data, headers)
fmt.Println("smd url: ", url) fmt.Println("smd url: ", url)
@ -60,4 +59,4 @@ func AddRedfishEndpoint(data []byte, headers map[string]string) error {
func UpdateRedfishEndpoint() { func UpdateRedfishEndpoint() {
// Update redfish endpoint via PUT `/hsm/v2/Inventory/RedfishEndpoints` endpoint // Update redfish endpoint via PUT `/hsm/v2/Inventory/RedfishEndpoints` endpoint
} }

View file

@ -7,7 +7,6 @@ import (
"net/http" "net/http"
) )
func MakeRequest(url string, httpMethod string, body []byte, headers map[string]string) (*http.Response, []byte, error) { func MakeRequest(url string, httpMethod string, body []byte, headers map[string]string) (*http.Response, []byte, error) {
// url := getSmdEndpointUrl(endpoint) // url := getSmdEndpointUrl(endpoint)
req, _ := http.NewRequest(httpMethod, url, bytes.NewBuffer(body)) req, _ := http.NewRequest(httpMethod, url, bytes.NewBuffer(body))
@ -25,4 +24,4 @@ func MakeRequest(url string, httpMethod string, body []byte, headers map[string]
return nil, nil, fmt.Errorf("could not read response body: %v", err) return nil, nil, fmt.Errorf("could not read response body: %v", err)
} }
return res, b, err return res, b, err
} }

View file

@ -23,9 +23,9 @@ import (
) )
const ( const (
IPMI_PORT = 623 IPMI_PORT = 623
SSH_PORT = 22 SSH_PORT = 22
HTTPS_PORT = 443 HTTPS_PORT = 443
) )
type BMCProbeResult struct { type BMCProbeResult struct {
@ -42,13 +42,13 @@ type QueryParams struct {
User string User string
Pass string Pass string
Drivers []string Drivers []string
Threads int Threads int
Preferred string Preferred string
Timeout int Timeout int
WithSecureTLS bool WithSecureTLS bool
CertPoolFile string CertPoolFile string
Verbose bool Verbose bool
IpmitoolPath string IpmitoolPath string
} }
func NewClient(l *Logger, q *QueryParams) (*bmclib.Client, error) { func NewClient(l *Logger, q *QueryParams) (*bmclib.Client, error) {
@ -113,18 +113,18 @@ func CollectInfo(probeStates *[]BMCProbeResult, l *Logger, q *QueryParams) error
if len(*probeStates) <= 0 { if len(*probeStates) <= 0 {
return fmt.Errorf("no probe states found") return fmt.Errorf("no probe states found")
} }
// generate custom xnames for bmcs // generate custom xnames for bmcs
node := xnames.Node{ node := xnames.Node{
Cabinet: 1000, Cabinet: 1000,
Chassis: 1, Chassis: 1,
ComputeModule: 7, ComputeModule: 7,
NodeBMC: -1, NodeBMC: -1,
} }
found := make([]string, 0, len(*probeStates)) found := make([]string, 0, len(*probeStates))
done := make(chan struct{}, q.Threads+1) done := make(chan struct{}, q.Threads+1)
chanProbeState := make(chan BMCProbeResult, q.Threads+1) chanProbeState := make(chan BMCProbeResult, q.Threads+1)
// collect bmc information asynchronously // collect bmc information asynchronously
var wg sync.WaitGroup var wg sync.WaitGroup
@ -132,18 +132,18 @@ func CollectInfo(probeStates *[]BMCProbeResult, l *Logger, q *QueryParams) error
for i := 0; i < q.Threads; i++ { for i := 0; i < q.Threads; i++ {
go func() { go func() {
for { for {
ps, ok := <- chanProbeState ps, ok := <-chanProbeState
if !ok { if !ok {
wg.Done() wg.Done()
return return
} }
q.Host = ps.Host q.Host = ps.Host
q.Port = ps.Port q.Port = ps.Port
client, err := NewClient(l, q) client, err := NewClient(l, q)
if err != nil { if err != nil {
l.Log.Errorf("could not make client: %v", err) l.Log.Errorf("could not make client: %v", err)
continue continue
} }
// metadata // metadata
@ -155,7 +155,7 @@ func CollectInfo(probeStates *[]BMCProbeResult, l *Logger, q *QueryParams) error
// inventories // inventories
inventory, err := QueryInventory(client, l, q) inventory, err := QueryInventory(client, l, q)
if err != nil { if err != nil {
l.Log.Errorf("could not query inventory (%v:%v): %v", q.Host, q.Port, err) l.Log.Errorf("could not query inventory (%v:%v): %v", q.Host, q.Port, err)
} }
// chassis // chassis
@ -171,15 +171,15 @@ func CollectInfo(probeStates *[]BMCProbeResult, l *Logger, q *QueryParams) error
headers["Content-Type"] = "application/json" headers["Content-Type"] = "application/json"
data := make(map[string]any) data := make(map[string]any)
data["ID"] = fmt.Sprintf("%v", node.String()[:len(node.String())-2]) data["ID"] = fmt.Sprintf("%v", node.String()[:len(node.String())-2])
data["Type"] = "" data["Type"] = ""
data["Name"] = "" data["Name"] = ""
data["FQDN"] = ps.Host data["FQDN"] = ps.Host
data["User"] = q.User data["User"] = q.User
data["Password"] = q.Pass data["Password"] = q.Pass
data["RediscoverOnUpdate"] = false data["RediscoverOnUpdate"] = false
data["Inventory"] = inventory data["Inventory"] = inventory
data["Chassis"] = chassis data["Chassis"] = chassis
b, err := json.MarshalIndent(data, "", " ") b, err := json.MarshalIndent(data, "", " ")
if err != nil { if err != nil {
@ -222,7 +222,7 @@ func CollectInfo(probeStates *[]BMCProbeResult, l *Logger, q *QueryParams) error
for _, ps := range *probeStates { for _, ps := range *probeStates {
// skip if found info from host // skip if found info from host
foundHost := slices.Index(found, ps.Host) foundHost := slices.Index(found, ps.Host)
if !ps.State || foundHost >= 0{ if !ps.State || foundHost >= 0 {
continue continue
} }
chanProbeState <- ps chanProbeState <- ps
@ -388,11 +388,11 @@ func QueryBios(client *bmclib.Client, l *Logger, q *QueryParams) ([]byte, error)
func QueryEthernetInterfaces(client *bmclib.Client, l *Logger, q *QueryParams) ([]byte, error) { func QueryEthernetInterfaces(client *bmclib.Client, l *Logger, q *QueryParams) ([]byte, error) {
config := gofish.ClientConfig{ config := gofish.ClientConfig{
Endpoint: fmt.Sprintf("https://%s:%d", q.Host, q.Port), Endpoint: fmt.Sprintf("https://%s:%d", q.Host, q.Port),
Username: q.User, Username: q.User,
Password: q.Pass, Password: q.Pass,
Insecure: !q.WithSecureTLS, Insecure: !q.WithSecureTLS,
TLSHandshakeTimeout: q.Timeout, TLSHandshakeTimeout: q.Timeout,
} }
c, err := gofish.Connect(config) c, err := gofish.Connect(config)
if err != nil { if err != nil {
@ -417,12 +417,12 @@ func QueryChassis(q *QueryParams) ([]byte, error) {
url += fmt.Sprintf("%s:%s@", q.User, q.Pass) url += fmt.Sprintf("%s:%s@", q.User, q.Pass)
} }
url += fmt.Sprintf("%s:%d", q.Host, q.Port) url += fmt.Sprintf("%s:%d", q.Host, q.Port)
config := gofish.ClientConfig { config := gofish.ClientConfig{
Endpoint: url, Endpoint: url,
Username: q.User, Username: q.User,
Password: q.Pass, Password: q.Pass,
Insecure: !q.WithSecureTLS, Insecure: !q.WithSecureTLS,
TLSHandshakeTimeout: q.Timeout, TLSHandshakeTimeout: q.Timeout,
} }
c, err := gofish.Connect(config) c, err := gofish.Connect(config)
if err != nil { if err != nil {

View file

@ -1 +1 @@
package postgresql package postgresql

View file

@ -58,4 +58,4 @@ func GetProbeResults(path string) ([]magellan.BMCProbeResult, error) {
return nil, fmt.Errorf("could not retrieve probes: %v", err) return nil, fmt.Errorf("could not retrieve probes: %v", err)
} }
return results, nil return results, nil
} }

View file

@ -4,23 +4,19 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
type Logger struct { type Logger struct {
Log *logrus.Logger Log *logrus.Logger
Path string Path string
} }
func NewLogger(l *logrus.Logger, level logrus.Level) *Logger { func NewLogger(l *logrus.Logger, level logrus.Level) *Logger {
l.SetLevel(level) l.SetLevel(level)
return &Logger{ return &Logger{
Log: logrus.New(), Log: logrus.New(),
Path: "", Path: "",
} }
} }
func (l *Logger) WriteFile(path string) {
func (l *Logger)WriteFile(path string) {
} }

View file

@ -7,7 +7,6 @@ import (
"time" "time"
) )
func rawConnect(host string, ports []int, timeout int, keepOpenOnly bool) []BMCProbeResult { func rawConnect(host string, ports []int, timeout int, keepOpenOnly bool) []BMCProbeResult {
results := []BMCProbeResult{} results := []BMCProbeResult{}
for _, p := range ports { for _, p := range ports {
@ -52,11 +51,11 @@ func GenerateHosts(subnet string, begin uint8, end uint8) []string {
} }
func ScanForAssets(hosts []string, ports []int, threads int, timeout int) []BMCProbeResult { func ScanForAssets(hosts []string, ports []int, threads int, timeout int) []BMCProbeResult {
results := make([]BMCProbeResult, 0, len(hosts)) results := make([]BMCProbeResult, 0, len(hosts))
done := make(chan struct{}, threads+1) done := make(chan struct{}, threads+1)
chanHost := make(chan string, threads+1) chanHost := make(chan string, threads+1)
// chanPort := make(chan int, threads+1) // chanPort := make(chan int, threads+1)
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(threads) wg.Add(threads)
for i := 0; i < threads; i++ { for i := 0; i < threads; i++ {
@ -93,4 +92,4 @@ func ScanForAssets(hosts []string, ports []int, threads int, timeout int) []BMCP
func GetDefaultPorts() []int { func GetDefaultPorts() []int {
return []int{HTTPS_PORT, IPMI_PORT} return []int{HTTPS_PORT, IPMI_PORT}
} }