github.com/secure-build/gitlab-runner@v12.5.0+incompatible/cache/s3/adapter.go (about)

     1  package s3
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  	"time"
     7  
     8  	"github.com/sirupsen/logrus"
     9  
    10  	"gitlab.com/gitlab-org/gitlab-runner/cache"
    11  	"gitlab.com/gitlab-org/gitlab-runner/common"
    12  )
    13  
    14  type s3Adapter struct {
    15  	timeout    time.Duration
    16  	config     *common.CacheS3Config
    17  	objectName string
    18  	client     minioClient
    19  }
    20  
    21  func (a *s3Adapter) GetDownloadURL() *url.URL {
    22  	URL, err := a.client.PresignedGetObject(a.config.BucketName, a.objectName, a.timeout, nil)
    23  	if err != nil {
    24  		logrus.WithError(err).Error("error while generating S3 pre-signed URL")
    25  
    26  		return nil
    27  	}
    28  
    29  	return URL
    30  }
    31  
    32  func (a *s3Adapter) GetUploadURL() *url.URL {
    33  	URL, err := a.client.PresignedPutObject(a.config.BucketName, a.objectName, a.timeout)
    34  	if err != nil {
    35  		logrus.WithError(err).Error("error while generating S3 pre-signed URL")
    36  
    37  		return nil
    38  	}
    39  
    40  	return URL
    41  }
    42  
    43  func New(config *common.CacheConfig, timeout time.Duration, objectName string) (cache.Adapter, error) {
    44  	s3 := config.S3
    45  	if s3 == nil {
    46  		return nil, fmt.Errorf("missing S3 configuration")
    47  	}
    48  
    49  	client, err := newMinioClient(s3)
    50  	if err != nil {
    51  		return nil, fmt.Errorf("error while creating S3 cache storage client: %v", err)
    52  	}
    53  
    54  	a := &s3Adapter{
    55  		config:     s3,
    56  		timeout:    timeout,
    57  		objectName: objectName,
    58  		client:     client,
    59  	}
    60  
    61  	return a, nil
    62  }
    63  
    64  func init() {
    65  	err := cache.Factories().Register("s3", New)
    66  	if err != nil {
    67  		panic(err)
    68  	}
    69  }