public List<ContainerEndpoint> read(ApplicationId applicationId) {
        var optionalData = curator.getData(containerEndpointsPath(applicationId));
        return optionalData.map(SlimeUtils::jsonToSlime)
                           .map(ContainerEndpointSerializer::endpointListFromSlime)
                           .orElseGet(List::of);
    }
Persists assignment of rotations to an application in ZooKeeper.

The entries are {@link ContainerEndpoint} instances, which keep track of the container
cluster that is the target, the endpoint name, and the rotation used to
give availability to that cluster.

@author ogronnesby
configserver/src/main/java/com/yahoo/vespa/config/server/tenant/ContainerEndpointsCache.java