github.com/kubernetes-incubator/kube-aws@v0.16.4/provisioner/transfer.go (about)

     1  package provisioner
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/aws/aws-sdk-go/aws"
     6  	"github.com/aws/aws-sdk-go/service/s3"
     7  	"os"
     8  	"strings"
     9  )
    10  
    11  type S3ObjectPutter interface {
    12  	PutObject(input *s3.PutObjectInput) (*s3.PutObjectOutput, error)
    13  }
    14  
    15  func (t TransferredFile) S3URI() string {
    16  	return fmt.Sprintf("%s/%s", t.s3DirURI, t.BaseName())
    17  }
    18  
    19  func (t TransferredFile) ReceiveCommand() string {
    20  	return fmt.Sprintf(`aws s3 cp %s %s`, t.S3URI(), t.Path)
    21  }
    22  
    23  func (t TransferredFile) Send(client S3ObjectPutter) error {
    24  	opened, err := os.Open(t.Source.Path)
    25  	if err != nil {
    26  		return err
    27  	}
    28  	defer opened.Close()
    29  
    30  	splits1 := strings.Split(t.s3DirURI, "s3://")
    31  	s3prefix := splits1[1]
    32  
    33  	splits := strings.SplitN(s3prefix, "/", 2)
    34  	bucket := splits[0]
    35  	prefix := splits[1]
    36  
    37  	fmt.Fprintf(os.Stderr, "putting %s onto %s with prefix %s\n", t.BaseName(), bucket, prefix)
    38  	_, err = client.PutObject(&s3.PutObjectInput{
    39  		Bucket: aws.String(bucket),
    40  		Key:    aws.String(prefix + "/" + t.BaseName()),
    41  		Body:   opened,
    42  	})
    43  	if err != nil {
    44  		return err
    45  	}
    46  	return nil
    47  }