// NewCertSource returns a CertSource which can be used to authenticate using // the provided oauth token. The provided client must not be nil. func NewCertSource(host string, c *http.Client, checkRegion bool) *RemoteCertSource { pkey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) // very unexpected. } serv, err := sqladmin.New(c) if err != nil { panic(err) // Only will happen if the provided client is nil. } if host != "" { serv.BasePath = host } return &RemoteCertSource{pkey, serv, checkRegion} }
func listInstances(ctx context.Context, cl *http.Client, projects []string) ([]string, error) { if len(projects) == 0 { // No projects requested. return nil, nil } sql, err := sqladmin.New(cl) if err != nil { return nil, err } ch := make(chan string) var wg sync.WaitGroup wg.Add(len(projects)) for _, proj := range projects { proj := proj go func() { err := sql.Instances.List(proj).Pages(ctx, func(r *sqladmin.InstancesListResponse) error { for _, in := range r.Items { // The Proxy is only support on Second Gen if in.BackendType == "SECOND_GEN" { ch <- fmt.Sprintf("%s:%s:%s", in.Project, in.Region, in.Name) } } return nil }) if err != nil { log.Printf("Error listing instances in %v: %v", proj, err) } wg.Done() }() } go func() { wg.Wait() close(ch) }() var ret []string for x := range ch { ret = append(ret, x) } if len(ret) == 0 { return nil, fmt.Errorf("no Cloud SQL Instances found in these projects: %v", projects) } return ret, nil }