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

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) ===

From 32dc1ab397a8f25c8f6d6f146aeb9adfb3aad7ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 13 Mar 2018 13:00:22 -0400
Subject: [PATCH 1/8] Rename Arch to Architecture
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 README.md                 | 2 +-
 distrobuilder/main.go     | 8 ++++----
 image/lxc_test.go         | 4 ++--
 image/lxd.go              | 8 ++++----
 image/lxd_test.go         | 4 ++--
 shared/definition.go      | 6 +++---
 shared/definition_test.go | 4 ++--
 7 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/README.md b/README.md
index 7b75d22..3ad4925 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ image:
   variant: default # optional
   description: Ubuntu Artful # optional
   expiry: 30d # optional: defaults to 30d
-  arch: x86_64 # optional: defaults to local architecture
+  architecture: x86_64 # optional: defaults to local architecture
 
 source:
   downloader: ubuntu-http
diff --git a/distrobuilder/main.go b/distrobuilder/main.go
index cae2fa8..8cc5fd8 100644
--- a/distrobuilder/main.go
+++ b/distrobuilder/main.go
@@ -294,21 +294,21 @@ func getMappedArchitecture(def *shared.Definition) 
(string, error) {
        if def.Mappings.ArchitectureMap != "" {
                // Translate the architecture using the requested map
                var err error
-               arch, err = shared.GetArch(def.Mappings.ArchitectureMap, 
def.Image.Arch)
+               arch, err = shared.GetArch(def.Mappings.ArchitectureMap, 
def.Image.Architecture)
                if err != nil {
                        return "", fmt.Errorf("Failed to translate the 
architecture name: %s", err)
                }
        } else if len(def.Mappings.Architectures) > 0 {
                // Translate the architecture using a user specified mapping
                var ok bool
-               arch, ok = def.Mappings.Architectures[def.Image.Arch]
+               arch, ok = def.Mappings.Architectures[def.Image.Architecture]
                if !ok {
                        // If no mapping exists, it means it doesn't need 
translating
-                       arch = def.Image.Arch
+                       arch = def.Image.Architecture
                }
        } else {
                // No map or mappings provided, just go with it as it is
-               arch = def.Image.Arch
+               arch = def.Image.Architecture
        }
 
        return arch, nil
diff --git a/image/lxc_test.go b/image/lxc_test.go
index 93de24f..41180d6 100644
--- a/image/lxc_test.go
+++ b/image/lxc_test.go
@@ -18,9 +18,9 @@ var lxcImageDef = shared.DefinitionImage{
        Description:  "{{ image. Distribution|capfirst }} {{ image.Release }}",
        Distribution: "ubuntu",
        Release:      "17.10",
-       Arch:         "amd64",
+       Architecture: "amd64",
        Expiry:       "30d",
-       Name:         "{{ image.Distribution|lower }}-{{ image.Release }}-{{ 
image.Arch }}-{{ creation_date }}",
+       Name:         "{{ image.Distribution|lower }}-{{ image.Release }}-{{ 
image.Architecture }}-{{ creation_date }}",
 }
 
 var lxcTarget = shared.DefinitionTargetLXC{
diff --git a/image/lxd.go b/image/lxd.go
index 56b5054..31d5a72 100644
--- a/image/lxd.go
+++ b/image/lxd.go
@@ -123,7 +123,7 @@ func (l *LXDImage) createMetadata() error {
        var err error
 
        // Get the arch ID of the provided architecture.
-       ID, err := osarch.ArchitectureId(l.definition.Arch)
+       ID, err := osarch.ArchitectureId(l.definition.Architecture)
        if err != nil {
                return err
        }
@@ -135,11 +135,11 @@ func (l *LXDImage) createMetadata() error {
        }
 
        // Use proper architecture name from now on.
-       l.definition.Arch = arch
+       l.definition.Architecture = arch
 
-       l.Metadata.Architecture = l.definition.Arch
+       l.Metadata.Architecture = l.definition.Architecture
        l.Metadata.CreationDate = l.creationDate.Unix()
-       l.Metadata.Properties["architecture"] = l.definition.Arch
+       l.Metadata.Properties["architecture"] = l.definition.Architecture
        l.Metadata.Properties["os"] = l.definition.Distribution
        l.Metadata.Properties["release"] = l.definition.Release
 
diff --git a/image/lxd_test.go b/image/lxd_test.go
index 04f6caa..9789a06 100644
--- a/image/lxd_test.go
+++ b/image/lxd_test.go
@@ -19,9 +19,9 @@ var lxdImageDef = shared.DefinitionImage{
        Description:  "{{ image. Distribution|capfirst }} {{ image.Release }}",
        Distribution: "ubuntu",
        Release:      "17.10",
-       Arch:         "amd64",
+       Architecture: "amd64",
        Expiry:       "30d",
-       Name:         "{{ image.Distribution|lower }}-{{ image.Release }}-{{ 
image.Arch }}-{{ creation_date }}",
+       Name:         "{{ image.Distribution|lower }}-{{ image.Release }}-{{ 
image.Architecture }}-{{ creation_date }}",
 }
 
 func setupLXD(t *testing.T) *LXDImage {
diff --git a/shared/definition.go b/shared/definition.go
index 00e1a1b..c555e12 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -23,7 +23,7 @@ type DefinitionImage struct {
        Description  string `yaml:"description"`
        Distribution string `yaml:"distribution"`
        Release      string `yaml:"release,omitempty"`
-       Arch         string `yaml:"arch,omitempty"`
+       Architecture string `yaml:"arch,omitempty"`
        Expiry       string `yaml:"expiry,omitempty"`
        Variant      string `yaml:"variant,omitempty"`
        Name         string `yaml:"name,omitempty"`
@@ -95,8 +95,8 @@ type Definition struct {
 // SetDefinitionDefaults sets some default values for the given Definition.
 func SetDefinitionDefaults(def *Definition) {
        // default to local arch
-       if def.Image.Arch == "" {
-               def.Image.Arch = runtime.GOARCH
+       if def.Image.Architecture == "" {
+               def.Image.Architecture = runtime.GOARCH
        }
 
        // set default expiry of 30 days
diff --git a/shared/definition_test.go b/shared/definition_test.go
index 1686aed..dfbd93d 100644
--- a/shared/definition_test.go
+++ b/shared/definition_test.go
@@ -12,8 +12,8 @@ func TestSetDefinitionDefaults(t *testing.T) {
 
        SetDefinitionDefaults(&def)
 
-       if def.Image.Arch != runtime.GOARCH {
-               t.Fatalf("Expected image.arch to be '%s', got '%s'", 
runtime.GOARCH, def.Image.Arch)
+       if def.Image.Architecture != runtime.GOARCH {
+               t.Fatalf("Expected image.arch to be '%s', got '%s'", 
runtime.GOARCH, def.Image.Architecture)
        }
 
        if def.Image.Expiry != "30d" {

From e20b1fbe198d9dc5856a1fc8c82956db8230d532 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 13 Mar 2018 13:23:55 -0400
Subject: [PATCH 2/8] Set variant as LXD image property
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 image/lxd.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/image/lxd.go b/image/lxd.go
index 31d5a72..7ec2bc9 100644
--- a/image/lxd.go
+++ b/image/lxd.go
@@ -99,7 +99,6 @@ func (l *LXDImage) Build(unified bool, compression string) 
error {
                if err != nil {
                        return err
                }
-
        } else {
                // Create rootfs as squashfs.
                err = shared.RunCommand("mksquashfs", l.sourceDir,
@@ -142,6 +141,7 @@ func (l *LXDImage) createMetadata() error {
        l.Metadata.Properties["architecture"] = l.definition.Architecture
        l.Metadata.Properties["os"] = l.definition.Distribution
        l.Metadata.Properties["release"] = l.definition.Release
+       l.Metadata.Properties["variant"] = l.definition.Variant
 
        ctx := pongo2.Context{
                "image":         l.definition,

From 6da67fa5749bd5a938c8b68e31372e56c38f209e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 13 Mar 2018 14:03:35 -0400
Subject: [PATCH 3/8] Add serial to LXD metadata
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 image/lxd.go | 1 +
 1 file changed, 1 insertion(+)

diff --git a/image/lxd.go b/image/lxd.go
index 7ec2bc9..4ebdbb9 100644
--- a/image/lxd.go
+++ b/image/lxd.go
@@ -142,6 +142,7 @@ func (l *LXDImage) createMetadata() error {
        l.Metadata.Properties["os"] = l.definition.Distribution
        l.Metadata.Properties["release"] = l.definition.Release
        l.Metadata.Properties["variant"] = l.definition.Variant
+       l.Metadata.Properties["serial"] = l.creationDate.Format("20060201_1504")
 
        ctx := pongo2.Context{
                "image":         l.definition,

From 617f4d4e5f87f357cb61e4251a7a9f779a3f3ab3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 13 Mar 2018 14:04:13 -0400
Subject: [PATCH 4/8] definition: Add missing comment
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 shared/definition.go | 1 +
 1 file changed, 1 insertion(+)

diff --git a/shared/definition.go b/shared/definition.go
index c555e12..16d5b95 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -109,6 +109,7 @@ func SetDefinitionDefaults(def *Definition) {
                def.Image.Variant = "default"
        }
 
+       // Set default keyserver
        if def.Source.Keyserver == "" {
                def.Source.Keyserver = "hkps.pool.sks-keyservers.net"
        }

From 5a7b54d18827b8175dae6591c16eb328abb3e69c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 13 Mar 2018 14:06:18 -0400
Subject: [PATCH 5/8] definition: Set default templates
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 shared/definition.go | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/shared/definition.go b/shared/definition.go
index 16d5b95..6756df1 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -113,6 +113,15 @@ func SetDefinitionDefaults(def *Definition) {
        if def.Source.Keyserver == "" {
                def.Source.Keyserver = "hkps.pool.sks-keyservers.net"
        }
+
+       // Set default name and description templates
+       if def.Image.Name == "" {
+               def.Image.Name = "{{ image.Distribution }}-{{ image.Release 
}}-{{ image.Architecture }}-{{ image.Variant }}-{{ creation_date }}"
+       }
+
+       if def.Image.Description == "" {
+               def.Image.Description = "{{ image.Distribution|capfirst }} {{ 
image.Release }} {{ image.Architecture }}{% if image.Variant != \"default\" %} 
({{ image.Variant }}){% endif %} ({{ creation_date }})"
+       }
 }
 
 // ValidateDefinition validates the given Definition.

From 5f5f48a40f283ceae2e38dd5571cb82f1324145a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 13 Mar 2018 14:25:53 -0400
Subject: [PATCH 6/8] definition: Make the serial a first class variable
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 image/lxc_test.go    |  4 ++--
 image/lxd.go         | 24 ++++++++++--------------
 image/lxd_test.go    | 25 ++++++-------------------
 shared/definition.go | 11 +++++++++--
 4 files changed, 27 insertions(+), 37 deletions(-)

diff --git a/image/lxc_test.go b/image/lxc_test.go
index 41180d6..b2fe043 100644
--- a/image/lxc_test.go
+++ b/image/lxc_test.go
@@ -20,7 +20,7 @@ var lxcImageDef = shared.DefinitionImage{
        Release:      "17.10",
        Architecture: "amd64",
        Expiry:       "30d",
-       Name:         "{{ image.Distribution|lower }}-{{ image.Release }}-{{ 
image.Architecture }}-{{ creation_date }}",
+       Name:         "{{ image.Distribution|lower }}-{{ image.Release }}-{{ 
image.Architecture }}-{{ image.Serial }}",
 }
 
 var lxcTarget = shared.DefinitionTargetLXC{
@@ -231,7 +231,7 @@ func TestLXCCreateMetadataBasic(t *testing.T) {
                err := image.createMetadata()
                if tt.shouldFail {
                        if err == nil {
-                               t.Fatal("Expected to fail, but didn't")
+                               t.Fatalf("Expected to fail, but didn't: %s", 
tt.name)
                        }
 
                        match, _ := regexp.MatchString(tt.expectedError, 
err.Error())
diff --git a/image/lxd.go b/image/lxd.go
index 4ebdbb9..151d607 100644
--- a/image/lxd.go
+++ b/image/lxd.go
@@ -16,12 +16,11 @@ import (
 
 // A LXDImage represents a LXD image.
 type LXDImage struct {
-       sourceDir    string
-       targetDir    string
-       cacheDir     string
-       creationDate time.Time
-       Metadata     api.ImageMetadata
-       definition   shared.DefinitionImage
+       sourceDir  string
+       targetDir  string
+       cacheDir   string
+       Metadata   api.ImageMetadata
+       definition shared.DefinitionImage
 }
 
 // NewLXDImage returns a LXDImage.
@@ -31,7 +30,6 @@ func NewLXDImage(sourceDir, targetDir, cacheDir string,
                sourceDir,
                targetDir,
                cacheDir,
-               time.Now(),
                api.ImageMetadata{
                        Properties: make(map[string]string),
                        Templates:  make(map[string]*api.ImageMetadataTemplate),
@@ -73,8 +71,7 @@ func (l *LXDImage) Build(unified bool, compression string) 
error {
 
        if unified {
                ctx := pongo2.Context{
-                       "image":         l.definition,
-                       "creation_date": l.creationDate.Format("20060201_1504"),
+                       "image": l.definition,
                }
 
                var fname string
@@ -137,16 +134,15 @@ func (l *LXDImage) createMetadata() error {
        l.definition.Architecture = arch
 
        l.Metadata.Architecture = l.definition.Architecture
-       l.Metadata.CreationDate = l.creationDate.Unix()
+       l.Metadata.CreationDate = time.Now().UTC().Unix()
        l.Metadata.Properties["architecture"] = l.definition.Architecture
        l.Metadata.Properties["os"] = l.definition.Distribution
        l.Metadata.Properties["release"] = l.definition.Release
        l.Metadata.Properties["variant"] = l.definition.Variant
-       l.Metadata.Properties["serial"] = l.creationDate.Format("20060201_1504")
+       l.Metadata.Properties["serial"] = l.definition.Serial
 
        ctx := pongo2.Context{
-               "image":         l.definition,
-               "creation_date": l.creationDate.Format("20060201_1504"),
+               "image": l.definition,
        }
 
        l.Metadata.Properties["description"], err = 
shared.RenderTemplate(l.definition.Description, ctx)
@@ -159,7 +155,7 @@ func (l *LXDImage) createMetadata() error {
                return err
        }
 
-       l.Metadata.ExpiryDate = shared.GetExpiryDate(l.creationDate, 
l.definition.Expiry).Unix()
+       l.Metadata.ExpiryDate = shared.GetExpiryDate(time.Now(), 
l.definition.Expiry).Unix()
 
        return err
 }
diff --git a/image/lxd_test.go b/image/lxd_test.go
index 9789a06..1aef997 100644
--- a/image/lxd_test.go
+++ b/image/lxd_test.go
@@ -8,7 +8,6 @@ import (
        "reflect"
        "strings"
        "testing"
-       "time"
 
        lxd "github.com/lxc/lxd/shared"
 
@@ -21,7 +20,8 @@ var lxdImageDef = shared.DefinitionImage{
        Release:      "17.10",
        Architecture: "amd64",
        Expiry:       "30d",
-       Name:         "{{ image.Distribution|lower }}-{{ image.Release }}-{{ 
image.Architecture }}-{{ creation_date }}",
+       Name:         "{{ image.Distribution|lower }}-{{ image.Release }}-{{ 
image.Architecture }}-{{ image.Serial }}",
+       Serial:       "testing",
 }
 
 func setupLXD(t *testing.T) *LXDImage {
@@ -39,9 +39,6 @@ func setupLXD(t *testing.T) *LXDImage {
 
        image := NewLXDImage(cacheDir, "", cacheDir, lxdImageDef)
 
-       // Override creation date
-       image.creationDate = time.Date(2006, 1, 2, 3, 4, 5, 0, time.UTC)
-
        // Check cache directory
        if image.cacheDir != cacheDir {
                teardownLXD(t)
@@ -94,10 +91,10 @@ func testLXDBuildUnifiedImage(t *testing.T, image 
*LXDImage) {
        if err != nil {
                t.Fatalf("Unexpected error: %s", err)
        }
-       defer os.Remove("ubuntu-17.10-x86_64-20060201_0304.tar.xz")
+       defer os.Remove("ubuntu-17.10-x86_64-testing.tar.xz")
 
-       if !lxd.PathExists("ubuntu-17.10-x86_64-20060201_0304.tar.xz") {
-               t.Fatalf("File '%s' does not exist", 
"ubuntu-17.10-x86_64-20060201_0304.tar.xz")
+       if !lxd.PathExists("ubuntu-17.10-x86_64-testing.tar.xz") {
+               t.Fatalf("File '%s' does not exist", 
"ubuntu-17.10-x86_64-testing.tar.xz")
        }
 
        // Create unified tarball with default name.
@@ -132,11 +129,6 @@ func TestLXDCreateMetadata(t *testing.T) {
                        image.Metadata.Architecture,
                        "x86_64",
                },
-               {
-                       "CreationDate",
-                       fmt.Sprint(image.Metadata.CreationDate),
-                       fmt.Sprint(image.creationDate.Unix()),
-               },
                {
                        "Properties[architecture]",
                        image.Metadata.Properties["architecture"],
@@ -162,12 +154,7 @@ func TestLXDCreateMetadata(t *testing.T) {
                        "Properties[name]",
                        image.Metadata.Properties["name"],
                        fmt.Sprintf("%s-%s-%s-%s", 
strings.ToLower(lxdImageDef.Distribution),
-                               lxdImageDef.Release, "x86_64", 
image.creationDate.Format("20060201_1504")),
-               },
-               {
-                       "ExpiryDate",
-                       fmt.Sprintf("%d", image.Metadata.ExpiryDate),
-                       "1138763045",
+                               lxdImageDef.Release, "x86_64", 
lxdImageDef.Serial),
                },
        }
 
diff --git a/shared/definition.go b/shared/definition.go
index 6756df1..8db06fe 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -5,6 +5,7 @@ import (
        "fmt"
        "runtime"
        "strings"
+       "time"
 
        "github.com/lxc/lxd/shared"
 )
@@ -27,6 +28,7 @@ type DefinitionImage struct {
        Expiry       string `yaml:"expiry,omitempty"`
        Variant      string `yaml:"variant,omitempty"`
        Name         string `yaml:"name,omitempty"`
+       Serial       string `yaml:"serial,omitempty"`
 }
 
 // A DefinitionSource specifies the download type and location
@@ -104,6 +106,11 @@ func SetDefinitionDefaults(def *Definition) {
                def.Image.Expiry = "30d"
        }
 
+       // Set default serial number
+       if def.Image.Serial == "" {
+               def.Image.Serial = time.Now().UTC().Format("20060201_1504")
+       }
+
        // Set default variant
        if def.Image.Variant == "" {
                def.Image.Variant = "default"
@@ -116,11 +123,11 @@ func SetDefinitionDefaults(def *Definition) {
 
        // Set default name and description templates
        if def.Image.Name == "" {
-               def.Image.Name = "{{ image.Distribution }}-{{ image.Release 
}}-{{ image.Architecture }}-{{ image.Variant }}-{{ creation_date }}"
+               def.Image.Name = "{{ image.Distribution }}-{{ image.Release 
}}-{{ image.Architecture }}-{{ image.Variant }}-{{ image.Serial }}"
        }
 
        if def.Image.Description == "" {
-               def.Image.Description = "{{ image.Distribution|capfirst }} {{ 
image.Release }} {{ image.Architecture }}{% if image.Variant != \"default\" %} 
({{ image.Variant }}){% endif %} ({{ creation_date }})"
+               def.Image.Description = "{{ image.Distribution|capfirst }} {{ 
image.Release }} {{ image.Architecture }}{% if image.Variant != \"default\" %} 
({{ image.Variant }}){% endif %} ({{ image.Serial }})"
        }
 }
 

From 163eb1a61aa5f90d9e845d94ff550a282623ccef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 13 Mar 2018 14:38:46 -0400
Subject: [PATCH 7/8] definition: Fix date format
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 shared/definition.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/shared/definition.go b/shared/definition.go
index 8db06fe..1cecf79 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -108,7 +108,7 @@ func SetDefinitionDefaults(def *Definition) {
 
        // Set default serial number
        if def.Image.Serial == "" {
-               def.Image.Serial = time.Now().UTC().Format("20060201_1504")
+               def.Image.Serial = time.Now().UTC().Format("20060102_1504")
        }
 
        // Set default variant

From 1a277a93ee57739e27f0ce0310bd107b8ced1067 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 13 Mar 2018 15:05:45 -0400
Subject: [PATCH 8/8] shared: Allow chaining templates
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 shared/util.go | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/shared/util.go b/shared/util.go
index 874d6e0..4b1d057 100644
--- a/shared/util.go
+++ b/shared/util.go
@@ -11,6 +11,7 @@ import (
        "path/filepath"
        "regexp"
        "strconv"
+       "strings"
        "time"
 
        lxd "github.com/lxc/lxd/shared"
@@ -214,7 +215,7 @@ func RenderTemplate(template string, ctx pongo2.Context) 
(string, error) {
        )
 
        // Load template from string
-       tpl, err := pongo2.FromString(template)
+       tpl, err := pongo2.FromString("{% autoescape off %}" + template + "{% 
endautoescape %}")
        if err != nil {
                return ret, err
        }
@@ -225,6 +226,11 @@ func RenderTemplate(template string, ctx pongo2.Context) 
(string, error) {
                return ret, err
        }
 
+       // Looks like we're nesting templates so run pongo again
+       if strings.Contains(ret, "{{") || strings.Contains(ret, "{%") {
+               return RenderTemplate(ret, ctx)
+       }
+
        return ret, err
 }
 
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to