mirror of https://github.com/containers/podman.git
				
				
				
			
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| //go:build !windows && !darwin
 | |
| 
 | |
| package provider
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"fmt"
 | |
| 	"io/fs"
 | |
| 	"os"
 | |
| 
 | |
| 	"github.com/containers/common/pkg/config"
 | |
| 	"github.com/containers/podman/v5/pkg/machine/define"
 | |
| 	"github.com/containers/podman/v5/pkg/machine/qemu"
 | |
| 	"github.com/containers/podman/v5/pkg/machine/vmconfigs"
 | |
| 	"github.com/sirupsen/logrus"
 | |
| )
 | |
| 
 | |
| func Get() (vmconfigs.VMProvider, error) {
 | |
| 	cfg, err := config.Default()
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	provider := cfg.Machine.Provider
 | |
| 	if providerOverride, found := os.LookupEnv("CONTAINERS_MACHINE_PROVIDER"); found {
 | |
| 		provider = providerOverride
 | |
| 	}
 | |
| 	resolvedVMType, err := define.ParseVMType(provider, define.QemuVirt)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	logrus.Debugf("Using Podman machine with `%s` virtualization provider", resolvedVMType.String())
 | |
| 	switch resolvedVMType {
 | |
| 	case define.QemuVirt:
 | |
| 		return qemu.NewStubber()
 | |
| 	default:
 | |
| 		return nil, fmt.Errorf("unsupported virtualization provider: `%s`", resolvedVMType.String())
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func GetAll() []vmconfigs.VMProvider {
 | |
| 	return []vmconfigs.VMProvider{new(qemu.QEMUStubber)}
 | |
| }
 | |
| 
 | |
| // SupportedProviders returns the providers that are supported on the host operating system
 | |
| func SupportedProviders() []define.VMType {
 | |
| 	return []define.VMType{define.QemuVirt}
 | |
| }
 | |
| 
 | |
| func IsInstalled(provider define.VMType) (bool, error) {
 | |
| 	switch provider {
 | |
| 	case define.QemuVirt:
 | |
| 		cfg, err := config.Default()
 | |
| 		if err != nil {
 | |
| 			return false, err
 | |
| 		}
 | |
| 		if cfg == nil {
 | |
| 			return false, fmt.Errorf("error fetching getting default config")
 | |
| 		}
 | |
| 		_, err = cfg.FindHelperBinary(qemu.QemuCommand, true)
 | |
| 		if errors.Is(err, fs.ErrNotExist) {
 | |
| 			return false, nil
 | |
| 		}
 | |
| 		if err != nil {
 | |
| 			return false, err
 | |
| 		}
 | |
| 		return true, nil
 | |
| 	default:
 | |
| 		return false, nil
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // HasPermsForProvider returns whether the host operating system has the proper permissions to use the given provider
 | |
| func HasPermsForProvider(provider define.VMType) bool {
 | |
| 	// there are no permissions required for QEMU
 | |
| 	return provider == define.QemuVirt
 | |
| }
 |