The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/distrobuilder/pull/297
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === This changes the types filtering behaviour. When running build-dir, only section with no types filter will be processed. Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
From 1b3f6ec78d7e17ed7a5f3c674d5ff8c8f2fb9de5 Mon Sep 17 00:00:00 2001 From: Thomas Hipp <thomas.h...@canonical.com> Date: Tue, 3 Mar 2020 14:19:41 +0100 Subject: [PATCH] shared: Differentiate between build-dir and others This changes the types filtering behaviour. When running build-dir, only section with no types filter will be processed. Signed-off-by: Thomas Hipp <thomas.h...@canonical.com> --- distrobuilder/main.go | 16 +++++++--- distrobuilder/main_build-dir.go | 2 +- distrobuilder/main_lxc.go | 2 +- distrobuilder/main_lxd.go | 2 +- shared/definition.go | 10 ++++-- shared/definition_test.go | 54 +++++++++++++++++++++++---------- 6 files changed, 60 insertions(+), 26 deletions(-) diff --git a/distrobuilder/main.go b/distrobuilder/main.go index 6fba06a..55ffd83 100644 --- a/distrobuilder/main.go +++ b/distrobuilder/main.go @@ -259,15 +259,23 @@ func (c *cmdGlobal) preRunBuild(cmd *cobra.Command, args []string) error { // Unmount everything and exit the chroot defer exitChroot() - // If we're running build-dir, only process sections which are meant for both - // containers and VMs. - imageTargets := shared.ImageTargetAll + var imageTargets shared.ImageTarget + + // If we're running either build-lxc or build-lxd, include types which are + // meant for all. + // If we're running build-dir, only process section which DO NOT specify + // a types filter. + if !isRunningBuildDir { + imageTargets = shared.ImageTargetAll + } - // If we call build-lxc or build-lxd, also process container-only sections. switch cmd.CalledAs() { case "build-lxc": + // If we're running build-lxc, also process container-only sections. imageTargets |= shared.ImageTargetContainer case "build-lxd": + // Include either container-specific or vm-specific sections when + // running build-lxd. ok, err := cmd.Flags().GetBool("vm") if err != nil { return err diff --git a/distrobuilder/main_build-dir.go b/distrobuilder/main_build-dir.go index c9994bb..fedc6c5 100644 --- a/distrobuilder/main_build-dir.go +++ b/distrobuilder/main_build-dir.go @@ -28,7 +28,7 @@ func (c *cmdBuildDir) command() *cobra.Command { return fmt.Errorf("Unknown generator '%s'", file.Generator) } - if !shared.ApplyFilter(&file, c.global.definition.Image.Release, c.global.definition.Image.ArchitectureMapped, c.global.definition.Image.Variant, c.global.definition.Targets.Type, shared.ImageTargetAll) { + if !shared.ApplyFilter(&file, c.global.definition.Image.Release, c.global.definition.Image.ArchitectureMapped, c.global.definition.Image.Variant, c.global.definition.Targets.Type, 0) { continue } diff --git a/distrobuilder/main_lxc.go b/distrobuilder/main_lxc.go index 950a3cb..0384066 100644 --- a/distrobuilder/main_lxc.go +++ b/distrobuilder/main_lxc.go @@ -71,7 +71,7 @@ func (c *cmdLXC) runPack(cmd *cobra.Command, args []string, overlayDir string) e defer exitChroot() var manager *managers.Manager - imageTargets := shared.ImageTargetContainer + imageTargets := shared.ImageTargetAll | shared.ImageTargetContainer if c.global.definition.Packages.Manager != "" { manager = managers.Get(c.global.definition.Packages.Manager) diff --git a/distrobuilder/main_lxd.go b/distrobuilder/main_lxd.go index 2fa2648..c4bd98d 100644 --- a/distrobuilder/main_lxd.go +++ b/distrobuilder/main_lxd.go @@ -121,7 +121,7 @@ func (c *cmdLXD) runPack(cmd *cobra.Command, args []string, overlayDir string) e defer exitChroot() var manager *managers.Manager - var imageTargets shared.ImageTarget + imageTargets := shared.ImageTargetAll if c.flagVM { imageTargets = shared.ImageTargetVM diff --git a/shared/definition.go b/shared/definition.go index a61e4d3..b8fa7eb 100644 --- a/shared/definition.go +++ b/shared/definition.go @@ -594,20 +594,24 @@ func ApplyFilter(filter Filter, release string, architecture string, variant str types := filter.GetTypes() + if acceptedImageTargets == 0 && len(types) == 0 { + return true + } + if acceptedImageTargets&ImageTargetAll > 0 { - if len(types) == 0 || len(types) == 2 && shared.StringInSlice(targetType, types) { + if len(types) == 2 && shared.StringInSlice(targetType, types) { return true } } if acceptedImageTargets&ImageTargetContainer > 0 { - if targetType == "container" && len(types) == 1 && types[0] == targetType { + if targetType == "container" && shared.StringInSlice(targetType, types) { return true } } if acceptedImageTargets&ImageTargetVM > 0 { - if targetType == "vm" && len(types) == 1 && types[0] == targetType { + if targetType == "vm" && shared.StringInSlice(targetType, types) { return true } } diff --git a/shared/definition_test.go b/shared/definition_test.go index eeace7b..4810b8c 100644 --- a/shared/definition_test.go +++ b/shared/definition_test.go @@ -507,33 +507,55 @@ func TestDefinitionFilter(t *testing.T) { func TestApplyFilter(t *testing.T) { repo := DefinitionPackagesRepository{} + // Variants repo.Variants = []string{"default"} + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "cloud", "vm", 0)) + + // Architectures repo.Architectures = []string{"amd64", "i386"} + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0)) + require.True(t, ApplyFilter(&repo, "foo", "i386", "default", "vm", 0)) + require.False(t, ApplyFilter(&repo, "foo", "s390", "default", "vm", 0)) + + // Releases repo.Releases = []string{"foo"} - repo.Types = []string{"vm"} + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0)) + require.False(t, ApplyFilter(&repo, "bar", "amd64", "default", "vm", 0)) - require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetAll)) + // Targets + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0)) + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", 0)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetVM)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetAll|ImageTargetVM)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetContainer|ImageTargetVM)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetVM)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetAll|ImageTargetVM)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetContainer|ImageTargetVM)) + + repo.Types = []string{"vm"} require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetVM)) require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetAll|ImageTargetVM)) + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetContainer|ImageTargetVM)) require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetVM)) - require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetVM)) - require.False(t, ApplyFilter(&repo, "", "arm64", "default", "vm", ImageTargetAll)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetAll|ImageTargetVM)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetContainer|ImageTargetVM)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", 0)) repo.Types = []string{"container"} - require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetContainer)) - require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetAll)) require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetContainer)) - require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetAll|ImageTargetVM)) - - repo.Types = []string{"container", "vm"} - require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetAll)) - require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetAll)) - require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetVM)) + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetAll|ImageTargetContainer)) + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetContainer|ImageTargetVM)) require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetContainer)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetAll|ImageTargetContainer)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetContainer|ImageTargetVM)) + require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0)) - repo.Types = []string{} - require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetAll)) - require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetAll)) - require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetVM)) + repo.Types = []string{"container", "vm"} + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetContainer)) + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetAll|ImageTargetContainer)) + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetContainer|ImageTargetVM)) + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetAll|ImageTargetContainer)) + require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetContainer|ImageTargetVM)) require.False(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetContainer)) }
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel