[lxc-devel] [distrobuilder/master] shared: Differentiate between build-dir and others
monstermunchkin on Github
lxc-bot at linuxcontainers.org
Tue Mar 3 13:20:27 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 490 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200303/c26f5bb7/attachment.bin>
-------------- next part --------------
From 1b3f6ec78d7e17ed7a5f3c674d5ff8c8f2fb9de5 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at 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.hipp at 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))
}
More information about the lxc-devel
mailing list