From 434f06d03dc2825cb4f348a88ddc6d1aa17ea19c Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Sun, 27 Oct 2013 07:15:22 +0000 Subject: [PATCH] Engine: fix a bug when encoding a job environment to json --- api.go | 3 +++ engine/job.go | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/api.go b/api.go index 1a3d92de32..18251eba2f 100644 --- a/api.go +++ b/api.go @@ -644,6 +644,9 @@ func postContainersStart(srv *Server, version float64, w http.ResponseWriter, r } name := vars["name"] job := srv.Eng.Job("start", name) + if err := job.ImportEnv(HostConfig{}); err != nil { + return fmt.Errorf("Couldn't initialize host configuration") + } // allow a nil body for backwards compatibility if r.Body != nil { if matchesContentType(r.Header.Get("Content-Type"), "application/json") { diff --git a/engine/job.go b/engine/job.go index 7a261409e0..b6296eb91d 100644 --- a/engine/job.go +++ b/engine/job.go @@ -149,10 +149,22 @@ func (job *Job) DecodeEnv(src io.Reader) error { } func (job *Job) EncodeEnv(dst io.Writer) error { - return json.NewEncoder(dst).Encode(job.Environ()) + m := make(map[string]interface{}) + for k, v := range job.Environ() { + var val interface{} + if err := json.Unmarshal([]byte(v), &val); err == nil { + m[k] = val + } else { + m[k] = v + } + } + if err := json.NewEncoder(dst).Encode(&m); err != nil { + return err + } + return nil } -func (job *Job) ExportEnv(dst interface{}) error { +func (job *Job) ExportEnv(dst interface{}) (err error) { var buf bytes.Buffer if err := job.EncodeEnv(&buf); err != nil { return err