Skip to content

Commit

Permalink
client: move provider register methods into separate methods
Browse files Browse the repository at this point in the history
  • Loading branch information
joelrebel committed Sep 25, 2023
1 parent 0e0e508 commit 067d223
Showing 1 changed file with 86 additions and 23 deletions.
109 changes: 86 additions & 23 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,50 +145,56 @@ 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)

Check warning on line 162 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L162

Added line #L162 was not covered by tests

return nil

Check warning on line 164 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L164

Added line #L164 was not covered by tests
}

// 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{
redfish.WithHttpClient(&gfHttpClient),
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),
Expand All @@ -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{
Expand All @@ -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

Check warning on line 251 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L248-L251

Added lines #L248 - L251 were not covered by tests
}
c.Logger.Info("failed to register rpc provider, falling back to registering all other providers", "error", err.Error())

Check warning on line 253 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L253

Added line #L253 was not covered by tests
}

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())

Check warning on line 261 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L261

Added line #L261 was not covered by tests
}

if err := c.registerGofishProvider(); err != nil {
c.Logger.Info("Gofish provider not available", "error", err.Error())

Check warning on line 265 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L265

Added line #L265 was not covered by tests
}

if err := c.registerIntelAMTProvider(); err != nil {
c.Logger.Info("Intel AMT provider not available", "error", err.Error())

Check warning on line 269 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L269

Added line #L269 was not covered by tests
}

if err := c.registerDellProvider(); err != nil {
c.Logger.Info("Dell provider not available", "error", err.Error())

Check warning on line 273 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L273

Added line #L273 was not covered by tests
}

if err := c.registerSupermicroProvider(); err != nil {
c.Logger.Info("Supermicro provider not available", "error", err.Error())

Check warning on line 277 in client.go

View check run for this annotation

Codecov / codecov/patch

client.go#L277

Added line #L277 was not covered by tests
}

}

// GetMetadata returns the metadata that is populated after each BMC function/method call
Expand Down

0 comments on commit 067d223

Please sign in to comment.