[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