// NewClient creates and returns a Rackspace client for the given service. func NewClient(c *cli.Context, serviceType string, logger *logrus.Logger, noCache bool, useServiceNet bool) (*gophercloud.ServiceClient, error) { // get the user's authentication credentials credsResult, err := Credentials(c, logger) if err != nil { return nil, err } logMsg := "Using public endpoint" urlType := gophercloud.AvailabilityPublic if useServiceNet { logMsg = "Using service net endpoint" urlType = gophercloud.AvailabilityInternal } logger.Infoln(logMsg) if noCache { return authFromScratch(credsResult, serviceType, urlType, logger) } ao := credsResult.AuthOpts region := credsResult.Region // form the cache key cacheKey := CacheKey(*ao, region, serviceType, urlType) // initialize cache cache := &Cache{} logger.Infof("Looking in the cache for cache key: %s\n", cacheKey) // get the value from the cache creds, err := cache.Value(cacheKey) // if there was an error accessing the cache or there was nothing in the cache, // authenticate from scratch if err == nil && creds != nil { // we successfully retrieved a value from the cache logger.Infof("Using token from cache: %s\n", creds.TokenID) pc, err := rackspace.NewClient(ao.IdentityEndpoint) if err == nil { pc.TokenID = creds.TokenID pc.ReauthFunc = reauthFunc(pc, *ao) pc.UserAgent.Prepend(util.UserAgent) pc.HTTPClient = newHTTPClient() return &gophercloud.ServiceClient{ ProviderClient: pc, Endpoint: creds.ServiceEndpoint, }, nil } } else { return authFromScratch(credsResult, serviceType, urlType, logger) } return nil, nil }
// NewClient creates and returns a Rackspace client for the given service. func NewClient(c *cli.Context, serviceType string, logger *logrus.Logger) (*gophercloud.ServiceClient, error) { // get the user's authentication credentials ao, region, err := Credentials(c, logger) if err != nil { return nil, err } if c.GlobalIsSet("no-cache") || c.IsSet("no-cache") { return authFromScratch(*ao, region, serviceType, logger) } // form the cache key cacheKey := CacheKey(*ao, region, serviceType) // initialize cache cache := &Cache{} // get the value from the cache creds, err := cache.Value(cacheKey) // if there was an error accessing the cache or there was nothing in the cache, // authenticate from scratch if err == nil && creds != nil { // we successfully retrieved a value from the cache logger.Infof("Using token from cache: %s\n", creds.TokenID) pc, err := rackspace.NewClient(ao.IdentityEndpoint) if err == nil { pc.TokenID = creds.TokenID pc.ReauthFunc = reauthFunc(pc, *ao) pc.UserAgent.Prepend(util.UserAgent) pc.HTTPClient = NewHTTPClient() return &gophercloud.ServiceClient{ ProviderClient: pc, Endpoint: creds.ServiceEndpoint, }, nil } } else { return authFromScratch(*ao, region, serviceType, logger) } return nil, nil }