func NewClient(oauthClient *http.Client) *Client { service, _ := api.New(oauthClient) return &Client{ client: oauthClient, service: service, } }
// Create sets up and starts a Google Compute Engine instance as defined in d.Conf. It // creates the necessary Google Storage buckets beforehand. func (d *Deployer) Create(ctx *context.Context) (*compute.Instance, error) { if err := d.checkProjectID(); err != nil { return nil, err } computeService, _ := compute.New(d.Client) storageService, _ := storage.New(d.Client) fwc := make(chan error, 1) go func() { fwc <- d.setFirewall(ctx, computeService) }() config := cloudConfig(d.Conf) const maxCloudConfig = 32 << 10 // per compute API docs if len(config) > maxCloudConfig { return nil, fmt.Errorf("cloud config length of %d bytes is over %d byte limit", len(config), maxCloudConfig) } // TODO(mpl): maybe add a wipe mode where we erase other instances before attempting to create. if zone, err := d.projectHasInstance(); zone != "" { return nil, instanceExistsError{ project: d.Conf.Project, zone: zone, } } else if err != nil { return nil, fmt.Errorf("could not scan project for existing instances: %v", err) } if err := d.setBuckets(storageService, ctx); err != nil { return nil, fmt.Errorf("could not create buckets: %v", err) } if err := d.setupHTTPS(storageService); err != nil { return nil, fmt.Errorf("could not setup HTTPS: %v", err) } if err := d.createInstance(computeService, ctx); err != nil { return nil, fmt.Errorf("could not create compute instance: %v", err) } inst, err := computeService.Instances.Get(d.Conf.Project, d.Conf.Zone, d.Conf.Name).Do() if err != nil { return nil, fmt.Errorf("error getting instance after creation: %v", err) } if Verbose { ij, _ := json.MarshalIndent(inst, "", " ") log.Printf("Instance: %s", ij) } if err = <-fwc; err != nil { return nil, fmt.Errorf("could not create firewall rules: %v", err) } return inst, nil }
// NewServiceClient returns a Client for use when running on Google // Compute Engine. This client can access buckets owned by the same // project ID as the VM. func NewServiceClient() (*Client, error) { if !metadata.OnGCE() { return nil, errors.New("not running on Google Compute Engine") } scopes, _ := metadata.Scopes("default") haveScope := func(scope string) bool { for _, x := range scopes { if x == scope { return true } } return false } if !haveScope("https://www.googleapis.com/auth/devstorage.full_control") && !haveScope("https://www.googleapis.com/auth/devstorage.read_write") { return nil, errors.New("when this Google Compute Engine VM instance was created, it wasn't granted access to Cloud Storage") } client := oauth2.NewClient(context.Background(), google.ComputeTokenSource("")) service, _ := api.New(client) return &Client{client: client, service: service}, nil }
func rawService(ctx context.Context) *raw.Service { return internal.Service(ctx, "storage", func(hc *http.Client) interface{} { svc, _ := raw.New(hc) return svc }).(*raw.Service) }