Skip to content

Commit e5ad715

Browse files
committed
Merge pull request moby#5158 from vieux/refactor_build_only_configFile
refactor build job to know only configFile
2 parents 19ffc5e + e9c3e39 commit e5ad715

4 files changed

Lines changed: 26 additions & 30 deletions

File tree

api/server/server.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -829,8 +829,6 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
829829
return fmt.Errorf("Multipart upload for build is no longer supported. Please upgrade your docker client.")
830830
}
831831
var (
832-
authEncoded = r.Header.Get("X-Registry-Auth")
833-
authConfig = &registry.AuthConfig{}
834832
configFileEncoded = r.Header.Get("X-Registry-Config")
835833
configFile = &registry.ConfigFile{}
836834
job = eng.Job("build")
@@ -840,12 +838,18 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
840838
// Both headers will be parsed and sent along to the daemon, but if a non-empty
841839
// ConfigFile is present, any value provided as an AuthConfig directly will
842840
// be overridden. See BuildFile::CmdFrom for details.
841+
var (
842+
authEncoded = r.Header.Get("X-Registry-Auth")
843+
authConfig = &registry.AuthConfig{}
844+
)
843845
if version.LessThan("1.9") && authEncoded != "" {
844846
authJson := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded))
845847
if err := json.NewDecoder(authJson).Decode(authConfig); err != nil {
846848
// for a pull it is not an error if no auth was given
847849
// to increase compatibility with the existing api it is defaulting to be empty
848850
authConfig = &registry.AuthConfig{}
851+
} else {
852+
configFile.Configs[authConfig.ServerAddress] = *authConfig
849853
}
850854
}
851855

@@ -870,8 +874,7 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
870874
job.Setenv("q", r.FormValue("q"))
871875
job.Setenv("nocache", r.FormValue("nocache"))
872876
job.Setenv("rm", r.FormValue("rm"))
873-
job.SetenvJson("authConfig", authConfig)
874-
job.SetenvJson("configFile", configFile)
877+
job.SetenvJson("auth", configFile)
875878

876879
if err := job.Run(); err != nil {
877880
if !job.Stdout.Used() {

integration/buildfile_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ func buildImage(context testContextTemplate, t *testing.T, eng *engine.Engine, u
394394
}
395395
dockerfile := constructDockerfile(context.dockerfile, ip, port)
396396

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)
398398
id, err := buildfile.Build(context.Archive(dockerfile, t))
399399
if err != nil {
400400
return nil, err
@@ -828,7 +828,7 @@ func TestForbiddenContextPath(t *testing.T) {
828828
}
829829
dockerfile := constructDockerfile(context.dockerfile, ip, port)
830830

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)
832832
_, err = buildfile.Build(context.Archive(dockerfile, t))
833833

834834
if err == nil {
@@ -874,7 +874,7 @@ func TestBuildADDFileNotFound(t *testing.T) {
874874
}
875875
dockerfile := constructDockerfile(context.dockerfile, ip, port)
876876

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)
878878
_, err = buildfile.Build(context.Archive(dockerfile, t))
879879

880880
if err == nil {

server/buildfile.go

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ type buildFile struct {
4949
utilizeCache bool
5050
rm bool
5151

52-
authConfig *registry.AuthConfig
5352
configFile *registry.ConfigFile
5453

5554
tmpContainers map[string]struct{}
@@ -80,20 +79,10 @@ func (b *buildFile) CmdFrom(name string) error {
8079
if err != nil {
8180
if b.runtime.Graph().IsNotExist(err) {
8281
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-
}
9382
job := b.srv.Eng.Job("pull", remote, tag)
9483
job.SetenvBool("json", b.sf.Json())
9584
job.SetenvBool("parallel", true)
96-
job.SetenvJson("authConfig", pullRegistryAuth)
85+
job.SetenvJson("auth", b.configFile)
9786
job.Stdout.Add(b.outOld)
9887
if err := job.Run(); err != nil {
9988
return err
@@ -832,7 +821,7 @@ func stripComments(raw []byte) string {
832821
return strings.Join(out, "\n")
833822
}
834823

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 {
824+
func NewBuildFile(srv *Server, outStream, errStream io.Writer, verbose, utilizeCache, rm bool, outOld io.Writer, sf *utils.StreamFormatter, configFile *registry.ConfigFile) BuildFile {
836825
return &buildFile{
837826
runtime: srv.runtime,
838827
srv: srv,
@@ -845,8 +834,7 @@ func NewBuildFile(srv *Server, outStream, errStream io.Writer, verbose, utilizeC
845834
utilizeCache: utilizeCache,
846835
rm: rm,
847836
sf: sf,
848-
authConfig: auth,
849-
configFile: authConfigFile,
837+
configFile: configFile,
850838
outOld: outOld,
851839
}
852840
}

server/server.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -448,13 +448,11 @@ func (srv *Server) Build(job *engine.Job) engine.Status {
448448
suppressOutput = job.GetenvBool("q")
449449
noCache = job.GetenvBool("nocache")
450450
rm = job.GetenvBool("rm")
451-
authConfig = &registry.AuthConfig{}
452451
configFile = &registry.ConfigFile{}
453452
tag string
454453
context io.ReadCloser
455454
)
456-
job.GetenvJson("authConfig", authConfig)
457-
job.GetenvJson("configFile", configFile)
455+
job.GetenvJson("auth", configFile)
458456
repoName, tag = utils.ParseRepositoryTag(repoName)
459457

460458
if remoteURL == "" {
@@ -506,7 +504,7 @@ func (srv *Server) Build(job *engine.Job) engine.Status {
506504
Writer: job.Stdout,
507505
StreamFormatter: sf,
508506
},
509-
!suppressOutput, !noCache, rm, job.Stdout, sf, authConfig, configFile)
507+
!suppressOutput, !noCache, rm, job.Stdout, sf, configFile)
510508
id, err := b.Build(context)
511509
if err != nil {
512510
return job.Error(err)
@@ -1386,16 +1384,23 @@ func (srv *Server) ImagePull(job *engine.Job) engine.Status {
13861384
localName = job.Args[0]
13871385
tag string
13881386
sf = utils.NewStreamFormatter(job.GetenvBool("json"))
1389-
authConfig = &registry.AuthConfig{}
1387+
authConfig registry.AuthConfig
1388+
configFile = &registry.ConfigFile{}
13901389
metaHeaders map[string][]string
13911390
)
13921391
if len(job.Args) > 1 {
13931392
tag = job.Args[1]
13941393
}
13951394

1396-
job.GetenvJson("authConfig", authConfig)
1395+
job.GetenvJson("auth", configFile)
13971396
job.GetenvJson("metaHeaders", metaHeaders)
13981397

1398+
endpoint, _, err := registry.ResolveRepositoryName(localName)
1399+
if err != nil {
1400+
return job.Error(err)
1401+
}
1402+
authConfig = configFile.ResolveAuthConfig(endpoint)
1403+
13991404
c, err := srv.poolAdd("pull", localName+":"+tag)
14001405
if err != nil {
14011406
if c != nil {
@@ -1414,12 +1419,12 @@ func (srv *Server) ImagePull(job *engine.Job) engine.Status {
14141419
return job.Error(err)
14151420
}
14161421

1417-
endpoint, err := registry.ExpandAndVerifyRegistryUrl(hostname)
1422+
endpoint, err = registry.ExpandAndVerifyRegistryUrl(hostname)
14181423
if err != nil {
14191424
return job.Error(err)
14201425
}
14211426

1422-
r, err := registry.NewRegistry(authConfig, srv.HTTPRequestFactory(metaHeaders), endpoint)
1427+
r, err := registry.NewRegistry(&authConfig, srv.HTTPRequestFactory(metaHeaders), endpoint)
14231428
if err != nil {
14241429
return job.Error(err)
14251430
}

0 commit comments

Comments
 (0)