The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/distrobuilder/pull/305

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 fixes build-{lxc,lxd} where it would fail to process sections with
no defined type filter.

This fixes #304.

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
From cc2285324e3d1ee7fb0784354e056f661b919ba9 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@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.h...@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))
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to