gcloud/storage.go (72 lines of code) (raw):

// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcloud import ( "fmt" "io" "os" "path/filepath" "cloud.google.com/go/storage" ) func (c *Client) getStorageService(project string) (*storage.Client, error) { var err error svc := c.services.storage if svc != nil { return svc, nil } if err := c.ServiceEnable(project, Storage); err != nil { return nil, fmt.Errorf("error activating service for polling: %s", err) } svc, err = storage.NewClient(c.ctx, c.opts) if err != nil { return nil, err } c.services.storage = svc return svc, nil } // StorageBucketCreate creates a storage bucket in Cloud Storage func (c *Client) StorageBucketCreate(project, bucket string) error { svc, err := c.getStorageService(project) if err != nil { return err } if err := svc.Bucket(bucket).Create(c.ctx, project, &storage.BucketAttrs{}); err != nil { return fmt.Errorf("could not create bucket (%s): %s", bucket, err) } return nil } // StorageBucketDelete deletes a storage bucket in Cloud Storage func (c *Client) StorageBucketDelete(project, bucket string) error { svc, err := c.getStorageService(project) if err != nil { return err } if err := svc.Bucket(bucket).Delete(c.ctx); err != nil { return fmt.Errorf("could not delete bucket (%s): %s", bucket, err) } return nil } // StorageObjectCreate creates an object in a particular bucket in Cloud Storage func (c *Client) StorageObjectCreate(project, bucket, path string) (string, error) { svc, err := c.getStorageService(project) if err != nil { return "", err } name := filepath.Base(path) file, err := os.Open(path) if err != nil { return "", err } defer file.Close() obj := svc.Bucket(bucket).Object(name) w := obj.NewWriter(c.ctx) defer w.Close() if _, err := io.Copy(w, file); err != nil { return "", fmt.Errorf("could not write file (%s) to bucket (%s): %s", path, bucket, err) } result := fmt.Sprintf("gs://%s/%s", obj.BucketName(), obj.ObjectName()) return result, nil } // StorageObjectDelete deletes an object in a particular bucket in Cloud Storage func (c *Client) StorageObjectDelete(project, bucket, gspath string) error { svc, err := c.getStorageService(project) if err != nil { return err } name := filepath.Base(gspath) return svc.Bucket(bucket).Object(name).Delete(c.ctx) }