func (detector StandardDetector) DetectProvisioner(d drivers.Driver) (Provisioner, error) { log.Info("Waiting for SSH to be available...") if err := drivers.WaitForSSH(d); err != nil { return nil, err } log.Info("Detecting the provisioner...") if d.GetOS() == drivers.WINDOWS { p := provisioners[drivers.WINDOWS] provisioner := p.New(d) return provisioner, nil } osReleaseOut, err := drivers.RunSSHCommandFromDriver(d, "cat /etc/os-release") if err != nil { return nil, fmt.Errorf("Error getting SSH command: %s", err) } osReleaseInfo, err := NewOsRelease([]byte(osReleaseOut)) if err != nil { return nil, fmt.Errorf("Error parsing /etc/os-release file: %s", err) } for _, p := range provisioners { provisioner := p.New(d) provisioner.SetOsReleaseInfo(osReleaseInfo) if provisioner.CompatibleWithHost() { log.Debugf("found compatible host: %s", osReleaseInfo.ID) return provisioner, nil } } return nil, ErrDetectionFailed }