func (p RootPathParticle) PathFromNewRoot(inventoryPath string, newParticle RootPathParticle, relative string) (string, error) {
	rootPath, err := p.NewRootFromPath(inventoryPath, newParticle)
	if err != nil {
		return inventoryPath, err
	}
	return path.Clean(fmt.Sprintf("%s/%s", rootPath, relative)), nil
}
func (p RootPathParticle) PathFromNewRoot(inventoryPath string, newParticle RootPathParticle, relative string) (string, error) {
	rootPath, err := p.NewRootFromPath(inventoryPath, newParticle)
	if err != nil {
		return inventoryPath, err
	}
	return path.Clean(fmt.Sprintf("%s/%s", rootPath, relative)), nil
}
// PathFromNewRoot takes the datacenter path for a specific entity, and then
// appends the new particle supplied with the new relative path.
//
// As an example, consider a supplied host path "/dc1/host/cluster1/esxi1", and
// a supplied datastore folder relative path of "/foo/bar".  This function will
// split off the datacenter section of the path (/dc1) and combine it with the
// datastore folder with the proper delimiter. The resulting path will be
// "/dc1/datastore/foo/bar".