From 1c3662d88d9e0458227a002af1161bbdb5de0845 Mon Sep 17 00:00:00 2001 From: Thomas Hipp Date: Tue, 4 Jul 2023 10:40:04 +0200 Subject: [PATCH] definition: Filter LXC targets Signed-off-by: Thomas Hipp --- shared/definition.go | 23 +++++++++++++++++++---- shared/definition_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/shared/definition.go b/shared/definition.go index 4e49057e..6e0b84e0 100644 --- a/shared/definition.go +++ b/shared/definition.go @@ -171,10 +171,11 @@ type DefinitionSource struct { // A DefinitionTargetLXCConfig represents the config part of the metadata. type DefinitionTargetLXCConfig struct { - Type string `yaml:"type"` - Before uint `yaml:"before,omitempty"` - After uint `yaml:"after,omitempty"` - Content string `yaml:"content"` + DefinitionFilter `yaml:",inline"` + Type string `yaml:"type"` + Before uint `yaml:"before,omitempty"` + After uint `yaml:"after,omitempty"` + Content string `yaml:"content"` } // A DefinitionTargetLXC represents LXC specific files as part of the metadata. @@ -692,6 +693,20 @@ func (d *Definition) ApplyFilters(imageTargets ImageTarget) { newDefinition.Actions = append(newDefinition.Actions, action) } + // Filter targets + newDefinition.Targets.LXC.Config = []DefinitionTargetLXCConfig{} + + for _, config := range d.Targets.LXC.Config { + // Always add ImageTargetUndefined when handling LXC targets. + // These are only applied when running {build,pack}-lxc, and shouldn't require + // explicitly setting the "container" type filter. + if !d.applyFilter(&config, ImageTargetUndefined|imageTargets) { + continue + } + + newDefinition.Targets.LXC.Config = append(newDefinition.Targets.LXC.Config, config) + } + *d = newDefinition } diff --git a/shared/definition_test.go b/shared/definition_test.go index bd37a3cb..f65cf6e7 100644 --- a/shared/definition_test.go +++ b/shared/definition_test.go @@ -577,6 +577,42 @@ func TestApplyFilter(t *testing.T) { require.True(t, d.applyFilter(&repo, ImageTargetAll|ImageTargetContainer)) require.True(t, d.applyFilter(&repo, ImageTargetContainer|ImageTargetVM)) require.False(t, d.applyFilter(&repo, ImageTargetContainer)) + + // Simulate build-lxc + d = Definition{ + Targets: DefinitionTarget{ + LXC: DefinitionTargetLXC{ + Config: []DefinitionTargetLXCConfig{ + { + Type: "all", + Before: 5, + Content: "lxc.include = LXC_TEMPLATE_CONFIG/distro.common.conf", + }, + }, + }, + }, + } + + d.ApplyFilters(ImageTargetUndefined | ImageTargetAll | ImageTargetContainer) + require.NotEmpty(t, d.Targets.LXC.Config) + + // Simulate pack-lxc + d = Definition{ + Targets: DefinitionTarget{ + LXC: DefinitionTargetLXC{ + Config: []DefinitionTargetLXCConfig{ + { + Type: "all", + Before: 5, + Content: "lxc.include = LXC_TEMPLATE_CONFIG/distro.common.conf", + }, + }, + }, + }, + } + + d.ApplyFilters(ImageTargetAll | ImageTargetContainer) + require.NotEmpty(t, d.Targets.LXC.Config) } func TestDefinitionFilterTypeUnmarshalYAML(t *testing.T) {