[lxc-devel] [distrobuilder/master] main, shared: Fix undefied image target

monstermunchkin on Github lxc-bot at linuxcontainers.org
Tue Mar 10 11:04:30 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 484 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200310/f2b1d3ea/attachment.bin>
-------------- next part --------------
From cc2285324e3d1ee7fb0784354e056f661b919ba9 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Tue, 10 Mar 2020 11:59:51 +0100
Subject: [PATCH] main,shared: Fix undefied image target

This fixes build-{lxc,lxd} where it would fail to process sections with
no defined type filter.

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 distrobuilder/main.go     | 8 ++++----
 distrobuilder/main_lxc.go | 3 +--
 distrobuilder/main_lxd.go | 5 ++---
 shared/definition.go      | 5 ++++-
 shared/definition_test.go | 2 ++
 5 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/distrobuilder/main.go b/distrobuilder/main.go
index 55ffd83..bc6ac88 100644
--- a/distrobuilder/main.go
+++ b/distrobuilder/main.go
@@ -259,14 +259,14 @@ func (c *cmdGlobal) preRunBuild(cmd *cobra.Command, args []string) error {
 	// Unmount everything and exit the chroot
 	defer exitChroot()
 
-	var imageTargets shared.ImageTarget
+	// Always include sections which have no type filter. If running build-dir,
+	// only these sections will be processed.
+	imageTargets := shared.ImageTargetUndefined
 
 	// 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
+		imageTargets |= shared.ImageTargetAll
 	}
 
 	switch cmd.CalledAs() {
diff --git a/distrobuilder/main_lxc.go b/distrobuilder/main_lxc.go
index b1b29a6..4847720 100644
--- a/distrobuilder/main_lxc.go
+++ b/distrobuilder/main_lxc.go
@@ -122,8 +122,7 @@ func (c *cmdLXC) run(cmd *cobra.Command, args []string, overlayDir string) error
 			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, 0) &&
-			!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|shared.ImageTargetContainer) {
+		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.ImageTargetUndefined|shared.ImageTargetAll|shared.ImageTargetContainer) {
 			continue
 		}
 
diff --git a/distrobuilder/main_lxd.go b/distrobuilder/main_lxd.go
index 575ac69..2446ee6 100644
--- a/distrobuilder/main_lxd.go
+++ b/distrobuilder/main_lxd.go
@@ -173,7 +173,7 @@ func (c *cmdLXD) run(cmd *cobra.Command, args []string, overlayDir string) error
 	img := image.NewLXDImage(overlayDir, c.global.targetDir,
 		c.global.flagCacheDir, *c.global.definition)
 
-	imageTargets := shared.ImageTargetAll
+	imageTargets := shared.ImageTargetUndefined | shared.ImageTargetAll
 
 	if c.flagVM {
 		imageTargets |= shared.ImageTargetVM
@@ -182,8 +182,7 @@ func (c *cmdLXD) run(cmd *cobra.Command, args []string, overlayDir string) error
 	}
 
 	for _, file := range c.global.definition.Files {
-		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) &&
-			!shared.ApplyFilter(&file, c.global.definition.Image.Release, c.global.definition.Image.ArchitectureMapped, c.global.definition.Image.Variant, c.global.definition.Targets.Type, imageTargets) {
+		if !shared.ApplyFilter(&file, c.global.definition.Image.Release, c.global.definition.Image.ArchitectureMapped, c.global.definition.Image.Variant, c.global.definition.Targets.Type, imageTargets) {
 			continue
 		}
 
diff --git a/shared/definition.go b/shared/definition.go
index e37b9ee..66e9bee 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -24,6 +24,9 @@ const (
 
 	// ImageTargetVM is used for VM targets.
 	ImageTargetVM ImageTarget = 1 << 2
+
+	// ImageTargetUndefined is used when no type has been specified.
+	ImageTargetUndefined ImageTarget = 1 << 3
 )
 
 // Filter represents a filter.
@@ -594,7 +597,7 @@ func ApplyFilter(filter Filter, release string, architecture string, variant str
 
 	types := filter.GetTypes()
 
-	if acceptedImageTargets == 0 && len(types) == 0 {
+	if (acceptedImageTargets == 0 || acceptedImageTargets&ImageTargetUndefined > 0) && len(types) == 0 {
 		return true
 	}
 
diff --git a/shared/definition_test.go b/shared/definition_test.go
index 4810b8c..6a92c6a 100644
--- a/shared/definition_test.go
+++ b/shared/definition_test.go
@@ -526,6 +526,8 @@ func TestApplyFilter(t *testing.T) {
 	// Targets
 	require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", 0))
 	require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", 0))
+	require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "vm", ImageTargetUnspecified))
+	require.True(t, ApplyFilter(&repo, "foo", "amd64", "default", "container", ImageTargetUnspecified))
 	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))


More information about the lxc-devel mailing list