blob: c741c4cef8248be0b75a7c4d375a9f68e835a8d5 [file] [log] [blame]
Samuel A. Falvo IIfd78c302013-06-25 16:35:32 -07001package gophercloud
2
Samuel A. Falvo II4e895182013-06-26 15:44:18 -07003// Provider structures exist for each tangible provider of OpenStack service.
4// For example, Rackspace, Hewlett-Packard, and NASA might have their own instance of this structure.
5//
6// At a minimum, a provider must expose an authentication endpoint.
Samuel A. Falvo IIfd78c302013-06-25 16:35:32 -07007type Provider struct {
Samuel A. Falvo II5d0d74c2013-06-25 17:23:18 -07008 AuthEndpoint string
Samuel A. Falvo IIfd78c302013-06-25 16:35:32 -07009}
10
Samuel A. Falvo II4e895182013-06-26 15:44:18 -070011// RegisterProvider allows a unit test to register a mythical provider convenient for testing.
12// If the provider structure lacks adequate configuration, or the configuration given has some
13// detectable error, an ErrConfiguration error will result.
14func (c *Context) RegisterProvider(name string, p Provider) error {
Samuel A. Falvo II5d0d74c2013-06-25 17:23:18 -070015 if p.AuthEndpoint == "" {
16 return ErrConfiguration
17 }
18
Samuel A. Falvo IIfd78c302013-06-25 16:35:32 -070019 c.providerMap[name] = p
20 return nil
21}
22
Samuel A. Falvo II4e895182013-06-26 15:44:18 -070023// ProviderByName will locate a provider amongst those previously registered, if it exists.
24// If the named provider has not been registered, an ErrProvider error will result.
25func (c *Context) ProviderByName(name string) (p Provider, err error) {
Samuel A. Falvo IIfd78c302013-06-25 16:35:32 -070026 for provider, descriptor := range c.providerMap {
27 if name == provider {
28 return descriptor, nil
29 }
30 }
Samuel A. Falvo II4e895182013-06-26 15:44:18 -070031 return Provider{}, ErrProvider
Samuel A. Falvo II839428e2013-06-25 18:02:24 -070032}