func GetClient(project string, region string, cache_path string) (Client, error) { c := Client{} cache, err := config.LoadCredCache(cache_path) if err != nil { fmt.Println("unable to get cache") return c, err } c.cache = cache if region == "" { region = defaultRegion } c.region = region if c.cache.Rackspace.User == "" || c.cache.Rackspace.APIKey == "" { var rack_user string var rack_pass string fmt.Printf("rackspace user: "******"%s", &rack_user) if err != nil { return c, err } fmt.Printf("rackspace api key: ") _, err = fmt.Scanf("%s", &rack_pass) if err != nil { return c, err } c.cache.Rackspace.User = rack_user c.cache.Rackspace.APIKey = rack_pass c.cache.Save() if err != nil { return c, err } } ao := gophercloud.AuthOptions{ Username: c.cache.Rackspace.User, ApiKey: c.cache.Rackspace.APIKey, AllowReauth: true, } access, err := gophercloud.Authenticate("rackspace-us", ao) if err != nil { c.cache.Rackspace.User = "" c.cache.Rackspace.APIKey = "" c.cache.Save() return c, err } ac, err := gophercloud.PopulateApi("rackspace") if err != nil { return c, err } client, err := gophercloud.ServersApi(access, ac) if err != nil { return c, err } c.client = client return c, nil }
// withServerApi acquires the cloud servers API. func withServerApi(acc gophercloud.AccessProvider, f func(gophercloud.CloudServersProvider)) { api, err := gophercloud.ServersApi(acc, gophercloud.ApiCriteria{ Name: "cloudServersOpenStack", VersionId: "2", UrlChoice: gophercloud.PublicURL, }) if err != nil { panic(err) } f(api) }