From cea5d31f5964599aabd02c435cb8a2c80bb3a71d Mon Sep 17 00:00:00 2001 From: Joel Rebello Date: Mon, 25 Sep 2023 12:29:35 +0200 Subject: [PATCH 1/3] client: expose redfish etag match header disable parameter --- option.go | 6 ++++++ providers/redfish/redfish.go | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/option.go b/option.go index f79cab5f..79447e40 100644 --- a/option.go +++ b/option.go @@ -111,6 +111,12 @@ func WithRedfishUseBasicAuth(useBasicAuth bool) Option { } } +func WithRedfishEtagMatchDisabled(d bool) Option { + return func(args *Client) { + args.providerConfig.gofish.DisableEtagMatch = d + } +} + func WithIntelAMTHostScheme(hostScheme string) Option { return func(args *Client) { args.providerConfig.intelamt.HostScheme = hostScheme diff --git a/providers/redfish/redfish.go b/providers/redfish/redfish.go index 22fc4e19..1a982af0 100644 --- a/providers/redfish/redfish.go +++ b/providers/redfish/redfish.go @@ -58,8 +58,8 @@ type Config struct { VersionsNotCompatible []string RootCAs *x509.CertPool UseBasicAuth bool - // WithEtagMatchDisabled disables the If-Match Etag header from being included by the Gofish driver. - disableEtagMatch bool + // DisableEtagMatch disables the If-Match Etag header from being included by the Gofish driver. + DisableEtagMatch bool } // Option for setting optional Client values @@ -100,7 +100,7 @@ func WithUseBasicAuth(useBasicAuth bool) Option { // As of the current implementation this disables the header for POST/PATCH requests to the System entity endpoints. func WithEtagMatchDisabled(d bool) Option { return func(c *Config) { - c.disableEtagMatch = d + c.DisableEtagMatch = d } } @@ -118,7 +118,7 @@ func New(host, user, pass string, log logr.Logger, opts ...Option) *Conn { rfOpts := []redfishwrapper.Option{ redfishwrapper.WithHTTPClient(defaultConfig.HttpClient), redfishwrapper.WithVersionsNotCompatible(defaultConfig.VersionsNotCompatible), - redfishwrapper.WithEtagMatchDisabled(defaultConfig.disableEtagMatch), + redfishwrapper.WithEtagMatchDisabled(defaultConfig.DisableEtagMatch), } if defaultConfig.RootCAs != nil { From e69320eb49d2238dd2247a9e0b5b54edd55ef78f Mon Sep 17 00:00:00 2001 From: Joel Rebello Date: Mon, 25 Sep 2023 12:30:14 +0200 Subject: [PATCH 2/3] client: move provider register methods into separate methods --- client.go | 109 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 86 insertions(+), 23 deletions(-) diff --git a/client.go b/client.go index 437a919d..51b23801 100644 --- a/client.go +++ b/client.go @@ -145,38 +145,37 @@ func (c *Client) registerRPCProvider() error { return nil } -func (c *Client) registerProviders() { - // register the rpc provider - // without the consumer URL there is no way to send RPC requests. - if c.providerConfig.rpc.ConsumerURL != "" { - // when the rpc provider is to be used, we won't register any other providers. - err := c.registerRPCProvider() - if err == nil { - c.Logger.Info("note: with the rpc provider registered, no other providers will be registered and available") - return - } - c.Logger.Info("failed to register rpc provider, falling back to registering all other providers", "error", err.Error()) - } - // register ipmitool provider +// register ipmitool provider +func (c *Client) registerIPMIProvider() error { ipmiOpts := []ipmitool.Option{ ipmitool.WithLogger(c.Logger), ipmitool.WithPort(c.providerConfig.ipmitool.Port), ipmitool.WithCipherSuite(c.providerConfig.ipmitool.CipherSuite), ipmitool.WithIpmitoolPath(c.providerConfig.ipmitool.IpmitoolPath), } - if driverIpmitool, err := ipmitool.New(c.Auth.Host, c.Auth.User, c.Auth.Pass, ipmiOpts...); err == nil { - c.Registry.Register(ipmitool.ProviderName, ipmitool.ProviderProtocol, ipmitool.Features, nil, driverIpmitool) - } else { - c.Logger.Info("ipmitool provider not available", "error", err.Error()) + + driverIpmitool, err := ipmitool.New(c.Auth.Host, c.Auth.User, c.Auth.Pass, ipmiOpts...) + if err != nil { + return err } - // register ASRR vendorapi provider + c.Registry.Register(ipmitool.ProviderName, ipmitool.ProviderProtocol, ipmitool.Features, nil, driverIpmitool) + + return nil +} + +// register ASRR vendorapi provider +func (c *Client) registerASRRProvider() error { asrHttpClient := *c.httpClient asrHttpClient.Transport = c.httpClient.Transport.(*http.Transport).Clone() driverAsrockrack := asrockrack.NewWithOptions(c.Auth.Host+":"+c.providerConfig.asrock.Port, c.Auth.User, c.Auth.Pass, c.Logger, asrockrack.WithHTTPClient(&asrHttpClient)) c.Registry.Register(asrockrack.ProviderName, asrockrack.ProviderProtocol, asrockrack.Features, nil, driverAsrockrack) - // register gofish provider + return nil +} + +// register gofish provider +func (c *Client) registerGofishProvider() error { gfHttpClient := *c.httpClient gfHttpClient.Transport = c.httpClient.Transport.(*http.Transport).Clone() gofishOpts := []redfish.Option{ @@ -184,11 +183,18 @@ func (c *Client) registerProviders() { redfish.WithVersionsNotCompatible(c.providerConfig.gofish.VersionsNotCompatible), redfish.WithUseBasicAuth(c.providerConfig.gofish.UseBasicAuth), redfish.WithPort(c.providerConfig.gofish.Port), + redfish.WithEtagMatchDisabled(c.providerConfig.gofish.DisableEtagMatch), } + driverGoFish := redfish.New(c.Auth.Host, c.Auth.User, c.Auth.Pass, c.Logger, gofishOpts...) c.Registry.Register(redfish.ProviderName, redfish.ProviderProtocol, redfish.Features, nil, driverGoFish) - // register Intel AMT provider + return nil +} + +// register Intel AMT provider +func (c *Client) registerIntelAMTProvider() error { + iamtOpts := []intelamt.Option{ intelamt.WithLogger(c.Logger), intelamt.WithHostScheme(c.providerConfig.intelamt.HostScheme), @@ -197,7 +203,11 @@ func (c *Client) registerProviders() { driverAMT := intelamt.New(c.Auth.Host, c.Auth.User, c.Auth.Pass, iamtOpts...) c.Registry.Register(intelamt.ProviderName, intelamt.ProviderProtocol, intelamt.Features, nil, driverAMT) - // register Dell gofish provider + return nil +} + +// register Dell gofish provider +func (c *Client) registerDellProvider() error { dellGofishHttpClient := *c.httpClient //dellGofishHttpClient.Transport = c.httpClient.Transport.(*http.Transport).Clone() dellGofishOpts := []dell.Option{ @@ -209,11 +219,64 @@ func (c *Client) registerProviders() { driverGoFishDell := dell.New(c.Auth.Host, c.Auth.User, c.Auth.Pass, c.Logger, dellGofishOpts...) c.Registry.Register(dell.ProviderName, redfish.ProviderProtocol, dell.Features, nil, driverGoFishDell) - // register supermicro vendorapi provider + return nil +} + +// register supermicro vendorapi provider +func (c *Client) registerSupermicroProvider() error { smcHttpClient := *c.httpClient smcHttpClient.Transport = c.httpClient.Transport.(*http.Transport).Clone() - driverSupermicro := supermicro.NewClient(c.Auth.Host, c.Auth.User, c.Auth.Pass, c.Logger, supermicro.WithHttpClient(&smcHttpClient), supermicro.WithPort(c.providerConfig.supermicro.Port)) + driverSupermicro := supermicro.NewClient( + c.Auth.Host, + c.Auth.User, + c.Auth.Pass, + c.Logger, + supermicro.WithHttpClient(&smcHttpClient), + supermicro.WithPort(c.providerConfig.supermicro.Port), + ) + c.Registry.Register(supermicro.ProviderName, supermicro.ProviderProtocol, supermicro.Features, nil, driverSupermicro) + + return nil +} + +func (c *Client) registerProviders() { + // register the rpc provider + // without the consumer URL there is no way to send RPC requests. + if c.providerConfig.rpc.ConsumerURL != "" { + // when the rpc provider is to be used, we won't register any other providers. + err := c.registerRPCProvider() + if err == nil { + c.Logger.Info("note: with the rpc provider registered, no other providers will be registered and available") + return + } + c.Logger.Info("failed to register rpc provider, falling back to registering all other providers", "error", err.Error()) + } + + if err := c.registerIPMIProvider(); err != nil { + c.Logger.Info("ipmitool provider not available", "error", err.Error()) + } + + if err := c.registerASRRProvider(); err != nil { + c.Logger.Info("ASRR provider not available", "error", err.Error()) + } + + if err := c.registerGofishProvider(); err != nil { + c.Logger.Info("Gofish provider not available", "error", err.Error()) + } + + if err := c.registerIntelAMTProvider(); err != nil { + c.Logger.Info("Intel AMT provider not available", "error", err.Error()) + } + + if err := c.registerDellProvider(); err != nil { + c.Logger.Info("Dell provider not available", "error", err.Error()) + } + + if err := c.registerSupermicroProvider(); err != nil { + c.Logger.Info("Supermicro provider not available", "error", err.Error()) + } + } // GetMetadata returns the metadata that is populated after each BMC function/method call From f0cdcfaad9d7133f8165266d2c905e700252c8be Mon Sep 17 00:00:00 2001 From: Joel Rebello Date: Mon, 25 Sep 2023 15:19:23 +0200 Subject: [PATCH 3/3] client: remove unused error returns --- client.go | 45 ++++++++++----------------------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/client.go b/client.go index 51b23801..ba170551 100644 --- a/client.go +++ b/client.go @@ -165,17 +165,15 @@ func (c *Client) registerIPMIProvider() error { } // register ASRR vendorapi provider -func (c *Client) registerASRRProvider() error { +func (c *Client) registerASRRProvider() { asrHttpClient := *c.httpClient asrHttpClient.Transport = c.httpClient.Transport.(*http.Transport).Clone() driverAsrockrack := asrockrack.NewWithOptions(c.Auth.Host+":"+c.providerConfig.asrock.Port, c.Auth.User, c.Auth.Pass, c.Logger, asrockrack.WithHTTPClient(&asrHttpClient)) c.Registry.Register(asrockrack.ProviderName, asrockrack.ProviderProtocol, asrockrack.Features, nil, driverAsrockrack) - - return nil } // register gofish provider -func (c *Client) registerGofishProvider() error { +func (c *Client) registerGofishProvider() { gfHttpClient := *c.httpClient gfHttpClient.Transport = c.httpClient.Transport.(*http.Transport).Clone() gofishOpts := []redfish.Option{ @@ -188,12 +186,10 @@ func (c *Client) registerGofishProvider() error { driverGoFish := redfish.New(c.Auth.Host, c.Auth.User, c.Auth.Pass, c.Logger, gofishOpts...) c.Registry.Register(redfish.ProviderName, redfish.ProviderProtocol, redfish.Features, nil, driverGoFish) - - return nil } // register Intel AMT provider -func (c *Client) registerIntelAMTProvider() error { +func (c *Client) registerIntelAMTProvider() { iamtOpts := []intelamt.Option{ intelamt.WithLogger(c.Logger), @@ -202,12 +198,10 @@ func (c *Client) registerIntelAMTProvider() error { } driverAMT := intelamt.New(c.Auth.Host, c.Auth.User, c.Auth.Pass, iamtOpts...) c.Registry.Register(intelamt.ProviderName, intelamt.ProviderProtocol, intelamt.Features, nil, driverAMT) - - return nil } // register Dell gofish provider -func (c *Client) registerDellProvider() error { +func (c *Client) registerDellProvider() { dellGofishHttpClient := *c.httpClient //dellGofishHttpClient.Transport = c.httpClient.Transport.(*http.Transport).Clone() dellGofishOpts := []dell.Option{ @@ -218,12 +212,10 @@ func (c *Client) registerDellProvider() error { } driverGoFishDell := dell.New(c.Auth.Host, c.Auth.User, c.Auth.Pass, c.Logger, dellGofishOpts...) c.Registry.Register(dell.ProviderName, redfish.ProviderProtocol, dell.Features, nil, driverGoFishDell) - - return nil } // register supermicro vendorapi provider -func (c *Client) registerSupermicroProvider() error { +func (c *Client) registerSupermicroProvider() { smcHttpClient := *c.httpClient smcHttpClient.Transport = c.httpClient.Transport.(*http.Transport).Clone() driverSupermicro := supermicro.NewClient( @@ -236,8 +228,6 @@ func (c *Client) registerSupermicroProvider() error { ) c.Registry.Register(supermicro.ProviderName, supermicro.ProviderProtocol, supermicro.Features, nil, driverSupermicro) - - return nil } func (c *Client) registerProviders() { @@ -257,26 +247,11 @@ func (c *Client) registerProviders() { c.Logger.Info("ipmitool provider not available", "error", err.Error()) } - if err := c.registerASRRProvider(); err != nil { - c.Logger.Info("ASRR provider not available", "error", err.Error()) - } - - if err := c.registerGofishProvider(); err != nil { - c.Logger.Info("Gofish provider not available", "error", err.Error()) - } - - if err := c.registerIntelAMTProvider(); err != nil { - c.Logger.Info("Intel AMT provider not available", "error", err.Error()) - } - - if err := c.registerDellProvider(); err != nil { - c.Logger.Info("Dell provider not available", "error", err.Error()) - } - - if err := c.registerSupermicroProvider(); err != nil { - c.Logger.Info("Supermicro provider not available", "error", err.Error()) - } - + c.registerASRRProvider() + c.registerGofishProvider() + c.registerIntelAMTProvider() + c.registerDellProvider() + c.registerSupermicroProvider() } // GetMetadata returns the metadata that is populated after each BMC function/method call