code: func NewPod(dataDir string) (*Pod, error) {
  	if err := initPods(dataDir); err != nil {
  		return nil, err
  	}
  
  	p := &Pod{
  		dataDir:     dataDir,
  		createdByMe: true,
  		isEmbryo:    true, // starts as an embryo, then ToPreparing locks, renames, and sets isPreparing
  		// rest start false.
  	}
  
  	var err error
  	p.UUID, err = types.NewUUID(uuid.New())
  	if err != nil {
  		return nil, errwrap.Wrap(errors.New("error creating UUID"), err)
  	}
  
  	err = os.Mkdir(p.embryoPath(), 0750)
  	if err != nil {
  		return nil, err
  	}
  
  	p.FileLock, err = lock.NewLock(p.embryoPath(), lock.Dir)
  	if err != nil {
  		os.Remove(p.embryoPath())
  		return nil, err
  	}
  
  	err = p.ToPreparing()
  	if err != nil {
  		return nil, err
  	}
  
  	// At this point we we have:
  	// /var/lib/rkt/pods/prepare/$uuid << exclusively locked to indicate "preparing"
  
  	return p, nil
  }
docs: // NewPod creates a new pod directory in the "preparing" state, allocating a unique uuid for it in the process.
  // The returned pod is always left in an exclusively locked state (preparing is locked in the prepared directory)
  // The pod must be closed using pod.Close()