func()

in step_delete_resources.go [145:219]


func (d *DeleteResources) validate(ctx context.Context, s *Step) DError {
	// Instance checking.
	for _, i := range d.Instances {
		if err := d.validateInstance(i, s); d.checkError(err, s) != nil {
			return err
		}
	}

	// Disk checking.
	for _, disk := range d.Disks {
		if err := s.w.disks.regDelete(disk, s); d.checkError(err, s) != nil {
			return err
		}
	}

	// Image checking.
	for _, i := range d.Images {
		if err := s.w.images.regDelete(i, s); d.checkError(err, s) != nil {
			return err
		}
	}

	// Machine image checking.
	for _, i := range d.MachineImages {
		if err := s.w.machineImages.regDelete(i, s); d.checkError(err, s) != nil {
			return err
		}
	}

	// Network checking.
	for _, n := range d.Networks {
		if err := s.w.networks.regDelete(n, s); d.checkError(err, s) != nil {
			return err
		}
	}

	// Subnetwork checking.
	for _, sn := range d.Subnetworks {
		if err := s.w.subnetworks.regDelete(sn, s); d.checkError(err, s) != nil {
			return err
		}
	}

	// GCS path checking
	for _, p := range d.GCSPaths {
		bkt, _, err := splitGCSPath(p)
		if err != nil {
			return err
		}

		// Check if bucket exists and is writeable.
		writableBkts.mx.Lock()
		if !strIn(bkt, writableBkts.bkts) {
			if _, err := s.w.StorageClient.Bucket(bkt).Attrs(ctx); err != nil {
				return Errf("error reading bucket %q: %v", bkt, err)
			}

			tObj := s.w.StorageClient.Bucket(bkt).Object(fmt.Sprintf("daisy-validate-%s-%s", s.name, s.w.id))
			w := tObj.NewWriter(ctx)
			if _, err := w.Write(nil); err != nil {
				return newErr("failed to write to GCS object when deleting resources", err)
			}
			if err := w.Close(); err != nil {
				return Errf("error writing to bucket %q: %v", bkt, err)
			}
			if err := tObj.Delete(ctx); err != nil {
				return Errf("error deleting file %+v after write validation: %v", tObj, err)
			}
			writableBkts.bkts = append(writableBkts.bkts, bkt)
		}
		writableBkts.mx.Unlock()
	}

	return nil
}