in cli_tools/gce_image_publish/publish/publish.go [139:199]
func createPublish(sourceVersion, publishVersion, workProject, publishProject, sourceGCS, sourceProject, ce, template string, varMap map[string]string, imagesCache map[string][]*computeAlpha.Image) (*Publish, error) {
p := Publish{
sourceVersion: sourceVersion,
publishVersion: publishVersion,
}
if p.publishVersion == "" {
p.publishVersion = sourceVersion
}
varMap["source_version"] = p.sourceVersion
varMap["publish_version"] = p.publishVersion
tmpl, err := publishTemplate.Parse(template)
if err != nil {
return nil, fmt.Errorf("%s: %v", template, err)
}
var buf bytes.Buffer
if err := tmpl.Execute(&buf, varMap); err != nil {
return nil, fmt.Errorf("%s: %v", template, err)
}
if err := json.Unmarshal(buf.Bytes(), &p); err != nil {
return nil, daisy.JSONError(template, buf.Bytes(), err)
}
if err := p.SetExpire(); err != nil {
return nil, fmt.Errorf("%s: error SetExpire: %v", template, err)
}
if workProject != "" {
p.WorkProject = workProject
}
if publishProject != "" {
p.PublishProject = publishProject
}
if sourceGCS != "" {
p.SourceGCSPath = sourceGCS
}
if sourceProject != "" {
p.SourceProject = sourceProject
}
if ce != "" {
p.ComputeEndpoint = ce
}
if imagesCache != nil {
p.imagesCache = imagesCache
}
if p.WorkProject == "" {
if metadata.OnGCE() {
p.WorkProject, err = metadata.ProjectID()
if err != nil {
return nil, err
}
} else {
return nil, fmt.Errorf("%s\nWorkProject unspecified", template)
}
}
fmt.Printf("[%q] Created a publish object successfully from %s\n", p.Name, template)
return &p, nil
}