From 0d3b400ab57a55c57cfea80fc881c91892ae920c Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 1 Apr 2020 12:22:05 +0200 Subject: [PATCH] LCOW: add "no_lcow" build tag to allow disabling lcow Signed-off-by: Sebastiaan van Stijn --- pkg/system/init_unix.go | 12 ---------- pkg/system/init_windows.go | 11 --------- pkg/system/lcow.go | 44 +++++++++++++++++++++++----------- pkg/system/lcow_unix.go | 8 ------- pkg/system/lcow_unsupported.go | 28 ++++++++++++++++++++++ pkg/system/lcow_windows.go | 6 ----- project/PACKAGERS.md | 6 +++++ 7 files changed, 64 insertions(+), 51 deletions(-) delete mode 100644 pkg/system/init_unix.go delete mode 100644 pkg/system/lcow_unix.go create mode 100644 pkg/system/lcow_unsupported.go delete mode 100644 pkg/system/lcow_windows.go diff --git a/pkg/system/init_unix.go b/pkg/system/init_unix.go deleted file mode 100644 index c2bb0f4cc4..0000000000 --- a/pkg/system/init_unix.go +++ /dev/null @@ -1,12 +0,0 @@ -// +build !windows - -package system // import "github.com/docker/docker/pkg/system" - -// InitLCOW does nothing since LCOW is a windows only feature -func InitLCOW(experimental bool) { -} - -// ContainerdRuntimeSupported returns true if the use of ContainerD runtime is supported. -func ContainerdRuntimeSupported(_ bool, _ string) bool { - return true -} diff --git a/pkg/system/init_windows.go b/pkg/system/init_windows.go index 7e4ac55d76..a91288c60b 100644 --- a/pkg/system/init_windows.go +++ b/pkg/system/init_windows.go @@ -3,26 +3,15 @@ package system // import "github.com/docker/docker/pkg/system" import ( "os" - "github.com/Microsoft/hcsshim/osversion" "github.com/sirupsen/logrus" ) var ( - // lcowSupported determines if Linux Containers on Windows are supported. - lcowSupported = false - // containerdRuntimeSupported determines if ContainerD should be the runtime. // As of March 2019, this is an experimental feature. containerdRuntimeSupported = false ) -// InitLCOW sets whether LCOW is supported or not. Requires RS5+ -func InitLCOW(experimental bool) { - if experimental && osversion.Build() >= osversion.RS5 { - lcowSupported = true - } -} - // InitContainerdRuntime sets whether to use ContainerD for runtime // on Windows. This is an experimental feature still in development, and // also requires an environment variable to be set (so as not to turn the diff --git a/pkg/system/lcow.go b/pkg/system/lcow.go index 5be3e2182b..0f00028fbd 100644 --- a/pkg/system/lcow.go +++ b/pkg/system/lcow.go @@ -1,16 +1,44 @@ +// +build windows,!no_lcow + package system // import "github.com/docker/docker/pkg/system" import ( - "runtime" "strings" + "github.com/Microsoft/hcsshim/osversion" specs "github.com/opencontainers/image-spec/specs-go/v1" "github.com/pkg/errors" ) +var ( + // lcowSupported determines if Linux Containers on Windows are supported. + lcowSupported = false +) + +// InitLCOW sets whether LCOW is supported or not. Requires RS5+ +func InitLCOW(experimental bool) { + if experimental && osversion.Build() >= osversion.RS5 { + lcowSupported = true + } +} + +func LCOWSupported() bool { + return lcowSupported +} + +// ValidatePlatform determines if a platform structure is valid. +// TODO This is a temporary windows-only function, should be replaced by +// comparison of worker capabilities +func ValidatePlatform(platform specs.Platform) error { + if !IsOSSupported(platform.OS) { + return errors.Errorf("unsupported os %s", platform.OS) + } + return nil +} + // IsOSSupported determines if an operating system is supported by the host func IsOSSupported(os string) bool { - if strings.EqualFold(runtime.GOOS, os) { + if strings.EqualFold("windows", os) { return true } if LCOWSupported() && strings.EqualFold(os, "linux") { @@ -18,15 +46,3 @@ func IsOSSupported(os string) bool { } return false } - -// ValidatePlatform determines if a platform structure is valid. -// TODO This is a temporary windows-only function, should be replaced by -// comparison of worker capabilities -func ValidatePlatform(platform specs.Platform) error { - if runtime.GOOS == "windows" { - if !(platform.OS == runtime.GOOS || (LCOWSupported() && platform.OS == "linux")) { - return errors.Errorf("unsupported os %s", platform.OS) - } - } - return nil -} diff --git a/pkg/system/lcow_unix.go b/pkg/system/lcow_unix.go deleted file mode 100644 index 26397fb8a1..0000000000 --- a/pkg/system/lcow_unix.go +++ /dev/null @@ -1,8 +0,0 @@ -// +build !windows - -package system // import "github.com/docker/docker/pkg/system" - -// LCOWSupported returns true if Linux containers on Windows are supported. -func LCOWSupported() bool { - return false -} diff --git a/pkg/system/lcow_unsupported.go b/pkg/system/lcow_unsupported.go new file mode 100644 index 0000000000..3d3cf775a7 --- /dev/null +++ b/pkg/system/lcow_unsupported.go @@ -0,0 +1,28 @@ +// +build !windows windows,no_lcow + +package system // import "github.com/docker/docker/pkg/system" +import ( + "runtime" + "strings" + + specs "github.com/opencontainers/image-spec/specs-go/v1" +) + +// InitLCOW does nothing since LCOW is a windows only feature +func InitLCOW(_ bool) {} + +// LCOWSupported returns true if Linux containers on Windows are supported. +func LCOWSupported() bool { + return false +} + +// ValidatePlatform determines if a platform structure is valid. This function +// is used for LCOW, and is a no-op on non-windows platforms. +func ValidatePlatform(_ specs.Platform) error { + return nil +} + +// IsOSSupported determines if an operating system is supported by the host. +func IsOSSupported(os string) bool { + return strings.EqualFold(runtime.GOOS, os) +} diff --git a/pkg/system/lcow_windows.go b/pkg/system/lcow_windows.go deleted file mode 100644 index f0139df8f7..0000000000 --- a/pkg/system/lcow_windows.go +++ /dev/null @@ -1,6 +0,0 @@ -package system // import "github.com/docker/docker/pkg/system" - -// LCOWSupported returns true if Linux containers on Windows are supported. -func LCOWSupported() bool { - return lcowSupported -} diff --git a/project/PACKAGERS.md b/project/PACKAGERS.md index 0fb6c20866..716aa81813 100644 --- a/project/PACKAGERS.md +++ b/project/PACKAGERS.md @@ -191,6 +191,12 @@ NOTE: if you need to set more than one build tag, space separate them: export DOCKER_BUILDTAGS='apparmor selinux exclude_graphdriver_aufs' ``` +### LCOW (Linux Containers On Windows) + +LCOW is an experimental feature on Windows, and requires the daemon to run with +experimental features enabled. Use the `no_lcow` build tag to disable the LCOW +feature at compile time, + ### Static Daemon If it is feasible within the constraints of your distribution, you should