func()

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
}