github.com/amanya/packer@v0.12.1-0.20161117214323-902ac5ab2eb6/builder/docker/step_pull.go (about) 1 package docker 2 3 import ( 4 "fmt" 5 "github.com/mitchellh/multistep" 6 "github.com/mitchellh/packer/packer" 7 "log" 8 ) 9 10 type StepPull struct{} 11 12 func (s *StepPull) Run(state multistep.StateBag) multistep.StepAction { 13 config := state.Get("config").(*Config) 14 driver := state.Get("driver").(Driver) 15 ui := state.Get("ui").(packer.Ui) 16 17 if !config.Pull { 18 log.Println("Pull disabled, won't docker pull") 19 return multistep.ActionContinue 20 } 21 22 ui.Say(fmt.Sprintf("Pulling Docker image: %s", config.Image)) 23 24 if config.EcrLogin { 25 ui.Message("Fetching ECR credentials...") 26 27 username, password, err := config.EcrGetLogin(config.LoginServer) 28 if err != nil { 29 err := fmt.Errorf("Error fetching ECR credentials: %s", err) 30 state.Put("error", err) 31 ui.Error(err.Error()) 32 return multistep.ActionHalt 33 } 34 35 config.LoginUsername = username 36 config.LoginPassword = password 37 } 38 39 if config.Login || config.EcrLogin { 40 ui.Message("Logging in...") 41 err := driver.Login( 42 config.LoginServer, 43 config.LoginEmail, 44 config.LoginUsername, 45 config.LoginPassword) 46 if err != nil { 47 err := fmt.Errorf("Error logging in: %s", err) 48 state.Put("error", err) 49 ui.Error(err.Error()) 50 return multistep.ActionHalt 51 } 52 53 defer func() { 54 ui.Message("Logging out...") 55 if err := driver.Logout(config.LoginServer); err != nil { 56 ui.Error(fmt.Sprintf("Error logging out: %s", err)) 57 } 58 }() 59 } 60 61 if err := driver.Pull(config.Image); err != nil { 62 err := fmt.Errorf("Error pulling Docker image: %s", err) 63 state.Put("error", err) 64 ui.Error(err.Error()) 65 return multistep.ActionHalt 66 } 67 68 return multistep.ActionContinue 69 } 70 71 func (s *StepPull) Cleanup(state multistep.StateBag) { 72 }