package io.cattle.platform.servicediscovery.deployment; import io.cattle.platform.core.constants.CommonStatesConstants; import io.cattle.platform.core.model.Service; import io.cattle.platform.core.model.ServiceExposeMap; import io.cattle.platform.core.model.ServiceIndex; import io.cattle.platform.core.model.Stack; import io.cattle.platform.iaas.api.auditing.AuditEventType; import io.cattle.platform.object.process.StandardProcess; import io.cattle.platform.object.resource.ResourcePredicate; import io.cattle.platform.servicediscovery.deployment.impl.DeploymentManagerImpl.DeploymentServiceContext; import java.util.List; import java.util.Map; public abstract class DeploymentUnitInstance { protected String uuid; protected DeploymentServiceContext context; protected ServiceExposeMap exposeMap; protected String launchConfigName; protected Service service; protected Stack stack; public abstract boolean isError(); public void remove() { removeUnitInstance(); if (exposeMap != null) { context.objectProcessManager.scheduleStandardProcessAsync(StandardProcess.REMOVE, exposeMap, null); } } public void waitForRemoval() { if (exposeMap != null) { context.resourceMonitor.waitFor(exposeMap, new ResourcePredicate<ServiceExposeMap>() { @Override public boolean evaluate(ServiceExposeMap obj) { return CommonStatesConstants.REMOVED.equals(obj.getState()); } @Override public String getMessage() { return "removed state"; } }); } } protected abstract void removeUnitInstance(); public abstract boolean isTransitioning(); public abstract void stop(); 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()); } public abstract DeploymentUnitInstance create(Map<String, Object> deployParams); public abstract void scheduleCreate(); public DeploymentUnitInstance start() { if (this.isStarted()) { return this; } return this.startImpl(); } protected abstract DeploymentUnitInstance startImpl(); public abstract boolean createNew(); public DeploymentUnitInstance waitForStart() { if (this.isStarted()) { return this; } return this.waitForStartImpl(); } protected abstract DeploymentUnitInstance waitForStartImpl(); public boolean isStarted() { return isStartedImpl(); } protected abstract boolean isStartedImpl(); public abstract boolean isUnhealthy(); public String getUuid() { return uuid; } public String getLaunchConfigName() { return launchConfigName; } public Service getService() { return service; } public abstract void waitForAllocate(); public abstract boolean isHealthCheckInitializing(); public abstract ServiceIndex getServiceIndex(); public Stack getStack() { return stack; } public void generateAuditLog(AuditEventType eventType, String description, String level) { if (this instanceof InstanceUnit) { InstanceUnit defaultInstance = (InstanceUnit) this; context.activityService.instance(defaultInstance.getInstance(), eventType.toString(), description, level); } } public abstract List<String> getSearchDomains(); public abstract Long getCreateIndex(); }