in step_attach_disks.go [51:91]
func (a *AttachDisks) validate(ctx context.Context, s *Step) (errs DError) {
for _, ad := range *a {
if !checkDiskMode(ad.Mode) {
errs = addErrs(errs, Errf("cannot attach disk: bad disk mode: %q", ad.Mode))
}
if ad.Source == "" {
errs = addErrs(errs, Errf("cannot attach disk: AttachedDisk.Source is empty"))
}
ir, err := s.w.instances.regUse(ad.Instance, s)
if ir == nil {
// Return now, the rest of this function can't be run without ir.
return addErrs(errs, Errf("cannot attach disk: %v", err))
}
addErrs(errs, err)
dr, err := s.w.disks.regUse(ad.Source, s)
if dr == nil {
// Return now, the rest of this function can't be run without dr.
return addErrs(errs, Errf("cannot attach disk: %v", err))
}
addErrs(errs, err)
// Ensure disk is in the same project and zone.
disk := NamedSubexp(diskURLRgx, dr.link)
instance := NamedSubexp(instanceURLRgx, ir.link)
if disk["project"] != instance["project"] {
errs = addErrs(errs, Errf("cannot attach disk in project %q to instance in project %q: %q", disk["project"], instance["project"], ad.Source))
}
if disk["zone"] != instance["zone"] {
errs = addErrs(errs, Errf("cannot attach disk in zone %q to instance in zone %q: %q", disk["zone"], instance["zone"], ad.Source))
}
ad.project = disk["project"]
ad.zone = disk["zone"]
// Register disk attachments.
errs = addErrs(errs, s.w.instances.w.disks.regAttach(ad.DeviceName, ad.Source, ad.Instance, ad.Mode, s))
}
return errs
}