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  }