Browse code

add setSubEnv and getSubEnv

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)

Victor Vieux authored on 2014/01/28 12:26:24
Showing 4 changed files
... ...
@@ -345,11 +345,11 @@ func postCommit(srv *Server, version float64, w http.ResponseWriter, r *http.Req
345 345
 		return err
346 346
 	}
347 347
 	var (
348
-		config = &Config{}
348
+		config engine.Env
349 349
 		env    engine.Env
350 350
 		job    = srv.Eng.Job("commit", r.Form.Get("container"))
351 351
 	)
352
-	if err := json.NewDecoder(r.Body).Decode(config); err != nil && err != io.EOF {
352
+	if err := config.Import(r.Body); err != nil {
353 353
 		utils.Errorf("%s", err)
354 354
 	}
355 355
 
... ...
@@ -357,7 +357,7 @@ func postCommit(srv *Server, version float64, w http.ResponseWriter, r *http.Req
357 357
 	job.Setenv("tag", r.Form.Get("tag"))
358 358
 	job.Setenv("author", r.Form.Get("author"))
359 359
 	job.Setenv("comment", r.Form.Get("comment"))
360
-	job.SetenvJson("config", config)
360
+	job.SetenvSubEnv("config", &config)
361 361
 
362 362
 	var id string
363 363
 	job.Stdout.AddString(&id)
... ...
@@ -704,18 +704,14 @@ func postContainersAttach(srv *Server, version float64, w http.ResponseWriter, r
704 704
 		return fmt.Errorf("Missing parameter")
705 705
 	}
706 706
 
707
-	// TODO: replace the buffer by job.AddEnv()
708 707
 	var (
709 708
 		job    = srv.Eng.Job("inspect", vars["name"], "container")
710
-		buffer = bytes.NewBuffer(nil)
711
-		c      Container
709
+		c, err = job.Stdout.AddEnv()
712 710
 	)
713
-	job.Stdout.Add(buffer)
714
-	if err := job.Run(); err != nil {
711
+	if err != nil {
715 712
 		return err
716 713
 	}
717
-
718
-	if err := json.Unmarshal(buffer.Bytes(), &c); err != nil {
714
+	if err = job.Run(); err != nil {
719 715
 		return err
720 716
 	}
721 717
 
... ...
@@ -742,7 +738,7 @@ func postContainersAttach(srv *Server, version float64, w http.ResponseWriter, r
742 742
 
743 743
 	fmt.Fprintf(outStream, "HTTP/1.1 200 OK\r\nContent-Type: application/vnd.docker.raw-stream\r\n\r\n")
744 744
 
745
-	if !c.Config.Tty && version >= 1.6 {
745
+	if c.GetSubEnv("Config") != nil && !c.GetSubEnv("Config").GetBool("Tty") && version >= 1.6 {
746 746
 		errStream = utils.NewStdWriter(outStream, utils.Stderr)
747 747
 		outStream = utils.NewStdWriter(outStream, utils.Stdout)
748 748
 	} else {
... ...
@@ -86,6 +86,28 @@ func (env *Env) GetList(key string) []string {
86 86
 	return l
87 87
 }
88 88
 
89
+func (env *Env) GetSubEnv(key string) *Env {
90
+	sval := env.Get(key)
91
+	if sval == "" {
92
+		return nil
93
+	}
94
+	buf := bytes.NewBufferString(sval)
95
+	var sub Env
96
+	if err := sub.Decode(buf); err != nil {
97
+		return nil
98
+	}
99
+	return &sub
100
+}
101
+
102
+func (env *Env) SetSubEnv(key string, sub *Env) error {
103
+	var buf bytes.Buffer
104
+	if err := sub.Encode(&buf); err != nil {
105
+		return err
106
+	}
107
+	env.Set(key, string(buf.Bytes()))
108
+	return nil
109
+}
110
+
89 111
 func (env *Env) GetJson(key string, iface interface{}) error {
90 112
 	sval := env.Get(key)
91 113
 	if sval == "" {
... ...
@@ -118,6 +118,14 @@ func (job *Job) SetenvBool(key string, value bool) {
118 118
 	job.env.SetBool(key, value)
119 119
 }
120 120
 
121
+func (job *Job) GetenvSubEnv(key string) *Env {
122
+	return job.env.GetSubEnv(key)
123
+}
124
+
125
+func (job *Job) SetenvSubEnv(key string, value *Env) error {
126
+	return job.env.SetSubEnv(key, value)
127
+}
128
+
121 129
 func (job *Job) GetenvInt64(key string) int64 {
122 130
 	return job.env.GetInt64(key)
123 131
 }
... ...
@@ -1656,8 +1656,7 @@ func (srv *Server) ContainerCreate(job *engine.Job) engine.Status {
1656 1656
 	}
1657 1657
 	resolvConf, err := utils.GetResolvConf()
1658 1658
 	if err != nil {
1659
-		job.Error(err)
1660
-		return engine.StatusErr
1659
+		return job.Error(err)
1661 1660
 	}
1662 1661
 	if !config.NetworkDisabled && len(config.Dns) == 0 && len(srv.runtime.config.Dns) == 0 && utils.CheckLocalDns(resolvConf) {
1663 1662
 		job.Errorf("WARNING: Docker detected local DNS server on resolv.conf. Using default external servers: %v\n", defaultDns)