Browse code

Engine: fix a bug when encoding a job environment to json

Solomon Hykes authored on 2013/10/27 16:15:22
Showing 2 changed files
... ...
@@ -644,6 +644,9 @@ func postContainersStart(srv *Server, version float64, w http.ResponseWriter, r
644 644
 	}
645 645
 	name := vars["name"]
646 646
 	job := srv.Eng.Job("start", name)
647
+	if err := job.ImportEnv(HostConfig{}); err != nil {
648
+		return fmt.Errorf("Couldn't initialize host configuration")
649
+	}
647 650
 	// allow a nil body for backwards compatibility
648 651
 	if r.Body != nil {
649 652
 		if matchesContentType(r.Header.Get("Content-Type"), "application/json") {
... ...
@@ -149,10 +149,22 @@ func (job *Job) DecodeEnv(src io.Reader) error {
149 149
 }
150 150
 
151 151
 func (job *Job) EncodeEnv(dst io.Writer) error {
152
-	return json.NewEncoder(dst).Encode(job.Environ())
152
+	m := make(map[string]interface{})
153
+	for k, v := range job.Environ() {
154
+		var val interface{}
155
+		if err := json.Unmarshal([]byte(v), &val); err == nil {
156
+			m[k] = val
157
+		} else {
158
+			m[k] = v
159
+		}
160
+	}
161
+	if err := json.NewEncoder(dst).Encode(&m); err != nil {
162
+		return err
163
+	}
164
+	return nil
153 165
 }
154 166
 
155
-func (job *Job) ExportEnv(dst interface{}) error {
167
+func (job *Job) ExportEnv(dst interface{}) (err error) {
156 168
 	var buf bytes.Buffer
157 169
 	if err := job.EncodeEnv(&buf); err != nil {
158 170
 		return err