github.com/kubeshop/testkube@v1.17.23/pkg/executor/scraper/minio_uploader.go (about) 1 package scraper 2 3 import ( 4 "context" 5 6 coreminio "github.com/minio/minio-go/v7" 7 8 "github.com/kubeshop/testkube/pkg/log" 9 10 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 11 12 "github.com/pkg/errors" 13 14 "github.com/kubeshop/testkube/pkg/storage/minio" 15 ) 16 17 type MinIOUploader struct { 18 Endpoint, AccessKeyID, SecretAccessKey, Region, Token, Bucket string 19 client *minio.Client 20 } 21 22 func NewMinIOUploader(endpoint, accessKeyID, secretAccessKey, region, token, bucket string, ssl, skipVerify bool, certFile, keyFile, caFile string) (*MinIOUploader, error) { 23 l := &MinIOUploader{ 24 Endpoint: endpoint, 25 AccessKeyID: accessKeyID, 26 SecretAccessKey: secretAccessKey, 27 Region: region, 28 Token: token, 29 Bucket: bucket, 30 } 31 32 opts := minio.GetTLSOptions(ssl, skipVerify, certFile, keyFile, caFile) 33 client := minio.NewClient(l.Endpoint, l.AccessKeyID, l.SecretAccessKey, l.Region, l.Token, l.Bucket, opts...) 34 err := client.Connect() 35 if err != nil { 36 return nil, errors.Errorf("error occured creating minio client: %v", err) 37 } 38 l.client = client 39 40 return l, nil 41 } 42 43 func (l *MinIOUploader) Upload(ctx context.Context, object *Object, execution testkube.Execution) error { 44 folder := execution.Id 45 if execution.ArtifactRequest != nil && execution.ArtifactRequest.OmitFolderPerExecution { 46 folder = "" 47 } 48 49 log.DefaultLogger.Infow("MinIO loader is uploading file", "file", object.Name, "folder", folder, "size", object.Size) 50 opts := coreminio.PutObjectOptions{} 51 switch object.DataType { 52 case DataTypeRaw: 53 opts.ContentType = "application/octet-stream" 54 case DataTypeTarball: 55 opts.DisableMultipart = true 56 opts.ContentEncoding = "gzip" 57 opts.ContentType = "application/gzip" 58 opts.UserMetadata = map[string]string{ 59 "X-Amz-Meta-Snowball-Auto-Extract": "true", 60 "X-Amz-Meta-Minio-Snowball-Prefix": folder, 61 } 62 } 63 64 if err := l.client.SaveFileDirect(ctx, folder, object.Name, object.Data, object.Size, opts); err != nil { 65 return errors.Wrapf(err, "error saving file %s", object.Name) 66 } 67 68 return nil 69 } 70 71 func (l *MinIOUploader) Close() error { 72 return nil 73 } 74 75 var _ Uploader = (*MinIOUploader)(nil)