Browse code

Revert "refactor build job to know only configFile"

This reverts commit b9731bccf2b2cc8c06ef8bdb41f72ca4791e63db.

Conflicts:
server/server.go

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

Victor Vieux authored on 2014/05/08 07:59:13
Showing 4 changed files
... ...
@@ -872,6 +872,8 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
872 872
 		return fmt.Errorf("Multipart upload for build is no longer supported. Please upgrade your docker client.")
873 873
 	}
874 874
 	var (
875
+		authEncoded       = r.Header.Get("X-Registry-Auth")
876
+		authConfig        = &registry.AuthConfig{}
875 877
 		configFileEncoded = r.Header.Get("X-Registry-Config")
876 878
 		configFile        = &registry.ConfigFile{}
877 879
 		job               = eng.Job("build")
... ...
@@ -881,22 +883,14 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
881 881
 	// Both headers will be parsed and sent along to the daemon, but if a non-empty
882 882
 	// ConfigFile is present, any value provided as an AuthConfig directly will
883 883
 	// be overridden. See BuildFile::CmdFrom for details.
884
-	// /*
885
-	var (
886
-		authEncoded = r.Header.Get("X-Registry-Auth")
887
-		authConfig  = &registry.AuthConfig{}
888
-	)
889 884
 	if version.LessThan("1.9") && authEncoded != "" {
890 885
 		authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded))
891 886
 		if err := json.NewDecoder(authJson).Decode(authConfig); err != nil {
892 887
 			// for a pull it is not an error if no auth was given
893 888
 			// to increase compatibility with the existing api it is defaulting to be empty
894 889
 			authConfig = &registry.AuthConfig{}
895
-		} else {
896
-			configFile.Configs[authConfig.ServerAddress] = *authConfig
897 890
 		}
898 891
 	}
899
-	// */
900 892
 
901 893
 	if configFileEncoded != "" {
902 894
 		configFileJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(configFileEncoded))
... ...
@@ -919,6 +913,7 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
919 919
 	job.Setenv("q", r.FormValue("q"))
920 920
 	job.Setenv("nocache", r.FormValue("nocache"))
921 921
 	job.Setenv("rm", r.FormValue("rm"))
922
+	job.SetenvJson("authConfig", authConfig)
922 923
 	job.SetenvJson("configFile", configFile)
923 924
 
924 925
 	if err := job.Run(); err != nil {
... ...
@@ -394,7 +394,7 @@ func buildImage(context testContextTemplate, t *testing.T, eng *engine.Engine, u
394 394
 	}
395 395
 	dockerfile := constructDockerfile(context.dockerfile, ip, port)
396 396
 
397
-	buildfile := server.NewBuildFile(srv, ioutil.Discard, ioutil.Discard, false, useCache, false, ioutil.Discard, utils.NewStreamFormatter(false), nil)
397
+	buildfile := server.NewBuildFile(srv, ioutil.Discard, ioutil.Discard, false, useCache, false, ioutil.Discard, utils.NewStreamFormatter(false), nil, nil)
398 398
 	id, err := buildfile.Build(context.Archive(dockerfile, t))
399 399
 	if err != nil {
400 400
 		return nil, err
... ...
@@ -828,7 +828,7 @@ func TestForbiddenContextPath(t *testing.T) {
828 828
 	}
829 829
 	dockerfile := constructDockerfile(context.dockerfile, ip, port)
830 830
 
831
-	buildfile := server.NewBuildFile(srv, ioutil.Discard, ioutil.Discard, false, true, false, ioutil.Discard, utils.NewStreamFormatter(false), nil)
831
+	buildfile := server.NewBuildFile(srv, ioutil.Discard, ioutil.Discard, false, true, false, ioutil.Discard, utils.NewStreamFormatter(false), nil, nil)
832 832
 	_, err = buildfile.Build(context.Archive(dockerfile, t))
833 833
 
834 834
 	if err == nil {
... ...
@@ -874,7 +874,7 @@ func TestBuildADDFileNotFound(t *testing.T) {
874 874
 	}
875 875
 	dockerfile := constructDockerfile(context.dockerfile, ip, port)
876 876
 
877
-	buildfile := server.NewBuildFile(mkServerFromEngine(eng, t), ioutil.Discard, ioutil.Discard, false, true, false, ioutil.Discard, utils.NewStreamFormatter(false), nil)
877
+	buildfile := server.NewBuildFile(mkServerFromEngine(eng, t), ioutil.Discard, ioutil.Discard, false, true, false, ioutil.Discard, utils.NewStreamFormatter(false), nil, nil)
878 878
 	_, err = buildfile.Build(context.Archive(dockerfile, t))
879 879
 
880 880
 	if err == nil {
... ...
@@ -50,6 +50,7 @@ type buildFile struct {
50 50
 	utilizeCache bool
51 51
 	rm           bool
52 52
 
53
+	authConfig *registry.AuthConfig
53 54
 	configFile *registry.ConfigFile
54 55
 
55 56
 	tmpContainers map[string]struct{}
... ...
@@ -80,10 +81,20 @@ func (b *buildFile) CmdFrom(name string) error {
80 80
 	if err != nil {
81 81
 		if b.daemon.Graph().IsNotExist(err) {
82 82
 			remote, tag := utils.ParseRepositoryTag(name)
83
+			pullRegistryAuth := b.authConfig
84
+			if len(b.configFile.Configs) > 0 {
85
+				// The request came with a full auth config file, we prefer to use that
86
+				endpoint, _, err := registry.ResolveRepositoryName(remote)
87
+				if err != nil {
88
+					return err
89
+				}
90
+				resolvedAuth := b.configFile.ResolveAuthConfig(endpoint)
91
+				pullRegistryAuth = &resolvedAuth
92
+			}
83 93
 			job := b.srv.Eng.Job("pull", remote, tag)
84 94
 			job.SetenvBool("json", b.sf.Json())
85 95
 			job.SetenvBool("parallel", true)
86
-			job.SetenvJson("configFile", b.configFile)
96
+			job.SetenvJson("authConfig", pullRegistryAuth)
87 97
 			job.Stdout.Add(b.outOld)
88 98
 			if err := job.Run(); err != nil {
89 99
 				return err
... ...
@@ -821,7 +832,7 @@ func stripComments(raw []byte) string {
821 821
 	return strings.Join(out, "\n")
822 822
 }
823 823
 
824
-func NewBuildFile(srv *Server, outStream, errStream io.Writer, verbose, utilizeCache, rm bool, outOld io.Writer, sf *utils.StreamFormatter, configFile *registry.ConfigFile) BuildFile {
824
+func NewBuildFile(srv *Server, outStream, errStream io.Writer, verbose, utilizeCache, rm bool, outOld io.Writer, sf *utils.StreamFormatter, auth *registry.AuthConfig, authConfigFile *registry.ConfigFile) BuildFile {
825 825
 	return &buildFile{
826 826
 		daemon:        srv.daemon,
827 827
 		srv:           srv,
... ...
@@ -834,7 +845,8 @@ func NewBuildFile(srv *Server, outStream, errStream io.Writer, verbose, utilizeC
834 834
 		utilizeCache:  utilizeCache,
835 835
 		rm:            rm,
836 836
 		sf:            sf,
837
-		configFile:    configFile,
837
+		authConfig:    auth,
838
+		configFile:    authConfigFile,
838 839
 		outOld:        outOld,
839 840
 	}
840 841
 }
... ...
@@ -428,10 +428,12 @@ func (srv *Server) Build(job *engine.Job) engine.Status {
428 428
 		suppressOutput = job.GetenvBool("q")
429 429
 		noCache        = job.GetenvBool("nocache")
430 430
 		rm             = job.GetenvBool("rm")
431
+		authConfig     = &registry.AuthConfig{}
431 432
 		configFile     = &registry.ConfigFile{}
432 433
 		tag            string
433 434
 		context        io.ReadCloser
434 435
 	)
436
+	job.GetenvJson("authConfig", authConfig)
435 437
 	job.GetenvJson("configFile", configFile)
436 438
 	repoName, tag = utils.ParseRepositoryTag(repoName)
437 439
 
... ...
@@ -484,7 +486,7 @@ func (srv *Server) Build(job *engine.Job) engine.Status {
484 484
 			Writer:          job.Stdout,
485 485
 			StreamFormatter: sf,
486 486
 		},
487
-		!suppressOutput, !noCache, rm, job.Stdout, sf, configFile)
487
+		!suppressOutput, !noCache, rm, job.Stdout, sf, authConfig, configFile)
488 488
 	id, err := b.Build(context)
489 489
 	if err != nil {
490 490
 		return job.Error(err)
... ...
@@ -1341,23 +1343,16 @@ func (srv *Server) ImagePull(job *engine.Job) engine.Status {
1341 1341
 		localName   = job.Args[0]
1342 1342
 		tag         string
1343 1343
 		sf          = utils.NewStreamFormatter(job.GetenvBool("json"))
1344
-		authConfig  registry.AuthConfig
1345
-		configFile  = &registry.ConfigFile{}
1344
+		authConfig  = &registry.AuthConfig{}
1346 1345
 		metaHeaders map[string][]string
1347 1346
 	)
1348 1347
 	if len(job.Args) > 1 {
1349 1348
 		tag = job.Args[1]
1350 1349
 	}
1351 1350
 
1352
-	job.GetenvJson("configFile", configFile)
1351
+	job.GetenvJson("authConfig", authConfig)
1353 1352
 	job.GetenvJson("metaHeaders", metaHeaders)
1354 1353
 
1355
-	endpoint, _, err := registry.ResolveRepositoryName(localName)
1356
-	if err != nil {
1357
-		return job.Error(err)
1358
-	}
1359
-	authConfig = configFile.ResolveAuthConfig(endpoint)
1360
-
1361 1354
 	c, err := srv.poolAdd("pull", localName+":"+tag)
1362 1355
 	if err != nil {
1363 1356
 		if c != nil {
... ...
@@ -1376,12 +1371,12 @@ func (srv *Server) ImagePull(job *engine.Job) engine.Status {
1376 1376
 		return job.Error(err)
1377 1377
 	}
1378 1378
 
1379
-	endpoint, err = registry.ExpandAndVerifyRegistryUrl(hostname)
1379
+	endpoint, err := registry.ExpandAndVerifyRegistryUrl(hostname)
1380 1380
 	if err != nil {
1381 1381
 		return job.Error(err)
1382 1382
 	}
1383 1383
 
1384
-	r, err := registry.NewRegistry(&authConfig, registry.HTTPRequestFactory(metaHeaders), endpoint)
1384
+	r, err := registry.NewRegistry(authConfig, registry.HTTPRequestFactory(metaHeaders), endpoint)
1385 1385
 	if err != nil {
1386 1386
 		return job.Error(err)
1387 1387
 	}