func()

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
}