Browse Source

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

Solomon Hykes 11 years ago
parent
commit
434f06d03d
2 changed files with 17 additions and 2 deletions
  1. 3 0
      api.go
  2. 14 2
      engine/job.go

+ 3 - 0
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") {

+ 14 - 2
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