void deleteStack(ExternalEvent event, Map<String, Object> stackData) { Stack env = stackDao.getStackByExternalId(event.getAccountId(), event.getExternalId()); if (env != null) { objectProcessManager.scheduleStandardProcess(StandardProcess.REMOVE, env, null); } }
void deleteService(ExternalEvent event, Map<String, Object> serviceData) { Service svc = serviceDao.getServiceByExternalId(event.getAccountId(), event.getExternalId()); if (svc != null) { objectProcessManager.scheduleStandardProcess(StandardProcess.REMOVE, svc, null); } }
void updateService(ExternalEvent event, Map<String, Object> serviceData) { Service svc = serviceDao.getServiceByExternalId(event.getAccountId(), event.getExternalId()); if (svc == null) { log.info("Unable to find service while attempting to update. Returning. Service external id: [{}], account id: [{}]", event.getExternalId(), event.getAccountId()); return; } Map<String, Object> fields = DataUtils.getFields(svc); Map<String, Object> updates = new HashMap<String, Object>(); for (Map.Entry<String, Object> resourceField : serviceData.entrySet()) { String fieldName = resourceField.getKey(); Object newFieldValue = resourceField.getValue(); Object currentFieldValue = fields.get(fieldName); if (ObjectUtils.hasWritableProperty(svc, fieldName)) { Object property = ObjectUtils.getProperty(svc, fieldName); if (newFieldValue != null && !newFieldValue.equals(property) || property == null) { updates.put(fieldName, newFieldValue); } } else if ((newFieldValue != null && !newFieldValue.equals(currentFieldValue)) || currentFieldValue != null) { updates.put(fieldName, newFieldValue); } } if (!updates.isEmpty()) { objectManager.setFields(svc, updates); resourceDao.updateAndSchedule(svc); } }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { ExternalEvent event = (ExternalEvent)state.getResource(); if (StringUtils.isEmpty(event.getExternalId())) { log.debug("External event doesn't have an external id: {}", event.getId()); return null; } if (ExternalEventConstants.KIND_VOLUME_EVENT.equals(event.getKind())) { handleVolumeEvent(event, state, process); } else if (ExternalEventConstants.KIND_STORAGE_POOL_EVENT.equals(event.getKind())) { handleStoragePoolEvent(event, state, process); } else if (ExternalEventConstants.KIND_EXTERNAL_DNS_EVENT.equals(event.getKind())) { handleExternalDnsEvent(event, state, process); } return null; }
@Override public void doWithLockNoResult() { Volume volume = volumeDao.findVolumeByExternalId(storagePool.getId(), event.getExternalId()); switch (event.getEventType()) { case ExternalEventConstants.TYPE_VOLUME_CREATE: if (volume == null) { Map<String, Object> volumeData = CollectionUtils.toMap(DataUtils.getFields(event).get(FIELD_VOLUME)); if (volumeData.isEmpty()) { log.warn("Empty volume for externalVolumeEvent: {}. StoragePool: {}", event, volumeData); return; } volumeData.put(ObjectMetaDataManager.ACCOUNT_FIELD, event.getAccountId()); volumeData.put(FIELD_ATTACHED_STATE, CommonStatesConstants.INACTIVE); volumeData.put(FIELD_ALLOC_STATE, CommonStatesConstants.ACTIVE); volumeData.put(FIELD_ZONE_ID, 1L); volumeData.put(FIELD_DEV_NUM, -1); try { volumeDao.createVolumeInStoragePool(volumeData, name.toString(), storagePool); } catch (ProcessCancelException e) { log.info("Create process cancelled for volumeData {}. ProcessCancelException message: {}", volumeData, e.getMessage()); } } break; default: log.error("Unknown event type: {} for event {}", event.getEventType(), event); return; } } });
protected void handleExternalDnsEvent(final ExternalEvent event, ProcessState state, ProcessInstance process) { lockManager.lock(new ExternalEventLock(EXERNAL_DNS_LOCK_NAME, event.getAccountId(), event.getExternalId()), new LockCallbackNoReturn() { @Override
protected void handleStoragePoolEvent(final ExternalEvent event, ProcessState state, ProcessInstance process) { lockManager.lock(new ExternalEventLock(STORAGE_POOL_LOCK_NAME, event.getAccountId(), event.getExternalId()), new LockCallbackNoReturn() { @Override public void doWithLockNoResult() {
void createService(ExternalEvent event, Map<String, Object> serviceData) { Service svc = serviceDao.getServiceByExternalId(event.getAccountId(), event.getExternalId()); if (svc != null) { return; !existingSvc.getExternalId().equals(event.getExternalId())) { log.info("Deleting existing kubernetes service {} with externalId {}", existingSvc.getName(), existingSvc.getExternalId()); } catch (ProcessCancelException e) { log.info("Create and activate process cancelled for service with account id {}and external id {}", event.getAccountId(), event.getExternalId());
lockManager.lock(new DockerStoragePoolVolumeCreateLock(storagePool, event.getExternalId()), new LockCallbackNoReturn() { @Override public void doWithLockNoResult() {
lockManager.lock(new ExternalEventLock(SERVICE_LOCK_NAME, event.getAccountId(), event.getExternalId()), new LockCallbackNoReturn() { @Override public void doWithLockNoResult() {
/** * {@inheritDoc} */ @Override public void from(io.cattle.platform.core.model.ExternalEvent from) { setId(from.getId()); setAccountId(from.getAccountId()); setKind(from.getKind()); setUuid(from.getUuid()); setState(from.getState()); setCreated(from.getCreated()); setData(from.getData()); setExternalId(from.getExternalId()); setEventType(from.getEventType()); setReportedAccountId(from.getReportedAccountId()); }