github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/pkg/system/lcow.go (about)

     1  // +build windows,!no_lcow
     2  
     3  package system // import "github.com/docker/docker/pkg/system"
     4  
     5  import (
     6  	"strings"
     7  
     8  	"github.com/Microsoft/hcsshim/osversion"
     9  	specs "github.com/opencontainers/image-spec/specs-go/v1"
    10  	"github.com/pkg/errors"
    11  )
    12  
    13  var (
    14  	// lcowSupported determines if Linux Containers on Windows are supported.
    15  	lcowSupported = false
    16  )
    17  
    18  // InitLCOW sets whether LCOW is supported or not. Requires RS5+
    19  func InitLCOW(experimental bool) {
    20  	if experimental && osversion.Build() >= osversion.RS5 {
    21  		lcowSupported = true
    22  	}
    23  }
    24  
    25  func LCOWSupported() bool {
    26  	return lcowSupported
    27  }
    28  
    29  // ValidatePlatform determines if a platform structure is valid.
    30  // TODO This is a temporary windows-only function, should be replaced by
    31  // comparison of worker capabilities
    32  func ValidatePlatform(platform specs.Platform) error {
    33  	if !IsOSSupported(platform.OS) {
    34  		return errors.Errorf("unsupported os %s", platform.OS)
    35  	}
    36  	return nil
    37  }
    38  
    39  // IsOSSupported determines if an operating system is supported by the host
    40  func IsOSSupported(os string) bool {
    41  	if strings.EqualFold("windows", os) {
    42  		return true
    43  	}
    44  	if LCOWSupported() && strings.EqualFold(os, "linux") {
    45  		return true
    46  	}
    47  	return false
    48  }