/** * {@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()); }
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 ServiceIndex createServiceIndex(Service service, String launchConfigName, String serviceIndex) { ServiceIndex serviceIndexObj = objectManager.findAny(ServiceIndex.class, SERVICE_INDEX.SERVICE_ID, service.getId(), SERVICE_INDEX.LAUNCH_CONFIG_NAME, launchConfigName, SERVICE_INDEX.SERVICE_INDEX_, serviceIndex, SERVICE_INDEX.REMOVED, null); if (serviceIndexObj == null) { serviceIndexObj = objectManager.create(ServiceIndex.class, SERVICE_INDEX.SERVICE_ID, service.getId(), SERVICE_INDEX.LAUNCH_CONFIG_NAME, launchConfigName, SERVICE_INDEX.SERVICE_INDEX_, serviceIndex, SERVICE_INDEX.ACCOUNT_ID, service.getAccountId()); } return serviceIndexObj; }
@Override public String getServiceCertificate(final Service service) { if (service == null) { return null; } final Stack stack = objectManager.loadResource(Stack.class, service.getStackId()); if (stack == null) { return null; } String newKey = String.format("service.v3.%d.%s.cert", service.getAccountId(), service.getName()); return dataDao.getOrCreate(newKey, false, new Callable<String>() { @Override public String call() throws Exception { return generateService(service, stack); } }); }
InstanceHealthCheck healthCheck, LBConfigMetadataStyle lbConfig, Account account) { this.name = serviceName; this.uuid = service.getUuid(); this.stack_name = stackName; this.stack_uuid = stackUUID; this.kind = service.getKind(); this.sidekicks = sidekicks; this.vip = getVip(service); boolean isPrimaryConfig = service.getName().equalsIgnoreCase(serviceName); String launchConfigName = isPrimaryConfig ? ServiceConstants.PRIMARY_LAUNCH_CONFIG_NAME : serviceName; populateExternalServiceInfo(service); populatePortsInfo(service, launchConfigName); this.create_index = service.getCreateIndex(); this.scale = DataAccessor.fieldInteger(service, ServiceConstants.FIELD_SCALE); this.fqdn = DataAccessor.fieldString(service, ServiceConstants.FIELD_FQDN); this.health_check = new HealthCheck(healthCheck); this.system = service.getSystem(); setServiceMetadata(service, serviceName); this.lb_config = lbConfig; this.primary_service_name = service.getName(); this.environment_uuid = account.getUuid(); this.state = service.getState(); this.metadata_kind = "service"; this.token = DataAccessor.fieldString(service, ServiceConstants.FIELD_TOKEN);
protected ServiceConsumeMap createServiceLinkImpl(Service service, ServiceLink serviceLink) { Service linkFrom = objectManager.reload(service); if (linkFrom == null || linkFrom.getRemoved() != null || linkFrom.getState().equalsIgnoreCase(CommonStatesConstants.REMOVING)) { return null; if (linkTo == null || linkTo.getRemoved() != null || linkTo.getState().equalsIgnoreCase(CommonStatesConstants.REMOVING)) { return null; map = findNonRemovedMap(service.getId(), serviceLink.getServiceId(), serviceLink.getName()); } else { map = findNonRemovedMap(service.getId(), serviceLink.getService(), serviceLink.getName()); Map<Object,Object> properties = CollectionUtils.asMap( (Object)SERVICE_CONSUME_MAP.SERVICE_ID, service.getId(), SERVICE_CONSUME_MAP.CONSUMED_SERVICE_ID, serviceLink.getServiceId(), SERVICE_CONSUME_MAP.ACCOUNT_ID, service.getAccountId(), SERVICE_CONSUME_MAP.NAME, serviceLink.getName(), SERVICE_CONSUME_MAP.CONSUMED_SERVICE, serviceLink.getService());
private void registerAsTargetService(Service targetService) { List<Long> accountIds = new ArrayList<>(); accountIds.add(targetService.getAccountId()); List<? extends AccountLink> linkedToAccounts = objectManager.find(AccountLink.class, ACCOUNT_LINK.LINKED_ACCOUNT_ID, targetService.getAccountId(), ACCOUNT_LINK.REMOVED, null); // add all accounts that are linked to service's account for (AccountLink linkedToAccount : linkedToAccounts) { accountIds.add(linkedToAccount.getAccountId()); } List<Service> services = new ArrayList<>(); for (Long accountId : accountIds) { services.addAll(objectManager.find(Service.class, SERVICE.ACCOUNT_ID, accountId, SERVICE.REMOVED, null)); } for (Service service : services) { // skip itself if (targetService.getId().equals(service.getId())) { continue; } if (isSelectorLinkMatch(service.getSelectorLink(), targetService)) { addServiceLink(service, targetService); } } }
@Override public Object perform(String name, Object obj, ApiRequest request) { if (!(obj instanceof Stack)) { return null; } Stack stack = (Stack) obj; List<? extends Long> serviceIds = DataAccessor.fromMap(request.getRequestObject()) .withKey(ServiceConstants.FIELD_SERVICE_IDS).asList(jsonMapper, Long.class); List<? extends Service> services = objectManager.mappedChildren(stack, Service.class); List<Service> toExport = new ArrayList<>(); for (Service service : services) { // export only non-removed requested services if ((serviceIds == null || serviceIds.isEmpty()) || serviceIds.contains(service.getId())) { if (service.getRemoved() == null && !service.getState().equals(CommonStatesConstants.REMOVED)) { toExport.add(service); } } } Map.Entry<String, String> composeConfig = svcDiscoveryServer.buildComposeConfig(toExport, stack); return new ComposeConfig(composeConfig.getKey(), composeConfig.getValue()); } }
@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); } }); }
private Object createDriver(String driverKey, Service service, Map<String, Object> fields) { Class<?> driverClass = objectManager.getSchemaFactory().getSchemaClass(driverKey); String name = getString(fields, ObjectMetaDataManager.NAME_FIELD); if (name == null) { name = service.getName(); } Map<String, Object> data = CollectionUtils.asMap("fields", fields); return objectManager.create(driverClass, ObjectMetaDataManager.NAME_FIELD, name, ObjectMetaDataManager.ACCOUNT_FIELD, service.getAccountId(), "serviceId", service.getId(), ObjectMetaDataManager.DATA_FIELD, data); } }
private Set<String> getServiceNamesInStack(long stackId) { Set<String> servicesInEnv = new HashSet<String>(); List<? extends Service> services = objectManager.find(Service.class, SERVICE.STACK_ID, stackId, SERVICE.REMOVED, null); for (Service service : services) { servicesInEnv.add(service.getName().toLowerCase()); } return servicesInEnv; }
protected DeploymentUnitInstance(DeploymentServiceContext context, String uuid, Service service, String launchConfigName) { this.context = context; this.uuid = uuid; this.launchConfigName = launchConfigName; this.service = service; this.stack = context.objectManager.loadResource(Stack.class, service.getStackId()); }
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); } }
@Override protected Long getId(Object obj) { if (obj instanceof Service) { return ((Service) obj).getId(); } return null; }
protected void validateLinks(final Map<String, ServiceLink> newServiceLinks) { for (ServiceLink link : newServiceLinks.values()) { if (link.getServiceId() == null) { continue; } Service targetService = objMgr.loadResource(Service.class, link.getServiceId()); if (targetService == null || targetService.getRemoved() != null || targetService.getState().equalsIgnoreCase(CommonStatesConstants.REMOVING)) { Object obfuscatedId = idFormatter.formatId("service", link.getServiceId()); String obfuscatedIdStr = obfuscatedId != null ? obfuscatedId.toString() : null; String svcName = targetService != null ? targetService.getName() : obfuscatedIdStr; ValidationErrorCodes.throwValidationError(ValidationErrorCodes.INVALID_REFERENCE, "Service " + svcName + " is removed"); } } }
@Override protected void populatedData(Account system, List<Object> toCreate) { List<Data> datas = objectManager.find(Data.class, DATA.NAME, new Condition(ConditionType.LIKE, "service.v2.%.cert")); for (Data data : datas) { String name = data.getName(); String[] parts = name.split("[.]"); if (parts.length != 4) { continue; } Long id = null; try { id = Long.parseLong(parts[2]); } catch (NumberFormatException nfe) { continue; } Service service = objectManager.loadResource(Service.class, id); if (service == null || service.getRemoved() != null || StringUtils.isBlank(service.getName())) { continue; } String newKey = "service.v3." + service.getAccountId() + "." + service.getName() + ".cert"; dataDao.getOrCreate(newKey, false, new Callable<String>() { @Override public String call() throws Exception { return data.getValue(); } }); } }
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; } }
if (service.getKind().equalsIgnoreCase(ServiceConstants.KIND_LOAD_BALANCER_SERVICE)) { if (strategy.getLaunchConfig() == null) { ValidationErrorCodes.throwValidationError(ValidationErrorCodes.INVALID_OPTION, if (name.equalsIgnoreCase(service.getName())) { strategy.setLaunchConfig(launchConfig); } else { for (String scName : existingLCs.keySet()) { if (!lCsToUpdateFinal.containsKey(scName)) { if (StringUtils.equals(scName, service.getName())) { finalizedPrimary = existingLCs.get(scName); } else { if (service.getSelectorContainer() == null && StringUtils.equalsIgnoreCase(ServiceConstants.IMAGE_NONE, imageUuid.toString())) { it.remove();
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; } }
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); } } } }