From a3ac69639b4fe766bcb2b894b6bbead9712c27d3 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Fri, 24 Mar 2017 14:29:56 +0000 Subject: [PATCH] Support creating of directories in files section e.g. files: - path: etc/docker/daemon.json contents: '{"debug": true}' - path: var/lib/mydaemon directory: true Signed-off-by: Ian Campbell --- src/cmd/moby/config.go | 47 ++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/src/cmd/moby/config.go b/src/cmd/moby/config.go index 14f409d72..3375e0b5c 100644 --- a/src/cmd/moby/config.go +++ b/src/cmd/moby/config.go @@ -28,8 +28,9 @@ type Moby struct { System []MobyImage Daemon []MobyImage Files []struct { - Path string - Contents string + Path string + Directory bool + Contents string } Outputs []struct { Format string @@ -385,7 +386,7 @@ func filesystem(m *Moby) (*bytes.Buffer, error) { if f.Path == "" { return buf, errors.New("Did not specify path for file") } - if f.Contents == "" { + if !f.Directory && f.Contents == "" { return buf, errors.New("Contents of file not specified") } // we need all the leading directories @@ -410,18 +411,34 @@ func filesystem(m *Moby) (*bytes.Buffer, error) { return buf, err } } - hdr := &tar.Header{ - Name: f.Path, - Mode: 0600, - Size: int64(len(f.Contents)), - } - err := tw.WriteHeader(hdr) - if err != nil { - return buf, err - } - _, err = tw.Write([]byte(f.Contents)) - if err != nil { - return buf, err + + if f.Directory { + if f.Contents != "" { + return buf, errors.New("Directory with contents not allowed") + } + hdr := &tar.Header{ + Name: f.Path, + Typeflag: tar.TypeDir, + Mode: 0700, + } + err := tw.WriteHeader(hdr) + if err != nil { + return buf, err + } + } else { + hdr := &tar.Header{ + Name: f.Path, + Mode: 0600, + Size: int64(len(f.Contents)), + } + err := tw.WriteHeader(hdr) + if err != nil { + return buf, err + } + _, err = tw.Write([]byte(f.Contents)) + if err != nil { + return buf, err + } } } return buf, nil