protected boolean isExternallyProvidedService(Service service) { if (service.getKind().equalsIgnoreCase(ServiceConstants.KIND_DNS_SERVICE) || service.getKind().equalsIgnoreCase(ServiceConstants.KIND_EXTERNAL_SERVICE) || ServiceConstants.SERVICE_LIKE.contains(service.getKind())) { return false; } return true; } }
@Override public boolean isV1LB(Service service) { if (!service.getKind().equalsIgnoreCase(ServiceConstants.KIND_LOAD_BALANCER_SERVICE)) { return false; } LbConfig lbConfig = DataAccessor.field(service, ServiceConstants.FIELD_LB_CONFIG, jsonMapper, LbConfig.class); return lbConfig == null; }
public static boolean isNoopLBService(Service service) { Object imageUUID = ServiceDiscoveryUtil.getLaunchConfigDataAsMap(service, ServiceConstants.PRIMARY_LAUNCH_CONFIG_NAME).get( InstanceConstants.FIELD_IMAGE_UUID); return service.getKind().equalsIgnoreCase(ServiceConstants.KIND_LOAD_BALANCER_SERVICE) && imageUUID != null && imageUUID.toString().toLowerCase() .contains(ServiceConstants.IMAGE_NONE); }
private void addExtraComposeParameters(Service service, String launchConfigName, Map<String, Object> composeServiceData) { if (service.getKind().equalsIgnoreCase(ServiceConstants.KIND_DNS_SERVICE)) { composeServiceData.put(ServiceDiscoveryConfigItem.IMAGE.getDockerName(), "rancher/dns-service"); } else if (isV1LB(service)) { composeServiceData.put(ServiceDiscoveryConfigItem.IMAGE.getDockerName(), "rancher/load-balancer-service"); } else if (service.getKind().equalsIgnoreCase(ServiceConstants.KIND_EXTERNAL_SERVICE)) { composeServiceData.put(ServiceDiscoveryConfigItem.IMAGE.getDockerName(), "rancher/external-service"); } }
@Override @SuppressWarnings("unchecked") public DeploymentUnitInstance createDeploymentUnitInstance(DeploymentServiceContext context, String uuid, Service service, String instanceName, Object instanceObj, String launchConfigName) { if (ServiceConstants.SERVICE_LIKE.contains(service.getKind())) { Instance instance = null; if (instanceObj != null) { instance = (Instance) instanceObj; } return new DefaultDeploymentUnitInstance(context, uuid, service, instanceName, instance, launchConfigName); } else if (service.getKind().equalsIgnoreCase(ServiceConstants.KIND_EXTERNAL_SERVICE)) { Pair<String, String> ipHostName = null; if (instanceObj != null) { ipHostName = (Pair<String, String>) instanceObj; } return new ExternalDeploymentUnitInstance(context, uuid, service, launchConfigName, ipHostName.getLeft(), ipHostName.getRight()); } return null; }
public static String getVip(Service service) { String vip = service.getVip(); // indicator that its pre-upgraded setup that had vip set for every service by default // vip will be set only // a) field_set_vip is set via API // b) for k8s services Map<String, Object> data = new HashMap<>(); data.putAll(DataUtils.getFields(service)); Object vipObj = data.get(ServiceConstants.FIELD_SET_VIP); boolean setVip = vipObj != null && Boolean.valueOf(vipObj.toString()); if (setVip || service.getKind().equalsIgnoreCase("kubernetesservice")) { return vip; } return null; }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Service service = (Service) state.getResource(); if (!service.getKind().equalsIgnoreCase(ServiceConstants.KIND_LOAD_BALANCER_SERVICE)) { return null; } updateServicePorts(service, state); return null; }
private boolean isNetworkStack(long accountId, long instanceId) { List<? extends Service> services = instanceDao.findServicesForInstanceId(instanceId); if(services.size() > 0) { if(services.get(0).getKind().equals(ServiceConstants.KIND_NETWORK_DRIVER_SERVICE)) { return true; } List<Service> network_services = objectManager.find(Service.class, SERVICE.ACCOUNT_ID, accountId, SERVICE.REMOVED, null, SERVICE.STACK_ID, services.get(0).getStackId(), SERVICE.KIND, ServiceConstants.KIND_NETWORK_DRIVER_SERVICE); if(network_services.size() > 0) { return true; } } return false; } }
protected String allocateVip(Service service) { if (ServiceConstants.SERVICE_LIKE.contains(service.getKind())) { Subnet vipSubnet = getServiceVipSubnet(service); String requestedVip = service.getVip(); return allocateIpForService(service, vipSubnet, requestedVip); } return null; }
@Override public List<DeploymentUnit> collectDeploymentUnits(Service service, DeploymentServiceContext context) { /* * 1. find all containers related to the service through the serviceexposemaps * Then group all the objects * by the label 'io.rancher.deployment.unit'. When containers are deployed through service discovery that * label will be placed on them. * * 2. put all the containers to the deploymentUnit */ Map<String, Map<String, String>> uuidToLabels = new HashMap<>(); Map<String, List<DeploymentUnitInstance>> uuidToInstances = new HashMap<>(); List<DeploymentUnit> units = new ArrayList<>(); Map<String, io.cattle.platform.core.model.DeploymentUnit> uuidToExistingDU = new HashMap<>(); if (ServiceConstants.SERVICE_LIKE.contains(service.getKind())) { collectDefaultServiceInstances(context, uuidToLabels, uuidToInstances, service, uuidToExistingDU); } else if (service.getKind().equalsIgnoreCase(ServiceConstants.KIND_EXTERNAL_SERVICE)) { collectExternalServiceInstances(context, uuidToLabels, uuidToInstances, service, uuidToExistingDU); } Stack stack = context.objectManager.findOne(Stack.class, STACK.ID, service.getStackId()); for (String uuid : uuidToInstances.keySet()) { DeploymentUnit unit = new DeploymentUnit(context, uuid, service, uuidToInstances.get(uuid), uuidToLabels.get(uuid), stack, uuidToExistingDU); units.add(unit); } return units; }
protected void findConsumingServicesImpl(long serviceId, List<Service> lbServices) { List<? extends ServiceConsumeMap> consumingServicesMaps = consumeMapDao .findConsumingServices(serviceId); for (ServiceConsumeMap consumingServiceMap : consumingServicesMaps) { Service consumingService = objectManager.loadResource(Service.class, consumingServiceMap.getServiceId()); if (consumingService.getKind().equalsIgnoreCase(ServiceConstants.KIND_LOAD_BALANCER_SERVICE)) { lbServices.add(consumingService); } else if (consumingService.getKind().equalsIgnoreCase(ServiceConstants.KIND_DNS_SERVICE)) { if (consumingService.getId().equals(serviceId)) { continue; } findConsumingServicesImpl(consumingService.getId(), lbServices); } } } }
@SuppressWarnings("unchecked") protected boolean isLBSystemService(Service service) { if (!service.getKind().equalsIgnoreCase(ServiceConstants.KIND_LOAD_BALANCER_SERVICE)) { return false; } Map<String, Object> data = DataAccessor.fields(service) .withKey("launchConfig").withDefault(Collections.EMPTY_MAP) .as(Map.class); Object imageObj = data.get(InstanceConstants.FIELD_IMAGE_UUID); if (imageObj == null) { return false; } Pair<String, String> defaultImage = getImageAndRepo(LB_IMAGE_UUID.get().toLowerCase()); Pair<String, String> instanceImage = getImageAndRepo(imageObj.toString().toLowerCase()); return defaultImage.getRight().equalsIgnoreCase(instanceImage.getRight()) && defaultImage.getLeft().equalsIgnoreCase(instanceImage.getLeft()); }
protected List<LoadBalancerTargetInput> getLoadBalancerTargetsV2(Service lbService) { if (!lbService.getKind().equalsIgnoreCase(ServiceConstants.KIND_LOAD_BALANCER_SERVICE)) { return new ArrayList<>(); } List<LoadBalancerTargetInput> targets = new ArrayList<>(); List<? extends ServiceConsumeMap> lbLinks = objectManager.find(ServiceConsumeMap.class, SERVICE_CONSUME_MAP.REMOVED, null, SERVICE_CONSUME_MAP.SERVICE_ID, lbService.getId()); for (ServiceConsumeMap lbLink : lbLinks) { if (lbLink.getState().equals(CommonStatesConstants.REMOVING)) { continue; } List<Service> consumedServices = new ArrayList<>(); Service svc = objectManager.loadResource(Service.class, lbLink.getConsumedServiceId()); consumedServices.add(svc); for (Service consumedService : consumedServices) { targets.add(new LoadBalancerTargetInput(consumedService, lbLink, jsonMapper)); } } return targets; }
@Override public ServiceDeploymentPlanner createServiceDeploymentPlanner(Service service, List<DeploymentUnit> units, DeploymentServiceContext context) { if (service == null) { return null; } Stack stack = context.objectManager.findOne(Stack.class, STACK.ID, service.getStackId()); boolean isGlobalDeploymentStrategy = isGlobalDeploymentStrategy(context, service); boolean isSelectorOnlyStrategy = isNoopStrategy(context, service); if (isSelectorOnlyStrategy || service.getKind().equalsIgnoreCase(ServiceConstants.KIND_EXTERNAL_SERVICE) || service.getKind().equalsIgnoreCase(ServiceConstants.KIND_DNS_SERVICE)) { return new NoOpServiceDeploymentPlanner(service, stack, units, context); } else if (isGlobalDeploymentStrategy) { return new GlobalServiceDeploymentPlanner(service, stack, units, context); } else { return new DefaultServiceDeploymentPlanner(service, stack, units, context); } }
protected void publishEvent(Service service) { Map<String, Object> data = new HashMap<>(); data.put(ObjectMetaDataManager.ACCOUNT_FIELD, service.getAccountId()); Event event = EventVO.newEvent(FrameworkEvents.STATE_CHANGE) .withData(data) .withResourceType(service.getKind()) .withResourceId(service.getId().toString()); eventService.publish(event); } }
public static ServiceDiscoveryConfigItem getServiceConfigItemByCattleName(String internalName, Service service, boolean isVolume) { List<ServiceDiscoveryConfigItem> items = new ArrayList<>(); if (isVolume) { items = supportedVolumeConfigItems; } else { items = supportedServiceConfigItems; } for (ServiceDiscoveryConfigItem serviceItem : items) { if (serviceItem.getCattleName() != null && serviceItem.getCattleName().equalsIgnoreCase(internalName)) { // special handling for external service hostname if (!isVolume && service.getKind().equalsIgnoreCase(ServiceConstants.KIND_EXTERNAL_SERVICE) && serviceItem.getCattleName().equalsIgnoreCase(HOSTNAME.cattleName)) { return new ServiceDiscoveryConfigItem(serviceItem.getCattleName(), serviceItem.getDockerName(), false, false, false); } return serviceItem; } } return null; }
protected void fetchLaunchConfigInfo(final MetaHelperInfo helperInfo, final OutputStream os, Service service, String stackName, String stackUUID, String launchConfigName, List<String> launchConfigNames) { List<String> sidekicks = new ArrayList<>(); for (String lc : launchConfigNames) { if (!lc.equalsIgnoreCase(ServiceConstants.PRIMARY_LAUNCH_CONFIG_NAME)) { sidekicks.add(lc); } } LBConfigMetadataStyle lbConfig = lbInfoDao.generateLBConfigMetadataStyle(service); Object hcO = null; if (service.getKind().equalsIgnoreCase(ServiceConstants.KIND_EXTERNAL_SERVICE)) { hcO = DataAccessor.field(service, InstanceConstants.FIELD_HEALTH_CHECK, Object.class); } else { hcO = ServiceDiscoveryUtil.getLaunchConfigObject(service, launchConfigName, InstanceConstants.FIELD_HEALTH_CHECK); } InstanceHealthCheck hc = null; if (hcO != null) { hc = jsonMapper.convertValue(hcO, InstanceHealthCheck.class); } String name = launchConfigName; if (launchConfigName.equalsIgnoreCase(ServiceConstants.PRIMARY_LAUNCH_CONFIG_NAME)) { name = service.getName(); } ServiceMetaData data = new ServiceMetaData(service, name, stackName, stackUUID, sidekicks, hc, lbConfig, helperInfo.getAccount()); writeToJson(os, data); }
protected void reconcileServiceEndpointsImpl(final Service service) { final List<PublicEndpoint> newData = instanceDao.getPublicEndpoints(service.getAccountId(), service.getId(), null); if (service != null && service.getRemoved() == null && !ServiceDiscoveryUtil.isNoopLBService(service)) { updateObjectEndPoints(service, service.getKind(), service.getId(), service.getAccountId(), newData); } }
@Override public void cleanupResources(final Service service) { if (!DockerConstants.TYPE_COMPOSE_SERVICE.equals(service.getKind())) { return; } final Stack env = objectManager.loadResource(Stack.class, service.getStackId()); lockManager.lock(new DefaultMultiLockDefinition(new ComposeProjectLock(env.getAccountId(), env.getName()), new ComposeServiceLock(env.getAccountId(), service.getName())), new LockCallbackNoReturn() { @Override public void doWithLockNoResult() { checkAndDelete(service, env); } }); }
/** * {@inheritDoc} */ @Override public void from(io.cattle.platform.core.model.Service from) { setId(from.getId()); setName(from.getName()); setAccountId(from.getAccountId()); setKind(from.getKind()); setUuid(from.getUuid()); setDescription(from.getDescription()); setState(from.getState()); setCreated(from.getCreated()); setRemoved(from.getRemoved()); setRemoveTime(from.getRemoveTime()); setData(from.getData()); setStackId(from.getStackId()); setVip(from.getVip()); setCreateIndex(from.getCreateIndex()); setSelectorLink(from.getSelectorLink()); setSelectorContainer(from.getSelectorContainer()); setExternalId(from.getExternalId()); setHealthState(from.getHealthState()); setSystem(from.getSystem()); setSkip(from.getSkip()); }