private LoadBalancerInstance provisionInstance(LoadBalancer currentLoadBalancer,
                                                   ZoneEndpoint zoneEndpoint,
                                                   NodeSpec requested) {
        LoadBalancerId id = currentLoadBalancer.id();
        Set<Real> reals = currentLoadBalancer.instance()
                                             .map(LoadBalancerInstance::reals)
                                             .orElse(Set.of()); // Targeted reals are changed on activation.
        ZoneEndpoint settings = new ZoneEndpoint(zoneEndpoint.isPublicEndpoint(),
                                                 zoneEndpoint.isPrivateEndpoint(),
                                                 zoneEndpoint.authMethods(),
                                                 currentLoadBalancer.instance()
                                                                    .map(LoadBalancerInstance::settings)
                                                                    .map(ZoneEndpoint::allowedUrns)
                                                                    .orElse(List.of())); // Allowed URNs are changed on activation.
        if (currentLoadBalancer.instance().map(instance -> settings.equals(instance.settings())).orElse(false))
            return currentLoadBalancer.instance().get();

        log.log(Level.INFO, () -> "Provisioning instance for " + id);
        try {
            return service.provision(new LoadBalancerSpec(id.application(), id.cluster(), reals, settings, requested.cloudAccount(), currentLoadBalancer.idSeed()))
                    // Provisioning a private endpoint service requires hard resources to be ready, so we delay it until activation.
                    .withServiceIds(currentLoadBalancer.instance().map(LoadBalancerInstance::serviceIds).orElse(List.of()));
        } catch (IllegalArgumentException | IllegalStateException e) {
            throw new IllegalArgumentException("Could not provision " + id, e);
        } catch (RuntimeException e) {
            throw new LoadBalancerServiceException("Could not provision " + id + ". The operation will be retried on next deployment.", e);
        }
    }
Provision a load balancer instance, if necessary
node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java