code: func (p *defaultProvisioner) ProvisionStatus(paths Paths) (s ProvisionStatus, err error) {
  	// Open the file
  	var f *os.File
  	s.Electron = make(map[string]*ProvisionStatusPackage)
  	if f, err = os.Open(paths.ProvisionStatus()); err != nil {
  		if !os.IsNotExist(err) {
  			err = errors.Wrapf(err, "opening file %s failed", paths.ProvisionStatus())
  		} else {
  			err = nil
  		}
  		return
  	}
  	defer f.Close()
  
  	// Unmarshal
  	if errLocal := json.NewDecoder(f).Decode(&s); errLocal != nil {
  		// For backward compatibility purposes, if there's an unmarshal error we delete the status file and make the
  		// assumption that provisioning has to be done all over again
  		astilog.Error(errors.Wrapf(errLocal, "json decoding from %s failed", paths.ProvisionStatus()))
  		astilog.Debugf("Removing %s", f.Name())
  		if errLocal = os.RemoveAll(f.Name()); errLocal != nil {
  			astilog.Error(errors.Wrapf(errLocal, "removing %s failed", f.Name()))
  		}
  		return
  	}
  	return
  }
docs: // ProvisionStatus returns the provision status