1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package worker
- import (
- "fmt"
- "os"
- )
- type dockerHook struct {
- emptyHook
- provider mirrorProvider
- image string
- volumes []string
- options []string
- }
- func newDockerHook(p mirrorProvider, gCfg dockerConfig, mCfg mirrorConfig) *dockerHook {
- volumes := []string{}
- volumes = append(volumes, gCfg.Volumes...)
- volumes = append(volumes, mCfg.DockerVolumes...)
- options := []string{}
- options = append(options, gCfg.Options...)
- options = append(options, mCfg.DockerOptions...)
- return &dockerHook{
- provider: p,
- image: mCfg.DockerImage,
- volumes: volumes,
- options: options,
- }
- }
- func (d *dockerHook) preExec() error {
- p := d.provider
- logFile := p.LogFile()
- workingDir := p.WorkingDir()
- if _, err := os.Stat(workingDir); os.IsNotExist(err) {
- logger.Debugf("Making dir %s", workingDir)
- if err = os.MkdirAll(workingDir, 0755); err != nil {
- return fmt.Errorf("Error making dir %s: %s", workingDir, err.Error())
- }
- }
- logFileNew := "/log_latest"
- workingDirNew := "/data"
- // Override workingDir
- ctx := p.EnterContext()
- ctx.Set(_WorkingDirKey, workingDirNew)
- ctx.Set(_LogFileKey+":docker", logFileNew)
- ctx.Set(
- "volumes", []string{
- fmt.Sprintf("%s:%s", logFile, logFileNew),
- fmt.Sprintf("%s:%s", workingDir, workingDirNew),
- },
- )
- return nil
- }
- func (d *dockerHook) postExec() error {
- // sh.Command(
- // "docker", "rm", "-f", d.Name(),
- // ).Run()
- d.provider.ExitContext()
- return nil
- }
- // Volumes returns the configured volumes and
- // runtime-needed volumes, including mirror dirs
- // and log files
- func (d *dockerHook) Volumes() []string {
- vols := make([]string, len(d.volumes))
- copy(vols, d.volumes)
- p := d.provider
- ctx := p.Context()
- if ivs, ok := ctx.Get("volumes"); ok {
- vs := ivs.([]string)
- vols = append(vols, vs...)
- }
- return vols
- }
- func (d *dockerHook) LogFile() string {
- p := d.provider
- ctx := p.Context()
- if iv, ok := ctx.Get(_LogFileKey + ":docker"); ok {
- v := iv.(string)
- return v
- }
- return p.LogFile()
- }
- func (d *dockerHook) Name() string {
- p := d.provider
- return "tunasync-job-" + p.Name()
- }
|