Index: deploytool/cmd/luci_deploy/layout.go |
diff --git a/deploytool/cmd/luci_deploy/layout.go b/deploytool/cmd/luci_deploy/layout.go |
index 5b8bcf47ee5a453d040af716262c51cccf5224eb..20d673a78ec1bd3dec967db23548a273e05c24c0 100644 |
--- a/deploytool/cmd/luci_deploy/layout.go |
+++ b/deploytool/cmd/luci_deploy/layout.go |
@@ -42,7 +42,7 @@ func (s *layoutSource) checkoutPath() string { |
// within the source root (e.g., "relpath" is prepended to it). |
func (s *layoutSource) pathTo(p, relpath string) string { |
if s.Relpath == "" { |
- panic(errors.Reason("source %(source)q is not checked out").D("source", s).Err()) |
+ panic(errors.Reason("source %q is not checked out", s).Err()) |
} |
// If this is absolute, take it relative to source root. |
@@ -127,7 +127,7 @@ func (d *layoutDeployment) String() string { return string(d.title) } |
// left-to-right manner. |
func (d *layoutDeployment) substituteParams(vp *string) error { |
if err := substitute(vp, d.Parameter); err != nil { |
- return errors.Annotate(err).Err() |
+ return errors.Annotate(err, "").Err() |
} |
return nil |
} |
@@ -179,20 +179,19 @@ func (comp *layoutDeploymentComponent) buildPath(bp *deploy.BuildPath) (string, |
if path, ok := comp.buildPathMap[bp]; ok { |
return path, nil |
} |
- return "", errors.Reason("no build path resolved for: %(bp)+v").D("bp", bp, "%+v").Err() |
+ return "", errors.Reason("no build path resolved for: %+v", bp).Err() |
} |
func (comp *layoutDeploymentComponent) loadSourceComponent(reg componentRegistrar) error { |
if err := unmarshalTextProtobuf(comp.source().pathTo(comp.comp.Path, ""), &comp.Component); err != nil { |
- return errors.Annotate(err).Reason("failed to load source component %(component)q").D("component", comp).Err() |
+ return errors.Annotate(err, "failed to load source component %q", comp).Err() |
} |
// Referenced build paths. |
for i, p := range comp.BuildPath { |
var msg deploy.Component_Build |
if err := unmarshalTextProtobuf(comp.pathTo(p), &msg); err != nil { |
- return errors.Annotate(err).Reason("failed to load component Build #%(index)d from [%(path)s]"). |
- D("index", i).D("path", p).Err() |
+ return errors.Annotate(err, "failed to load component Build #%d from [%s]", i, p).Err() |
} |
comp.Build = append(comp.Build, &msg) |
} |
@@ -207,8 +206,7 @@ func (comp *layoutDeploymentComponent) loadSourceComponent(reg componentRegistra |
// - All referenced path parameters will be loaded and appended onto their |
// non-path members. |
if dep.cloudProject == nil { |
- return errors.Reason("AppEngine module %(comp)q requires a cloud project"). |
- D("comp", comp).Err() |
+ return errors.Reason("AppEngine module %q requires a cloud project", comp).Err() |
} |
aem := t.AppengineModule |
@@ -225,8 +223,7 @@ func (comp *layoutDeploymentComponent) loadSourceComponent(reg componentRegistra |
for i, p := range aem.HandlerPath { |
var msg deploy.AppEngineModule_HandlerSet |
if err := unmarshalTextProtobuf(comp.pathTo(p), &msg); err != nil { |
- return errors.Annotate(err).Reason("failed to load HandlerSet #%(index)d for %(component)q"). |
- D("index", i).D("component", comp).Err() |
+ return errors.Annotate(err, "failed to load HandlerSet #%d for %q", i, comp).Err() |
} |
module.Handlers.Handler = append(module.Handlers.Handler, msg.Handler...) |
} |
@@ -237,8 +234,7 @@ func (comp *layoutDeploymentComponent) loadSourceComponent(reg componentRegistra |
path := module.comp.pathTo(p) |
res, err := loadIndexYAMLResource(path) |
if err != nil { |
- return errors.Annotate(err).Reason("failed to load 'index.yaml' from [%(path)s]"). |
- D("path", path).Err() |
+ return errors.Annotate(err, "failed to load 'index.yaml' from [%s]", path).Err() |
} |
dep.cloudProject.appendResources(res, &module) |
} |
@@ -250,14 +246,14 @@ func (comp *layoutDeploymentComponent) loadSourceComponent(reg componentRegistra |
for i, p := range module.ResourcePath { |
if err := comp.dep.substituteParams(&p); err != nil { |
- return errors.Annotate(err).Reason("failed to substitute parameters for resource path"). |
- D("path", p).Err() |
+ return errors.Annotate(err, "failed to substitute parameters for resource path"). |
+ InternalReason("path(%s)", p).Err() |
} |
var res deploy.AppEngineResources |
if err := unmarshalTextProtobuf(comp.pathTo(p), &res); err != nil { |
- return errors.Annotate(err).Reason("failed to load Resources #%(index)d for %(component)"). |
- D("index", i).D("path", p).D("component", comp).Err() |
+ return errors.Annotate(err, "failed to load Resources #%d for %q", i, comp). |
+ InternalReason("path(%s)", p).Err() |
} |
dep.cloudProject.appendResources(&res, &module) |
} |
@@ -270,8 +266,7 @@ func (comp *layoutDeploymentComponent) loadSourceComponent(reg componentRegistra |
case *deploy.Component_GkePod: |
if len(comp.gkePods) == 0 { |
- return errors.Reason("GKE Container %(comp)q is not bound to a GKE cluster"). |
- D("comp", comp.String()).Err() |
+ return errors.Reason("GKE Container %q is not bound to a GKE cluster", comp).Err() |
} |
comp.gkePod = &layoutDeploymentGKEPod{ |
@@ -289,7 +284,7 @@ func (comp *layoutDeploymentComponent) loadSourceComponent(reg componentRegistra |
if len(invalidLabels) > 0 { |
sort.Strings(invalidLabels) |
return errors.Reason("user-supplied labels may not use deploytool prefix"). |
- D("labels", invalidLabels).Err() |
+ InternalReason("labels(%v)", invalidLabels).Err() |
} |
for _, bp := range comp.gkePods { |
@@ -319,7 +314,7 @@ func (comp *layoutDeploymentComponent) expandPaths() error { |
if bp.DirKey != "" { |
dir, ok := comp.buildDirs[bp.DirKey] |
if !ok { |
- return errors.Reason("Invalid `dir_key` value: %(dirKey)q").D("dirKey", bp.DirKey).Err() |
+ return errors.Reason("Invalid `dir_key` value: %q", bp.DirKey).Err() |
} |
resolved = deployToNative(dir, bp.Path) |
} else { |
@@ -349,16 +344,16 @@ func (comp *layoutDeploymentComponent) expandPaths() error { |
Build: &deploy.BuildPath{Path: bd.Path}, |
} |
if err := resolveBuildPath(sf.GetBuild()); err != nil { |
- return errors.Annotate(err).Err() |
+ return errors.Annotate(err, "").Err() |
} |
case *deploy.AppEngineModule_Handler_StaticFiles_Build: |
if err := resolveBuildPath(bd.Build); err != nil { |
- return errors.Annotate(err).Err() |
+ return errors.Annotate(err, "").Err() |
} |
default: |
- return errors.Reason("unknown `base_dir` type %(type)T").D("type", bd).Err() |
+ return errors.Reason("unknown `base_dir` type %T", bd).Err() |
} |
case *deploy.AppEngineModule_Handler_StaticDir: |
@@ -368,12 +363,12 @@ func (comp *layoutDeploymentComponent) expandPaths() error { |
StaticBuildDir: &deploy.BuildPath{Path: c.StaticDir}, |
} |
if err := resolveBuildPath(handler.GetStaticBuildDir()); err != nil { |
- return errors.Annotate(err).Err() |
+ return errors.Annotate(err, "").Err() |
} |
case *deploy.AppEngineModule_Handler_StaticBuildDir: |
if err := resolveBuildPath(c.StaticBuildDir); err != nil { |
- return errors.Annotate(err).Err() |
+ return errors.Annotate(err, "").Err() |
} |
} |
} |
@@ -388,16 +383,16 @@ func (comp *layoutDeploymentComponent) expandPaths() error { |
Build: &deploy.BuildPath{Path: df.Path}, |
} |
if err := resolveBuildPath(container.GetBuild()); err != nil { |
- return errors.Annotate(err).Err() |
+ return errors.Annotate(err, "").Err() |
} |
case *deploy.KubernetesPod_Container_Build: |
if err := resolveBuildPath(df.Build); err != nil { |
- return errors.Annotate(err).Err() |
+ return errors.Annotate(err, "").Err() |
} |
default: |
- return errors.Reason("unknown `dockerfile` type %(type)T").D("type", df).Err() |
+ return errors.Reason("unknown `dockerfile` type %T", df).Err() |
} |
} |
} |
@@ -529,7 +524,7 @@ type deployLayout struct { |
func (l *deployLayout) workingFilesystem() (*managedfs.Filesystem, error) { |
fs, err := managedfs.New(l.WorkingPath) |
if err != nil { |
- return nil, errors.Annotate(err).Err() |
+ return nil, errors.Annotate(err, "").Err() |
} |
return fs, nil |
} |
@@ -543,16 +538,16 @@ func (l *deployLayout) getDeploymentComponent(v string) (*layoutDeployment, *lay |
dep := l.deployments[deployment] |
if dep == nil { |
- return nil, nil, errors.Reason("unknown Deployment %(dep)q"). |
- D("value", v).D("dep", deployment).Err() |
+ return nil, nil, errors.Reason("unknown Deployment %q", deployment). |
+ InternalReason("value(%s)", v).Err() |
} |
// If a component was specified, only add that component. |
if component != "" { |
comp := dep.components[component] |
if comp == nil { |
- return nil, nil, errors.Reason("unknown Deployment Component %(value)q"). |
- D("value", v).D("dep", deployment).D("comp", component).Err() |
+ return nil, nil, errors.Reason("unknown Deployment Component %q", v). |
+ InternalReason("dep(%s)/comp(%s)", deployment, component).Err() |
} |
return dep, comp, nil |
} |
@@ -565,7 +560,7 @@ func (l *deployLayout) matchDeploymentComponent(m string, cb func(*layoutDeploym |
matched, err := filepath.Match(m, dep.String()) |
if err != nil { |
- return errors.Annotate(err).Reason("failed to match %(pattern)q").D("pattern", m).Err() |
+ return errors.Annotate(err, "failed to match %q", m).Err() |
} |
if matched { |
// Matches entire deployment. |
@@ -579,7 +574,7 @@ func (l *deployLayout) matchDeploymentComponent(m string, cb func(*layoutDeploym |
matched, err := filepath.Match(m, comp.String()) |
if err != nil { |
- return errors.Annotate(err).Reason("failed to match %(pattern)q").D("pattern", m).Err() |
+ return errors.Annotate(err, "failed to match %q", m).Err() |
} |
if matched { |
cb(dep, comp) |
@@ -608,7 +603,7 @@ func (l *deployLayout) load(c context.Context, path string) error { |
// Load the user config, if available. |
if err := loadUserConfig(c, &l.user); err != nil { |
- return errors.Annotate(err).Reason("failed to load user config").Err() |
+ return errors.Annotate(err, "failed to load user config").Err() |
} |
if len(l.user.SourceOverride) > 0 { |
l.userSourceOverrides = make(map[string]*deploy.Source, len(l.user.SourceOverride)) |
@@ -639,8 +634,7 @@ func (l *deployLayout) load(c context.Context, path string) error { |
absWorkingPath, err := filepath.Abs(l.WorkingPath) |
if err != nil { |
- return errors.Annotate(err).Reason("failed to resolve absolute path for %(path)q"). |
- D("path", l.WorkingPath).Err() |
+ return errors.Annotate(err, "failed to resolve absolute path for %q", l.WorkingPath).Err() |
} |
l.WorkingPath = absWorkingPath |
return nil |
@@ -649,7 +643,7 @@ func (l *deployLayout) load(c context.Context, path string) error { |
func (l *deployLayout) initFrozenCheckout(c context.Context) (*deploy.FrozenLayout, error) { |
fis, err := ioutil.ReadDir(l.SourcesPath) |
if err != nil { |
- return nil, errors.Annotate(err).Reason("failed to read directory").Err() |
+ return nil, errors.Annotate(err, "failed to read directory").Err() |
} |
// Build internal and frozen layout in parallel. |
@@ -697,7 +691,7 @@ func (l *deployLayout) initFrozenCheckout(c context.Context) (*deploy.FrozenLayo |
t, err := titleFromConfigPath(name) |
if err != nil { |
- return errors.Annotate(err).Reason("invalid source title").Err() |
+ return errors.Annotate(err, "invalid source title").Err() |
} |
src := deploy.FrozenLayout_Source{ |
@@ -707,8 +701,7 @@ func (l *deployLayout) initFrozenCheckout(c context.Context) (*deploy.FrozenLayo |
return nil |
}) |
if err != nil { |
- return nil, errors.Annotate(err).Reason("failed to load source group %(name)q from [%(path)s]"). |
- D("name", name).D("path", path).Err() |
+ return nil, errors.Annotate(err, "failed to load source group %q from [%s]", name, path).Err() |
} |
frozen.SourceGroup[string(name)] = &sg |
@@ -721,7 +714,7 @@ func (l *deployLayout) loadFrozenLayout(c context.Context) error { |
// Load the frozen configuration file from disk. |
frozen, err := checkoutFrozen(l) |
if err != nil { |
- return errors.Annotate(err).Reason("failed to load frozen checkout").Err() |
+ return errors.Annotate(err, "failed to load frozen checkout").Err() |
} |
// Load our source groups and sources. |
@@ -748,12 +741,10 @@ func (l *deployLayout) loadFrozenLayout(c context.Context) error { |
// Build our internally-connected structures from the frozen layout. |
if err := l.loadApps(c); err != nil { |
- return errors.Annotate(err).Reason("failed to load applications from [%(path)s]"). |
- D("path", l.ApplicationsPath).Err() |
+ return errors.Annotate(err, "failed to load applications from [%s]", l.ApplicationsPath).Err() |
} |
if err := l.loadDeployments(c); err != nil { |
- return errors.Annotate(err).Reason("failed to load deployments from [%(path)s]"). |
- D("path", l.DeploymentsPath).Err() |
+ return errors.Annotate(err, "failed to load deployments from [%s]", l.DeploymentsPath).Err() |
} |
return nil |
} |
@@ -761,7 +752,7 @@ func (l *deployLayout) loadFrozenLayout(c context.Context) error { |
func (l *deployLayout) loadApps(c context.Context) error { |
fis, err := ioutil.ReadDir(l.ApplicationsPath) |
if err != nil { |
- return errors.Annotate(err).Reason("failed to read directory").Err() |
+ return errors.Annotate(err, "failed to read directory").Err() |
} |
apps := make(map[title]*deploy.Application, len(fis)) |
var appBase deploy.Application |
@@ -770,7 +761,7 @@ func (l *deployLayout) loadApps(c context.Context) error { |
t, err := titleFromConfigPath(name) |
if err != nil { |
- return errors.Annotate(err).Reason("invalid application title").Err() |
+ return errors.Annotate(err, "invalid application title").Err() |
} |
apps[t] = &cpy |
@@ -793,8 +784,7 @@ func (l *deployLayout) loadApps(c context.Context) error { |
for _, comp := range proj.Component { |
compT := title(comp.Name) |
if err := compT.validate(); err != nil { |
- return errors.Annotate(err).Reason("application %(app)q component %(component)q is not a valid component title"). |
- D("app", t).D("component", comp.Name).Err() |
+ return errors.Annotate(err, "application %q component %q is not a valid component title", t, comp.Name).Err() |
} |
proj.components[compT] = &layoutAppComponent{ |
Application_Component: comp, |
@@ -811,7 +801,7 @@ func (l *deployLayout) loadApps(c context.Context) error { |
func (l *deployLayout) loadDeployments(c context.Context) error { |
fis, err := ioutil.ReadDir(l.DeploymentsPath) |
if err != nil { |
- return errors.Annotate(err).Reason("failed to read directory").Err() |
+ return errors.Annotate(err, "failed to read directory").Err() |
} |
deployments := make(map[title]*deploy.Deployment, len(fis)) |
var deploymentBase deploy.Deployment |
@@ -820,7 +810,7 @@ func (l *deployLayout) loadDeployments(c context.Context) error { |
t, err := titleFromConfigPath(name) |
if err != nil { |
- return errors.Annotate(err).Reason("invalid deployment title").Err() |
+ return errors.Annotate(err, "invalid deployment title").Err() |
} |
deployments[t] = &cpy |
@@ -834,8 +824,7 @@ func (l *deployLayout) loadDeployments(c context.Context) error { |
for t, d := range deployments { |
dep, err := l.loadDeployment(t, d) |
if err != nil { |
- return errors.Annotate(err).Reason("failed to load deployment (%(deployment)q)"). |
- D("deployment", t).Err() |
+ return errors.Annotate(err, "failed to load deployment (%q)", t).Err() |
} |
l.deployments[t] = dep |
l.deploymentNames = append(l.deploymentNames, dep.title) |
@@ -852,14 +841,13 @@ func (l *deployLayout) loadDeployment(t title, d *deploy.Deployment) (*layoutDep |
sg: l.sourceGroups[title(d.SourceGroup)], |
} |
if dep.sg == nil { |
- return nil, errors.Reason("unknown source group %(sourceGroup)q"). |
- D("sourceGroup", d.SourceGroup).Err() |
+ return nil, errors.Reason("unknown source group %q", d.SourceGroup).Err() |
} |
// Resolve our application. |
dep.app = l.apps[title(dep.Application)] |
if dep.app == nil { |
- return nil, errors.Reason("unknown application %(app)q").D("app", dep.Application).Err() |
+ return nil, errors.Reason("unknown application %q", dep.Application).Err() |
} |
// Initialize our Components. Their protobufs cannot not be loaded until |
@@ -873,14 +861,12 @@ func (l *deployLayout) loadDeployment(t title, d *deploy.Deployment) (*layoutDep |
sources: []*layoutSource{dep.sg.sources[title(projComp.Source)]}, |
} |
if comp.sources[0] == nil { |
- return nil, errors.Reason("application references non-existent source %(source)q"). |
- D("source", projComp.Source).Err() |
+ return nil, errors.Reason("application references non-existent source %q", projComp.Source).Err() |
} |
for _, os := range projComp.OtherSource { |
src := dep.sg.sources[title(os)] |
if src == nil { |
- return nil, errors.Reason("application references non-existent other source %(source)q"). |
- D("source", os).Err() |
+ return nil, errors.Reason("application references non-existent other source %q", os).Err() |
} |
comp.sources = append(comp.sources, src) |
} |
@@ -899,8 +885,7 @@ func (l *deployLayout) loadDeployment(t title, d *deploy.Deployment) (*layoutDep |
l.cloudProjects = make(map[string]*layoutDeploymentCloudProject) |
} |
if cur, ok := l.cloudProjects[cp.Name]; ok { |
- return nil, errors.Reason("cloud project %(name)q defined by both %(curDep)q and %(thisDep)q"). |
- D("name", cp.Name).D("curDep", cur.dep.title).D("thisDep", dep.title).Err() |
+ return nil, errors.Reason("cloud project %q defined by both %q and %q", cp.Name, cur.dep.title, dep.title).Err() |
} |
l.cloudProjects[cp.Name] = &cp |
@@ -917,12 +902,10 @@ func (l *deployLayout) loadDeployment(t title, d *deploy.Deployment) (*layoutDep |
comp := dep.components[title(b.Name)] |
switch { |
case comp == nil: |
- return nil, errors.Reason("unknown component %(comp)q for cluster %(name)q"). |
- D("comp", b.Name).D("name", gke.Name).Err() |
+ return nil, errors.Reason("unknown component %q for cluster %q", b.Name, gke.Name).Err() |
case b.Replicas <= 0: |
- return nil, errors.Reason("GKE component %(comp)q must have at least 1 replica"). |
- D("comp", b.Name).Err() |
+ return nil, errors.Reason("GKE component %q must have at least 1 replica", b.Name).Err() |
} |
bp := &layoutDeploymentGKEPodBinding{ |
@@ -975,16 +958,14 @@ func findLayout(filename, dir string) (string, error) { |
break |
default: |
- return "", errors.Annotate(err).Reason("failed to state %(path)q"). |
- D("path", path).Err() |
+ return "", errors.Annotate(err, "failed to state %q", path).Err() |
} |
// Walk up one directory. |
oldDir := dir |
dir, _ = filepath.Split(dir) |
if oldDir == dir { |
- return "", errors.Reason("could not find %(filename)q starting from %(dir)q"). |
- D("filename", filename).D("dir", dir).Err() |
+ return "", errors.Reason("could not find %q starting from %q", filename, dir).Err() |
} |
} |
} |