public static ServiceAddress getLBServiceAddress(boolean wait, LoadBalancer loadBalancer, ApiClient apiClient, String lbSelector, String namespace) throws HyscaleException {
		if (!wait) {
			return getLBServiceAddress(loadBalancer, apiClient, lbSelector, namespace, true);
		}
		ServiceAddress serviceAddress = null;
		long startTime = System.currentTimeMillis();
		ActivityContext serviceIPContext = new ActivityContext(DeployerActivity.WAITING_FOR_SERVICE_IP);
		WorkflowLogger.startActivity(serviceIPContext);
		try {
			while (System.currentTimeMillis() - startTime < LB_READY_STATE_TIME) {
				WorkflowLogger.continueActivity(serviceIPContext);
				serviceAddress = getLBServiceAddress(loadBalancer, apiClient, lbSelector, namespace, false);
				if (serviceAddress != null && serviceAddress.getServiceIP() != null) {
					break;
				}
				Thread.sleep(MAX_LB_WAIT_TIME);
			}
		} catch (InterruptedException e) {
			Thread.currentThread().interrupt();
			logger.error("Error while retrieving Load Balancer IP address for selector {} in namespace {}. Reason :", lbSelector, namespace, e);
		} catch (Exception e) {
			WorkflowLogger.endActivity(serviceIPContext, Status.FAILED);
			throw new HyscaleException(DeployerErrorCodes.FAILED_TO_GET_SERVICE_ADDRESS);
		}
		if (serviceAddress == null) {
			WorkflowLogger.endActivity(serviceIPContext, Status.FAILED);
			throw new HyscaleException(DeployerErrorCodes.FAILED_TO_GET_SERVICE_ADDRESS);
		}
		if (serviceAddress.getServiceIP() == null) {
			serviceAddress = getLBServiceAddress(loadBalancer, apiClient, lbSelector, namespace, true);
		}
		WorkflowLogger.endActivity(serviceIPContext, Status.DONE);
		return serviceAddress;
	}
Utility to process information from {@link V1Service}
deployer/deployer-services/src/main/java/io/hyscale/deployer/services/util/K8sServiceUtil.java