package io.cattle.platform.systemstack.process;
import io.cattle.platform.configitem.request.ConfigUpdateRequest;
import io.cattle.platform.configitem.version.ConfigItemStatusManager;
import io.cattle.platform.core.constants.AccountConstants;
import io.cattle.platform.core.constants.ServiceConstants;
import io.cattle.platform.core.model.Account;
import io.cattle.platform.core.model.Host;
import io.cattle.platform.core.model.Stack;
import io.cattle.platform.engine.handler.HandlerResult;
import io.cattle.platform.engine.handler.ProcessPostListener;
import io.cattle.platform.engine.handler.ProcessPreListener;
import io.cattle.platform.engine.process.ProcessInstance;
import io.cattle.platform.engine.process.ProcessState;
import io.cattle.platform.object.util.DataAccessor;
import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic;
import javax.inject.Inject;
import javax.inject.Named;
@Named
public class SystemStackTrigger extends AbstractObjectProcessLogic implements ProcessPostListener, ProcessPreListener {
public static final String STACKS = "system-stacks";
@Inject
ConfigItemStatusManager itemManager;
@Override
public String[] getProcessNames() {
return new String[]{
"stack.*", "host.*"
};
}
@Override
public HandlerResult handle(ProcessState state, ProcessInstance process) {
Object resource = state.getResource();
if (resource instanceof Stack) {
Stack stack = (Stack)resource;
if (!ServiceConstants.isSystem(stack)) {
Account account = objectManager.loadResource(Account.class, stack.getAccountId());
if (DataAccessor.fieldString(account, AccountConstants.FIELD_ORCHESTRATION) != null) {
return null;
}
}
trigger(stack.getAccountId());
} else if (resource instanceof Host) {
trigger(((Host) resource).getAccountId());
}
return null;
}
public void trigger(Long accountId) {
ConfigUpdateRequest request = ConfigUpdateRequest.forResource(Account.class, accountId);
request.addItem(STACKS);
request.withDeferredTrigger(true);
itemManager.updateConfig(request);
}
}