github.com/kubernetes-incubator/kube-aws@v0.16.4/provisioner/prepare.go (about) 1 package provisioner 2 3 import ( 4 "fmt" 5 ) 6 7 func NewTarballingProvisioner(name string, bundle []RemoteFileSpec, entrypointLocalFilePath, s3DirURI string, pkgCacheDir string) *Provisioner { 8 prov := &Provisioner{ 9 Name: name, 10 EntrypointLocalPath: entrypointLocalFilePath, 11 Bundle: bundle, 12 S3DirURI: s3DirURI, 13 LocalCacheDir: pkgCacheDir, 14 } 15 16 return prov 17 } 18 19 func (p *Provisioner) GetTransferredFile() TransferredFile { 20 pkgFileName := fmt.Sprintf("%s.tgz", p.Name) 21 22 pkgLocalPath := fmt.Sprintf("%s/%s", p.LocalCacheDir, pkgFileName) 23 24 archive := RemoteFileSpec{ 25 Path: fmt.Sprintf("/var/run/coreos/%s", pkgFileName), 26 Source: Source{Path: pkgLocalPath}, 27 } 28 29 return TransferredFile{ 30 archive, 31 p.S3DirURI, 32 } 33 } 34 35 func (p *Provisioner) EntrypointRemotePath() string { 36 return "/opt/bin/entrypoint" 37 } 38 39 func (p *Provisioner) CreateTransferredFile(loader *RemoteFileLoader) (*TransferredFile, error) { 40 transferredFile := p.GetTransferredFile() 41 42 files := []RemoteFileSpec{} 43 44 files = append(files, p.Bundle...) 45 if p.EntrypointLocalPath != "" { 46 entry := RemoteFileSpec{ 47 Path: p.EntrypointRemotePath(), 48 Source: Source{ 49 Path: p.EntrypointLocalPath, 50 }, 51 Permissions: 755, 52 } 53 files = append(files, entry) 54 } 55 56 err := CreateTarGzArchive(transferredFile.RemoteFileSpec, files, loader) 57 if err != nil { 58 return nil, fmt.Errorf("failed creating package: %v", err) 59 } 60 61 return &transferredFile, nil 62 } 63 64 func (p *Provisioner) Send(s3Client S3ObjectPutter) error { 65 trans := p.GetTransferredFile() 66 if err := trans.Send(s3Client); err != nil { 67 return fmt.Errorf("failed sending package: %v", err) 68 } 69 return nil 70 } 71 72 func (p *Provisioner) RemoteCommand() (string, error) { 73 // Download the archive when and only when there are one or more files to transfer 74 if p != nil && len(p.Bundle) > 0 { 75 trans := p.GetTransferredFile() 76 cmd := fmt.Sprintf(`run bash -c "%s" && tar zxvf %s -C /`, trans.ReceiveCommand(), trans.Path) 77 // Run the entrypoint command when and only when it is specified 78 if p.EntrypointLocalPath != "" { 79 cmd = cmd + " && " + p.EntrypointRemotePath() 80 } 81 return cmd, nil 82 } 83 return "", nil 84 }