in executors/virtualbox/virtualbox.go [98:147]
func (s *executor) createVM(baseImage string) (err error) {
_, err = vbox.Status(s.Context, s.vmName)
if err != nil {
_ = vbox.Unregister(s.Context, s.vmName)
}
if !vbox.Exist(s.Context, s.vmName) {
baseSnapshot := s.determineBaseSnapshot(baseImage)
if baseSnapshot == "" {
s.BuildLogger.Debugln("Creating testing VM from VM", baseImage, "...")
} else {
s.BuildLogger.Debugln("Creating testing VM from VM", baseImage, "snapshot", baseSnapshot, "...")
}
err = vbox.CreateOsVM(s.Context, baseImage, s.vmName, baseSnapshot, s.Config.VirtualBox.BaseFolder)
if err != nil {
return err
}
}
s.BuildLogger.Debugln("Identify SSH Port...")
s.sshPort, err = vbox.FindSSHPort(s.Context, s.vmName)
if err != nil {
s.BuildLogger.Debugln("Creating localhost ssh forwarding...")
vmSSHPort := s.Config.SSH.Port
if vmSSHPort == "" {
vmSSHPort = "22"
}
s.sshPort, err = vbox.ConfigureSSH(s.Context, s.vmName, vmSSHPort)
if err != nil {
return err
}
}
s.BuildLogger.Debugln("Using local", s.sshPort, "SSH port to connect to VM...")
s.BuildLogger.Debugln("Bootstraping VM...")
err = s.startVM()
if err != nil {
return err
}
s.BuildLogger.Debugln("Waiting for VM to become responsive...")
time.Sleep(10 * time.Second)
err = s.verifyMachine(s.sshPort)
if err != nil {
return err
}
return nil
}