Browse code

refactor build job to know only configFile

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

Victor Vieux authored on 2014/04/11 07:29:03
Showing 4 changed files
... ...
@@ -829,8 +829,6 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
829 829
 		return fmt.Errorf("Multipart upload for build is no longer supported. Please upgrade your docker client.")
830 830
 	}
831 831
 	var (
832
-		authEncoded       = r.Header.Get("X-Registry-Auth")
833
-		authConfig        = &registry.AuthConfig{}
834 832
 		configFileEncoded = r.Header.Get("X-Registry-Config")
835 833
 		configFile        = &registry.ConfigFile{}
836 834
 		job               = eng.Job("build")
... ...
@@ -840,14 +838,22 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
840 840
 	// Both headers will be parsed and sent along to the daemon, but if a non-empty
841 841
 	// ConfigFile is present, any value provided as an AuthConfig directly will
842 842
 	// be overridden. See BuildFile::CmdFrom for details.
843
+	// /*
844
+	var (
845
+		authEncoded = r.Header.Get("X-Registry-Auth")
846
+		authConfig  = &registry.AuthConfig{}
847
+	)
843 848
 	if version.LessThan("1.9") && authEncoded != "" {
844 849
 		authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded))
845 850
 		if err := json.NewDecoder(authJson).Decode(authConfig); err != nil {
846 851
 			// for a pull it is not an error if no auth was given
847 852
 			// to increase compatibility with the existing api it is defaulting to be empty
848 853
 			authConfig = &registry.AuthConfig{}
854
+		} else {
855
+			configFile.Configs[authConfig.ServerAddress] = *authConfig
849 856
 		}
850 857
 	}
858
+	// */
851 859
 
852 860
 	if configFileEncoded != "" {
853 861
 		configFileJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(configFileEncoded))
... ...
@@ -870,7 +876,6 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
870 870
 	job.Setenv("q", r.FormValue("q"))
871 871
 	job.Setenv("nocache", r.FormValue("nocache"))
872 872
 	job.Setenv("rm", r.FormValue("rm"))
873
-	job.SetenvJson("authConfig", authConfig)
874 873
 	job.SetenvJson("configFile", configFile)
875 874
 
876 875
 	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, nil)
397
+	buildfile := server.NewBuildFile(srv, ioutil.Discard, ioutil.Discard, false, useCache, false, ioutil.Discard, utils.NewStreamFormatter(false), 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, nil)
831
+	buildfile := server.NewBuildFile(srv, ioutil.Discard, ioutil.Discard, false, true, false, ioutil.Discard, utils.NewStreamFormatter(false), 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, nil)
877
+	buildfile := server.NewBuildFile(mkServerFromEngine(eng, t), ioutil.Discard, ioutil.Discard, false, true, false, ioutil.Discard, utils.NewStreamFormatter(false), nil)
878 878
 	_, err = buildfile.Build(context.Archive(dockerfile, t))
879 879
 
880 880
 	if err == nil {
... ...
@@ -49,7 +49,6 @@ type buildFile struct {
49 49
 	utilizeCache bool
50 50
 	rm           bool
51 51
 
52
-	authConfig *registry.AuthConfig
53 52
 	configFile *registry.ConfigFile
54 53
 
55 54
 	tmpContainers map[string]struct{}
... ...
@@ -80,20 +79,10 @@ func (b *buildFile) CmdFrom(name string) error {
80 80
 	if err != nil {
81 81
 		if b.runtime.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
-			}
93 83
 			job := b.srv.Eng.Job("pull", remote, tag)
94 84
 			job.SetenvBool("json", b.sf.Json())
95 85
 			job.SetenvBool("parallel", true)
96
-			job.SetenvJson("authConfig", pullRegistryAuth)
86
+			job.SetenvJson("configFile", b.configFile)
97 87
 			job.Stdout.Add(b.outOld)
98 88
 			if err := job.Run(); err != nil {
99 89
 				return err
... ...
@@ -832,7 +821,7 @@ func stripComments(raw []byte) string {
832 832
 	return strings.Join(out, "\n")
833 833
 }
834 834
 
835
-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 {
835
+func NewBuildFile(srv *Server, outStream, errStream io.Writer, verbose, utilizeCache, rm bool, outOld io.Writer, sf *utils.StreamFormatter, configFile *registry.ConfigFile) BuildFile {
836 836
 	return &buildFile{
837 837
 		runtime:       srv.runtime,
838 838
 		srv:           srv,
... ...
@@ -845,8 +834,7 @@ func NewBuildFile(srv *Server, outStream, errStream io.Writer, verbose, utilizeC
845 845
 		utilizeCache:  utilizeCache,
846 846
 		rm:            rm,
847 847
 		sf:            sf,
848
-		authConfig:    auth,
849
-		configFile:    authConfigFile,
848
+		configFile:    configFile,
850 849
 		outOld:        outOld,
851 850
 	}
852 851
 }
... ...
@@ -448,12 +448,10 @@ func (srv *Server) Build(job *engine.Job) engine.Status {
448 448
 		suppressOutput = job.GetenvBool("q")
449 449
 		noCache        = job.GetenvBool("nocache")
450 450
 		rm             = job.GetenvBool("rm")
451
-		authConfig     = &registry.AuthConfig{}
452 451
 		configFile     = &registry.ConfigFile{}
453 452
 		tag            string
454 453
 		context        io.ReadCloser
455 454
 	)
456
-	job.GetenvJson("authConfig", authConfig)
457 455
 	job.GetenvJson("configFile", configFile)
458 456
 	repoName, tag = utils.ParseRepositoryTag(repoName)
459 457
 
... ...
@@ -506,7 +504,7 @@ func (srv *Server) Build(job *engine.Job) engine.Status {
506 506
 			Writer:          job.Stdout,
507 507
 			StreamFormatter: sf,
508 508
 		},
509
-		!suppressOutput, !noCache, rm, job.Stdout, sf, authConfig, configFile)
509
+		!suppressOutput, !noCache, rm, job.Stdout, sf, configFile)
510 510
 	id, err := b.Build(context)
511 511
 	if err != nil {
512 512
 		return job.Error(err)
... ...
@@ -1386,16 +1384,23 @@ func (srv *Server) ImagePull(job *engine.Job) engine.Status {
1386 1386
 		localName   = job.Args[0]
1387 1387
 		tag         string
1388 1388
 		sf          = utils.NewStreamFormatter(job.GetenvBool("json"))
1389
-		authConfig  = &registry.AuthConfig{}
1389
+		authConfig  registry.AuthConfig
1390
+		configFile  = &registry.ConfigFile{}
1390 1391
 		metaHeaders map[string][]string
1391 1392
 	)
1392 1393
 	if len(job.Args) > 1 {
1393 1394
 		tag = job.Args[1]
1394 1395
 	}
1395 1396
 
1396
-	job.GetenvJson("authConfig", authConfig)
1397
+	job.GetenvJson("configFile", configFile)
1397 1398
 	job.GetenvJson("metaHeaders", metaHeaders)
1398 1399
 
1400
+	endpoint, _, err := registry.ResolveRepositoryName(localName)
1401
+	if err != nil {
1402
+		return job.Error(err)
1403
+	}
1404
+	authConfig = configFile.ResolveAuthConfig(endpoint)
1405
+
1399 1406
 	c, err := srv.poolAdd("pull", localName+":"+tag)
1400 1407
 	if err != nil {
1401 1408
 		if c != nil {
... ...
@@ -1414,12 +1419,12 @@ func (srv *Server) ImagePull(job *engine.Job) engine.Status {
1414 1414
 		return job.Error(err)
1415 1415
 	}
1416 1416
 
1417
-	endpoint, err := registry.ExpandAndVerifyRegistryUrl(hostname)
1417
+	endpoint, err = registry.ExpandAndVerifyRegistryUrl(hostname)
1418 1418
 	if err != nil {
1419 1419
 		return job.Error(err)
1420 1420
 	}
1421 1421
 
1422
-	r, err := registry.NewRegistry(authConfig, srv.HTTPRequestFactory(metaHeaders), endpoint)
1422
+	r, err := registry.NewRegistry(&authConfig, srv.HTTPRequestFactory(metaHeaders), endpoint)
1423 1423
 	if err != nil {
1424 1424
 		return job.Error(err)
1425 1425
 	}