From 01dccba50c101d3a12bac4a5eaf34ea8ebd12352 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 20 Dec 2023 17:00:03 +0100 Subject: [PATCH] quadlet: When loading dropin files for foo@instance, also load those for foo@. This is how systemd works for templates, and it allows us lots of flexibilities. Signed-off-by: Alexander Larsson --- cmd/quadlet/main.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/cmd/quadlet/main.go b/cmd/quadlet/main.go index 447820dae2..736cff2a30 100644 --- a/cmd/quadlet/main.go +++ b/cmd/quadlet/main.go @@ -254,10 +254,22 @@ func loadUnitDropins(unit *parser.UnitFile, sourcePaths []string) error { prevError = err } - var dropinPaths = make(map[string]string) - for _, sourcePath := range sourcePaths { - dropinDir := path.Join(sourcePath, unit.Filename+".d") + dropinDirs := []string{} + for _, sourcePath := range sourcePaths { + dropinDirs = append(dropinDirs, path.Join(sourcePath, unit.Filename+".d")) + } + + // For instantiated templates, also look in the non-instanced template dropin dirs + templateBase, templateInstance := unit.GetTemplateParts() + if templateBase != "" && templateInstance != "" { + for _, sourcePath := range sourcePaths { + dropinDirs = append(dropinDirs, path.Join(sourcePath, templateBase+".d")) + } + } + + var dropinPaths = make(map[string]string) + for _, dropinDir := range dropinDirs { dropinFiles, err := os.ReadDir(dropinDir) if err != nil { if !errors.Is(err, os.ErrNotExist) {