thinking more, i'd also add a parameter `boolean fallbackToDefault` to the function and wrap it in a

    try {
        ...
    }
    catch (Exception e) { 
        if (!fallbackToDefault)
            throw new IllegalStateException("Error getting machine details for "+location+": "+e, e);
        Exceptions.propagateIfFatal(e);
        log.warn("Error getting machine details for "+location+" (returning vanilla): "+e, e);
        return someVanillaDetails;
    }

so weird errors don't end up being fatal

(NB we should also add `DynamicTasks.markInessential(!fallbackToDefault)` once #1249 is merged)

((and there is probably a better name than `fallbackToDefault`))