chore: refactor azblob cache to use errors pkg

Signed-off-by: Justin Chadwell <me@jedevc.com>
This commit is contained in:
Justin Chadwell
2022-11-23 11:10:27 +00:00
parent 99566d54af
commit b79f6f64bd
3 changed files with 21 additions and 21 deletions

View File

@@ -26,12 +26,12 @@ func ResolveCacheExporterFunc() remotecache.ResolveCacheExporterFunc {
return func(ctx context.Context, g session.Group, attrs map[string]string) (remotecache.Exporter, error) {
config, err := getConfig(attrs)
if err != nil {
return nil, fmt.Errorf("failed to create azblob config: %v", err)
return nil, errors.WithMessage(err, "failed to create azblob config")
}
containerClient, err := createContainerClient(ctx, config)
if err != nil {
return nil, fmt.Errorf("failed to create container client: %v", err)
return nil, errors.WithMessage(err, "failed to create container client")
}
cc := v1.NewCacheChains()
@@ -95,7 +95,8 @@ func (ce *exporter) Finalize(ctx context.Context) (map[string]string, error) {
layerDone := progress.OneOff(ctx, fmt.Sprintf("writing layer %s", l.Blob))
ra, err := dgstPair.Provider.ReaderAt(ctx, dgstPair.Descriptor)
if err != nil {
return nil, layerDone(fmt.Errorf("failed to get reader for %s: %v", dgstPair.Descriptor.Digest, err))
err = errors.Wrapf(err, "failed to get reader for %s", dgstPair.Descriptor.Digest)
return nil, layerDone(err)
}
if err := ce.uploadBlobIfNotExists(ctx, key, content.NewReader(ra)); err != nil {
return nil, layerDone(err)
@@ -120,12 +121,12 @@ func (ce *exporter) Finalize(ctx context.Context) (map[string]string, error) {
dt, err := json.Marshal(config)
if err != nil {
return nil, fmt.Errorf("failed to marshal config: %v", err)
return nil, errors.Wrap(err, "failed to marshal config")
}
for _, name := range ce.config.Names {
if innerError := ce.uploadManifest(ctx, manifestKey(ce.config, name), bytesToReadSeekCloser(dt)); innerError != nil {
return nil, errors.Errorf("error writing manifest %s: %v", name, innerError)
return nil, errors.Wrapf(innerError, "error writing manifest %s", name)
}
}

View File

@@ -27,12 +27,12 @@ func ResolveCacheImporterFunc() remotecache.ResolveCacheImporterFunc {
return func(ctx context.Context, g session.Group, attrs map[string]string) (remotecache.Importer, ocispecs.Descriptor, error) {
config, err := getConfig(attrs)
if err != nil {
return nil, ocispecs.Descriptor{}, fmt.Errorf("failed to create azblob config: %v", err)
return nil, ocispecs.Descriptor{}, errors.WithMessage(err, "failed to create azblob config")
}
containerClient, err := createContainerClient(ctx, config)
if err != nil {
return nil, ocispecs.Descriptor{}, fmt.Errorf("failed to create container client: %v", err)
return nil, ocispecs.Descriptor{}, errors.WithMessage(err, "failed to create container client")
}
importer := &importer{
@@ -60,7 +60,7 @@ func (ci *importer) Resolve(ctx context.Context, _ ocispecs.Descriptor, id strin
eg.Go(func() error {
cc, err := ci.loadManifest(ctx, name)
if err != nil {
return fmt.Errorf("failed to load cache manifest %s: %v", name, err)
return errors.Wrapf(err, "failed to load cache manifest %s", name)
}
ccs[i] = cc
return nil
@@ -105,12 +105,12 @@ func (ci *importer) loadManifest(ctx context.Context, name string) (*v1.CacheCha
res, err := blobClient.Download(ctx, &azblob.BlobDownloadOptions{})
if err != nil {
return nil, err
return nil, errors.WithStack(err)
}
bytes, err := io.ReadAll(res.RawResponse.Body)
if err != nil {
return nil, err
return nil, errors.WithStack(err)
}
logrus.Debugf("imported config: %s", string(bytes))
@@ -151,7 +151,7 @@ func (ci *importer) makeDescriptorProviderPair(l v1.CacheLayer) (*v1.DescriptorP
if !l.Annotations.CreatedAt.IsZero() {
txt, err := l.Annotations.CreatedAt.MarshalText()
if err != nil {
return nil, err
return nil, errors.WithStack(err)
}
annotations["buildkit/createdat"] = string(txt)
}

View File

@@ -2,7 +2,6 @@ package azblob
import (
"context"
"fmt"
"net/url"
"os"
"path/filepath"
@@ -42,13 +41,13 @@ func getConfig(attrs map[string]string) (*Config, error) {
if !ok {
accountURLString, ok = os.LookupEnv("BUILDKIT_AZURE_STORAGE_ACCOUNT_URL")
if !ok {
return &Config{}, fmt.Errorf("either ${BUILDKIT_AZURE_STORAGE_ACCOUNT_URL} or account_url attribute is required for azblob cache")
return &Config{}, errors.New("either ${BUILDKIT_AZURE_STORAGE_ACCOUNT_URL} or account_url attribute is required for azblob cache")
}
}
accountURL, err := url.Parse(accountURLString)
if err != nil {
return &Config{}, fmt.Errorf("azure storage account url provided is not a valid url: %v", err)
return &Config{}, errors.Wrap(err, "azure storage account url provided is not a valid url")
}
accountName := strings.Split(accountURL.Hostname(), ".")[0]
@@ -106,21 +105,21 @@ func createContainerClient(ctx context.Context, config *Config) (*azblob.Contain
if config.secretAccessKey != "" {
sharedKey, err := azblob.NewSharedKeyCredential(config.AccountName, config.secretAccessKey)
if err != nil {
return nil, fmt.Errorf("failed to create shared key: %v", err)
return nil, errors.Wrap(err, "failed to create shared key")
}
serviceClient, err = azblob.NewServiceClientWithSharedKey(config.AccountURL, sharedKey, &azblob.ClientOptions{})
if err != nil {
return nil, fmt.Errorf("failed to created service client from shared key: %v", err)
return nil, errors.Wrap(err, "failed to created service client from shared key")
}
} else {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return nil, fmt.Errorf("failed to create default azure credentials: %v", err)
return nil, errors.Wrap(err, "failed to create default azure credentials")
}
serviceClient, err = azblob.NewServiceClient(config.AccountURL, cred, &azblob.ClientOptions{})
if err != nil {
return nil, fmt.Errorf("failed to create service client: %v", err)
return nil, errors.Wrap(err, "failed to create service client")
}
}
@@ -143,13 +142,13 @@ func createContainerClient(ctx context.Context, config *Config) (*azblob.Contain
defer cnclFn()
_, err := containerClient.Create(ctx, &azblob.ContainerCreateOptions{})
if err != nil {
return nil, fmt.Errorf("failed to create cache container %s: %v", config.Container, err)
return nil, errors.Wrapf(err, "failed to create cache container %s", config.Container)
}
return containerClient, nil
}
return nil, fmt.Errorf("failed to get properties of cache container %s: %v", config.Container, err)
return nil, errors.Wrapf(err, "failed to get properties of cache container %s", config.Container)
}
func manifestKey(config *Config, name string) string {
@@ -180,5 +179,5 @@ func blobExists(ctx context.Context, containerClient *azblob.ContainerClient, bl
return false, nil
}
return false, fmt.Errorf("failed to check blob %s existence: %v", blobKey, err)
return false, errors.Wrapf(err, "failed to check blob %s existence", blobKey)
}