Exemple #1
0
func FromName(provider, project, region, cachePath string) (Client, error) {
	switch provider {
	case "ec2":
		return ec2.GetClient(project, region, cachePath)
	case "rackspace":
		return rackspace.GetClient(project, region, cachePath)
	case "google":
		return gce.GetClient(project, region, cachePath)
	}
	return nil, errors.New("Unable to find provider")
}
Exemple #2
0
func GetClient(project string, region string, cache_path string) (Client, error) {
	// this will cause the google cache to be populated
	gce.GetClient(project, region, cache_path)
	c := Client{}
	cache, err := config.LoadCredCache(cache_path)
	if err != nil {
		return c, err
	}
	c.cache = cache
	if region == "" {
		region = defaultRegion
	}
	c.region = region
	if cache.AWS.RoleARN == "" {
		var arn string
		fmt.Printf("amazon role arn: ")
		_, err = fmt.Scanf("%s", &arn)
		if err != nil {
			return c, err
		}
		c.cache.AWS.RoleARN = strings.TrimSpace(arn)
		c.cache.Save()
	}
	if c.cache.AWS.Token.Expiry.Before(time.Now()) {
		auth, err := authAWSFromToken(&c.cache.GCE.Token, c.cache.AWS.RoleARN)
		if err != nil {
			return c, err
		}
		c.cache.AWS.Token = *auth
		c.cache.Save()
	}
	if _, ok := aws.Regions[c.region]; !ok {
		return c, errors.New("could not find region " + c.region)
	}
	c.client = ec2.New(c.cache.AWS.Token.Auth, aws.Regions[c.region])
	return c, nil
}