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

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) ===
This allows changing the mode, gid and uid when using the dump generator.

From 97ac364c4611e7848ec9e7b02fc185dd7786936f Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Mon, 11 May 2020 17:19:14 +0200
Subject: [PATCH 1/5] shared/definition: Add Mode, GID and UID to files

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 shared/definition.go | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/shared/definition.go b/shared/definition.go
index 66e9bee..5df49c3 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -180,6 +180,9 @@ type DefinitionFile struct {
        Name             string                 `yaml:"name,omitempty"`
        Template         DefinitionFileTemplate `yaml:"template,omitempty"`
        Templated        bool                   `yaml:"templated,omitempty"`
+       Mode             string                 `yaml:"mode,omitempty"`
+       GID              string                 `yaml:"gid,omitempty"`
+       UID              string                 `yaml:"uid,omitempty"`
 }
 
 // A DefinitionFileTemplate represents the settings used by generators

From a48118828b0dbb26f8fe842003ac2d596c256a0c Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Mon, 11 May 2020 17:21:17 +0200
Subject: [PATCH 2/5] generators: Add file access handler

This adds a function which handles both file permission and ownership.

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 generators/utils.go | 53 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
 create mode 100644 generators/utils.go

diff --git a/generators/utils.go b/generators/utils.go
new file mode 100644
index 0000000..79c3d92
--- /dev/null
+++ b/generators/utils.go
@@ -0,0 +1,53 @@
+package generators
+
+import (
+       "os"
+       "strconv"
+
+       "github.com/pkg/errors"
+
+       "github.com/lxc/distrobuilder/shared"
+)
+
+func updateFileAccess(file *os.File, defFile shared.DefinitionFile) error {
+       // Change file mode if needed
+       if defFile.Mode != "" {
+               mode, err := strconv.ParseUint(defFile.Mode, 8, 64)
+               if err != nil {
+                       return errors.Wrap(err, "Failed to parse file mode")
+               }
+
+               err = file.Chmod(os.FileMode(mode))
+               if err != nil {
+                       return errors.Wrap(err, "Failed to change file mode")
+               }
+       }
+
+       // Change gid if needed
+       if defFile.GID != "" {
+               gid, err := strconv.Atoi(defFile.GID)
+               if err != nil {
+                       return errors.Wrap(err, "Failed to parse GID")
+               }
+
+               err = file.Chown(-1, gid)
+               if err != nil {
+                       return errors.Wrap(err, "Failed to change GID")
+               }
+       }
+
+       // Change uid if needed
+       if defFile.Mode != "" {
+               uid, err := strconv.Atoi(defFile.UID)
+               if err != nil {
+                       return errors.Wrap(err, "Failed to parse UID")
+               }
+
+               err = file.Chown(uid, -1)
+               if err != nil {
+                       return errors.Wrap(err, "Failed to change UID")
+               }
+       }
+
+       return nil
+}

From e4ed18a2c25eb67ff3253ff9dfb0f4ee9b43b076 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Mon, 11 May 2020 17:21:54 +0200
Subject: [PATCH 3/5] generators/dump: Allow changing mode, UID and GID

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 generators/dump.go | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/generators/dump.go b/generators/dump.go
index 526b191..d829a55 100644
--- a/generators/dump.go
+++ b/generators/dump.go
@@ -35,10 +35,9 @@ func (g DumpGenerator) RunLXD(cacheDir, sourceDir string, 
img *image.LXDImage,
 
 // Run dumps content to a file.
 func (g DumpGenerator) Run(cacheDir, sourceDir string, defFile 
shared.DefinitionFile) error {
-       return g.dumpFile(filepath.Join(sourceDir, defFile.Path), 
defFile.Content)
-}
+       path := filepath.Join(sourceDir, defFile.Path)
+       content := defFile.Content
 
-func (g DumpGenerator) dumpFile(path, content string) error {
        // Create any missing directory
        err := os.MkdirAll(filepath.Dir(path), 0755)
        if err != nil {
@@ -63,5 +62,5 @@ func (g DumpGenerator) dumpFile(path, content string) error {
                return err
        }
 
-       return nil
+       return updateFileAccess(file, defFile)
 }

From 2c016a74a9c5b8fe8be0a05e098686cd0ee05bee Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Mon, 11 May 2020 17:47:46 +0200
Subject: [PATCH 4/5] doc/generators: Update dump generator

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 doc/generators.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/doc/generators.md b/doc/generators.md
index ec69212..66d37c5 100644
--- a/doc/generators.md
+++ b/doc/generators.md
@@ -24,6 +24,9 @@ files:
           properties: <map>
           when: <array>
       templated: <boolean>
+      mode: <string>
+      gid: <string>
+      uid: <string>
       architectures: <array> # filter
       releases: <array> # filter
       variants: <array> # filter
@@ -45,6 +48,7 @@ Setting `path`, `content` or `template.properties` will 
override the default val
 ## dump
 
 The `dump` generator writes the provided `content` to a file set in `path`.
+If provided, it will set the `mode` (octal format), `gid` (integer) and/or 
`uid` (integer).
 
 ## hostname
 

From 3aa989ddbd8b31021018c87b14296109f0508075 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.h...@canonical.com>
Date: Mon, 11 May 2020 17:48:22 +0200
Subject: [PATCH 5/5] doc/examples/schema: Add mode, gid and uid

Signed-off-by: Thomas Hipp <thomas.h...@canonical.com>
---
 doc/examples/scheme.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/doc/examples/scheme.yaml b/doc/examples/scheme.yaml
index ea8dae5..5a08afe 100644
--- a/doc/examples/scheme.yaml
+++ b/doc/examples/scheme.yaml
@@ -75,6 +75,9 @@ files:
     content: |-
       here goes the content
     name: name
+    mode: 0644
+    gid: 1000
+    uid: 1000
     template:
       properties:
         key: value
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to