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 }