public void prepare(ApplicationId application, ClusterSpec cluster, NodeSpec requested) {
        if (!shouldProvision(application, requested.type(), cluster.type())) return;
        try (var lock = db.lock(application)) {
            ClusterSpec.Id clusterId = LoadBalancer.containerId(cluster);
            LoadBalancerId loadBalancerId = requireNonClashing(new LoadBalancerId(application, clusterId));
            prepare(loadBalancerId, cluster.zoneEndpoint(), requested);
        }
    }
Prepare a load balancer for given application and cluster.
<p>
If a load balancer for the cluster already exists, it will be reconfigured based on the currently allocated
nodes. Its state will remain unchanged.
<p>
If no load balancer exists, a new one will be provisioned in {@link LoadBalancer.State#reserved}.
<p>
Calling this for irrelevant node or cluster types is a no-op.
node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java