@Override
public StateUpdate execute(IntegrationDeployment integrationDeploymentDefinition) {
final IntegrationDeployment integrationDeployment = IntegrationSupport.sanitize(integrationDeploymentDefinition, dataManager, encryptionComponent);
final Integration integration = integrationOf(integrationDeployment);
int userIntegrations = countActiveIntegrationsOfSameUserAs(integration);
if (userIntegrations >= maxIntegrationsPerUser) {
int userDeployments = countDeployments(integration);
if (userDeployments >= maxDeploymentsPerUser) {
logInfo(integrationDeployment, "Build started: {}, isRunning: {}, Deployment ready: {}",
isBuildStarted(integrationDeployment), isRunning(integrationDeployment), isReady(integrationDeployment));
BuildStepPerformer stepPerformer = new BuildStepPerformer(integrationDeployment);
logInfo(integrationDeployment, "Steps performed so far: " + stepPerformer.getStepsPerformed());
try {
deactivatePreviousDeployments(integrationDeployment);
DeploymentData deploymentData = createDeploymentData(integration, integrationDeployment);
stepPerformer.perform("build", this::build, deploymentData);
stepPerformer.perform("deploy", this::deploy, deploymentData);
} catch (@SuppressWarnings("PMD.AvoidCatchingGenericException") Exception e) {
logError(integrationDeployment, "[ERROR] Activation failure");
if (isRunning(integrationDeployment)) {
logInfo(integrationDeployment, "[ACTIVATED] bc. integration is running with 1 pod");
updateIntegration(integrationDeployment, IntegrationDeploymentState.Active);
return new StateUpdate(IntegrationDeploymentState.Active);