[lxc-devel] [distrobuilder/master] Add filters for various actions
monstermunchkin on Github
lxc-bot at linuxcontainers.org
Wed Aug 14 14:35:51 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 364 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190814/fd47c3e6/attachment.bin>
-------------- next part --------------
From 1b2b73dff67d7cc5057dd51f5968923749dae433 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Wed, 14 Aug 2019 16:34:23 +0200
Subject: [PATCH] Add filters for various actions
Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
distrobuilder/main_build-dir.go | 10 ++++++++++
shared/definition.go | 32 ++++++++++++++++++++++----------
2 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/distrobuilder/main_build-dir.go b/distrobuilder/main_build-dir.go
index add07d1..de44d61 100644
--- a/distrobuilder/main_build-dir.go
+++ b/distrobuilder/main_build-dir.go
@@ -33,6 +33,16 @@ func (c *cmdBuildDir) command() *cobra.Command {
continue
}
+ if len(file.Architectures) > 0 && !lxd.StringInSlice(
+ c.global.definition.Image.ArchitectureMapped, file.Architectures) {
+ continue
+ }
+
+ if len(file.Variants) > 0 && !lxd.StringInSlice(
+ c.global.definition.Image.Variant, file.Variants) {
+ continue
+ }
+
err := generator.Run(c.global.flagCacheDir, c.global.targetDir, file)
if err != nil {
continue
diff --git a/shared/definition.go b/shared/definition.go
index 9ecdbe5..977cb8b 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -12,16 +12,21 @@ import (
lxdarch "github.com/lxc/lxd/shared/osarch"
)
-// A DefinitionPackagesSet is a set of packages which are to be installed
-// or removed.
-type DefinitionPackagesSet struct {
- Packages []string `yaml:"packages"`
- Action string `yaml:"action"`
+// A DefinitionFilter defines filters for various actions.
+type DefinitionFilter struct {
Releases []string `yaml:"releases,omitempty"`
Architectures []string `yaml:"architectures,omitempty"`
Variants []string `yaml:"variants,omitempty"`
}
+// A DefinitionPackagesSet is a set of packages which are to be installed
+// or removed.
+type DefinitionPackagesSet struct {
+ DefinitionFilter
+ Packages []string `yaml:"packages"`
+ Action string `yaml:"action"`
+}
+
// A DefinitionPackagesRepository contains data of a specific repository
type DefinitionPackagesRepository struct {
Name string `yaml:"name"` // Name of the repository
@@ -110,14 +115,13 @@ type DefinitionTarget struct {
// A DefinitionFile represents a file which is to be created inside to chroot.
type DefinitionFile struct {
+ DefinitionFilter
Generator string `yaml:"generator"`
Path string `yaml:"path,omitempty"`
Content string `yaml:"content,omitempty"`
- Releases []string `yaml:"releases,omitempty"`
Name string `yaml:"name,omitempty"`
Template DefinitionFileTemplate `yaml:"template,omitempty"`
Templated bool `yaml:"templated,omitempty"`
- Variants []string `yaml:"variants,omitempty"`
}
// A DefinitionFileTemplate represents the settings used by generators
@@ -129,9 +133,9 @@ type DefinitionFileTemplate struct {
// A DefinitionAction specifies a custom action (script) which is to be run after
// a certain action.
type DefinitionAction struct {
- Trigger string `yaml:"trigger"`
- Action string `yaml:"action"`
- Releases []string `yaml:"releases,omitempty"`
+ DefinitionFilter
+ Trigger string `yaml:"trigger"`
+ Action string `yaml:"action"`
}
// DefinitionMappings defines custom mappings.
@@ -422,6 +426,14 @@ func (d *Definition) GetRunnableActions(trigger string) []DefinitionAction {
continue
}
+ if len(action.Architectures) > 0 && !shared.StringInSlice(d.Image.ArchitectureMapped, action.Architectures) {
+ continue
+ }
+
+ if len(action.Variants) > 0 && !shared.StringInSlice(d.Image.Variant, action.Variants) {
+ continue
+ }
+
out = append(out, action)
}
More information about the lxc-devel
mailing list