/** * {@inheritDoc} */ @Override public void from(io.cattle.platform.core.model.ServiceExposeMap from) { setId(from.getId()); setName(from.getName()); setKind(from.getKind()); setUuid(from.getUuid()); setDescription(from.getDescription()); setState(from.getState()); setCreated(from.getCreated()); setRemoved(from.getRemoved()); setRemoveTime(from.getRemoveTime()); setData(from.getData()); setServiceId(from.getServiceId()); setInstanceId(from.getInstanceId()); setAccountId(from.getAccountId()); setIpAddress(from.getIpAddress()); setDnsPrefix(from.getDnsPrefix()); setHostName(from.getHostName()); setManaged(from.getManaged()); setUpgrade(from.getUpgrade()); }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { ServiceExposeMap exposeMap = (ServiceExposeMap) state.getResource(); if (exposeMap.getManaged()) { return null; } Service service = objectManager.loadResource(Service.class, exposeMap.getServiceId()); publishEvent(service); return null; }
@Override protected PublicEndpoint map(List<Object> input) { Instance instance = (Instance) input.get(0); Port port = (Port) input.get(1); Host host = (Host) input.get(2); String address = ""; address = DataAccessor.fieldString(port, PortConstants.FIELD_BIND_ADDR); if (StringUtils.isEmpty(address) || "0.0.0.0".equals(address)) { IpAddress ip = (IpAddress) input.get(3); if (ip != null) { address = ip.getAddress(); } else { IpAddress hostIp = (IpAddress) input.get(4); if (hostIp != null) { address = hostIp.getAddress(); } } } ServiceExposeMap exposeMap = (ServiceExposeMap) input.get(5); Long serviceId = exposeMap != null ? exposeMap.getServiceId() : null; PublicEndpoint data = new PublicEndpoint(address, port.getPublicPort(), host.getId(), instance.getId(), serviceId); return data; } };
sendChange(Service.class, accountId, ((ServiceExposeMap) obj).getServiceId(), schedule, context); sendChange(Instance.class, accountId, ((ServiceExposeMap) obj).getInstanceId(), schedule, context); } else if (obj instanceof InstanceHostMap) { sendChange(Host.class, accountId, ((InstanceHostMap) obj).getHostId(), schedule, context);
public void cleanupUpgradedInstances(Service service) { List<? extends ServiceExposeMap> maps = exposeMapDao.getInstancesSetForUpgrade(service.getId()); List<Instance> waitList = new ArrayList<>(); for (ServiceExposeMap map : maps) { Instance instance = objectManager.loadResource(Instance.class, map.getInstanceId()); if (instance == null || instance.getRemoved() != null || instance.getState().equals( CommonStatesConstants.REMOVING)) { continue; } try { objectProcessMgr.scheduleProcessInstanceAsync(InstanceConstants.PROCESS_REMOVE, instance, null); } catch (ProcessCancelException ex) { // in case instance was manually restarted objectProcessMgr.scheduleProcessInstanceAsync(InstanceConstants.PROCESS_STOP, instance, ProcessUtils.chainInData(new HashMap<String, Object>(), InstanceConstants.PROCESS_STOP, InstanceConstants.PROCESS_REMOVE)); } } for (Instance instance : waitList) { resourceMntr.waitForState(instance, CommonStatesConstants.REMOVED); } }
@Override public boolean evaluate(ServiceExposeMap obj) { return obj != null && CommonStatesConstants.ACTIVE.equals(obj.getState()); }
protected void createDeploymentUnitsForHostname(DeploymentServiceContext context, Map<String, Map<String, String>> uuidToLabels, Map<String, List<DeploymentUnitInstance>> uuidToInstances, Service service) { String hostName = DataAccessor.fields(service) .withKey(ServiceConstants.FIELD_HOSTNAME).as(String.class); if (hostName != null) { createExternalDeploymentUnit(context, uuidToLabels, uuidToInstances, service, null, hostName); } // get existing maps (they will be cleaned up later if ip is no longer on the service) List<? extends ServiceExposeMap> exposeMaps = expMapDao.getNonRemovedServiceHostnameMaps(service.getId()); for (ServiceExposeMap exposeMap : exposeMaps) { createExternalDeploymentUnit(context, uuidToLabels, uuidToInstances, service, null, exposeMap.getHostName()); } }
@SuppressWarnings("unchecked") protected void createExternalUnitsForIps(DeploymentServiceContext context, Map<String, Map<String, String>> uuidToLabels, Map<String, List<DeploymentUnitInstance>> uuidToInstances, Service service) { List<String> externalIps = DataAccessor.fields(service) .withKey(ServiceConstants.FIELD_EXTERNALIPS).withDefault(Collections.EMPTY_LIST) .as(List.class); if (externalIps != null) { for (String externalIp : externalIps) { createExternalDeploymentUnit(context, uuidToLabels, uuidToInstances, service, externalIp, null); } } // get existing maps (they will be cleaned up later if ip is no longer on the service) List<? extends ServiceExposeMap> exposeMaps = expMapDao.getNonRemovedServiceIpMaps(service.getId()); for (ServiceExposeMap exposeMap : exposeMaps) { createExternalDeploymentUnit(context, uuidToLabels, uuidToInstances, service, exposeMap.getIpAddress(), null); } }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Object obj = state.getResource(); if (obj instanceof Service) { composeManager.cleanupResources((Service)obj); } else if (obj instanceof ServiceExposeMap) { ServiceExposeMap map = (ServiceExposeMap)obj; Service service = objectManager.loadResource(Service.class, map.getServiceId()); composeManager.cleanupResources(service); } return null; }
final Map<Long, ServiceExposeMap> currentMappedInstances = new HashMap<>(); for (ServiceExposeMap map : current) { currentMappedInstances.put(map.getInstanceId(), map);
@Override protected boolean isStartedImpl() { return this.exposeMap != null && this.exposeMap.getState().equalsIgnoreCase(CommonStatesConstants.ACTIVE); }
private Service loadService(Instance instance) { ServiceExposeMap smap = objectManager.findAny(ServiceExposeMap.class, SERVICE_EXPOSE_MAP.INSTANCE_ID, instance.getId(), SERVICE_EXPOSE_MAP.REMOVED, null); if (smap == null) { return null; } Service service = getObjectManager().loadResource(Service.class, smap.getServiceId()); if (service == null || !sdService.isActiveService(service)) { return null; } return service; }
protected void checkAndDelete(Service service, Stack env) { service = objectManager.reload(service); env = objectManager.reload(env); boolean found = false; for (ServiceExposeMap map : serviceExportMapDao.getUnmanagedServiceInstanceMapsToRemove(service.getId())) { found = true; if (isRemoved(service.getRemoved(), service.getState())) { Instance instance = objectManager.loadResource(Instance.class, map.getInstanceId()); DefaultDeploymentUnitInstance.removeInstance(instance, objectProcessManager); } } if (!found && !isRemoved(service.getRemoved(), service.getState())) { objectProcessManager.scheduleStandardProcess(StandardProcess.REMOVE, service, null); } env = objectManager.reload(env); if (isRemoved(env.getRemoved(), env.getState())) { return; } List<Service> services = objectManager.find(Service.class, SERVICE.STACK_ID, env.getId(), ObjectMetaDataManager.STATE_FIELD, new Condition(ConditionType.NE, CommonStatesConstants.REMOVING), ObjectMetaDataManager.REMOVED_FIELD, null); if (services.size() == 0) { objectProcessManager.scheduleStandardProcess(StandardProcess.REMOVE, env, null); } }
@Override public boolean evaluate(ServiceExposeMap obj) { return CommonStatesConstants.REMOVED.equals(obj.getState()); }
protected Object getAccountObject(Object obj) { if (obj instanceof HostIpAddressMap) { return objectManager.loadResource(IpAddress.class, ((HostIpAddressMap) obj).getIpAddressId()); } else if (obj instanceof InstanceHostMap) { return objectManager.loadResource(Instance.class, ((InstanceHostMap) obj).getInstanceId()); } else if (obj instanceof ServiceConsumeMap) { return objectManager.loadResource(Service.class, ((ServiceConsumeMap) obj).getServiceId()); } else if (obj instanceof ServiceExposeMap) { return objectManager.loadResource(Service.class, ((ServiceExposeMap) obj).getServiceId()); } return obj; }
@Override public void doWithLockNoResult() { ServiceExposeMap exposeMap = exposeMapDao.createServiceInstanceMap(service, instance, false); if (exposeMap.getState().equalsIgnoreCase(CommonStatesConstants.REQUESTED)) { objectProcessManager.scheduleStandardProcessAsync(StandardProcess.CREATE, exposeMap, null); } } });
@Override public void doWithLockNoResult() { ServiceExposeMap exposeMap = exposeMapDao.createServiceInstanceMap(service, instance, false); if (exposeMap.getState().equalsIgnoreCase(CommonStatesConstants.REQUESTED)) { objectProcessManager.scheduleStandardProcessAsync(StandardProcess.CREATE, exposeMap, null); } } });
private void deleteServiceMappings(Instance instance) { List<? extends ServiceExposeMap> maps = objectManager.mappedChildren( objectManager.loadResource(Instance.class, instance.getId()), ServiceExposeMap.class); for (ServiceExposeMap map : maps) { if (!(map.getState().equals(CommonStatesConstants.REMOVED) || map.getState().equals( CommonStatesConstants.REMOVING))) { objectProcessManager.scheduleStandardProcessAsync(StandardProcess.REMOVE, map, null); } } }
@Override public void scheduleCreate() { if (instance.getState().equalsIgnoreCase(CommonStatesConstants.REQUESTED)) { context.objectProcessManager.scheduleStandardProcessAsync(StandardProcess.CREATE, instance, null); } if (exposeMap.getState().equalsIgnoreCase(CommonStatesConstants.REQUESTED)) { context.objectProcessManager.scheduleStandardProcessAsync(StandardProcess.CREATE, exposeMap, null); } }