import com.oransc.rappmanager.models.csar.RappCsarConfigurationHandler;
import com.oransc.rappmanager.models.rapp.Rapp;
import com.oransc.rappmanager.models.rapp.RappEvent;
-import com.oransc.rappmanager.models.rapp.RappState;
import com.oransc.rappmanager.models.rappinstance.RappACMInstance;
import com.oransc.rappmanager.models.rappinstance.RappInstance;
import com.oransc.rappmanager.models.statemachine.RappInstanceStateMachine;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
+import org.onap.policy.clamp.models.acm.concepts.AcTypeState;
import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
import org.onap.policy.clamp.models.acm.concepts.DeployState;
import org.onap.policy.clamp.models.acm.concepts.LockState;
} catch (Exception e) {
logger.warn("Error in deploying Rapp", e);
}
+ rappInstanceStateMachine.sendRappInstanceEvent(rappInstance, RappEvent.ACMDEPLOYFAILED);
+ rappInstance.setReason("Unable to deploy ACM");
return false;
}
return true;
}
}
+ rappInstanceStateMachine.sendRappInstanceEvent(rappInstance, RappEvent.ACMUNDEPLOYFAILED);
+ rappInstance.setReason("Unable to undeploy ACM");
return false;
}
rapp.setCompositionId(commissioningResponse.getCompositionId());
logger.info("Priming automation Composition");
primeACMComposition(commissioningResponse.getCompositionId(), PrimeOrder.PRIME);
- rapp.setState(RappState.PRIMED);
return true;
} else {
- logger.error("Failed to create automation composition");
+ logger.warn("Failed to create automation composition");
}
} catch (Exception e) {
- logger.error("Failed to create automation composition", e);
+ logger.warn("Error in creating automation composition", e);
}
+ rapp.setReason("Unable to create automation composition");
return false;
}
public boolean deprimeRapp(Rapp rapp) {
try {
primeACMComposition(rapp.getCompositionId(), PrimeOrder.DEPRIME);
- CommissioningResponse commissioningResponse = deleteComposition(rapp.getCompositionId());
- if (commissioningResponse != null) {
- rapp.setState(RappState.COMMISSIONED);
- return true;
+ if (waitForCompositionTargetState(rapp.getCompositionId(), AcTypeState.COMMISSIONED)) {
+ CommissioningResponse commissioningResponse = deleteComposition(rapp.getCompositionId());
+ if (commissioningResponse != null) {
+ rapp.setCompositionId(null);
+ return true;
+ }
}
} catch (Exception e) {
- logger.error("Failed deprime automation composition", e);
+ logger.warn("Failed deprime automation composition", e);
}
+ rapp.setReason("Unable to delete automation composition");
return false;
}
+ boolean waitForCompositionTargetState(UUID compositionId, AcTypeState acTypeState) {
+ boolean targetCompositionStateTransition = false;
+ try {
+ for (int i = 0; i < acmConfiguration.getMaxRetries(); i++) {
+ logger.debug("Composition state check {}", i + 1);
+ if (isCompositionStateEquals(compositionId, acTypeState)) {
+ logger.debug("Composition {} state is {}", compositionId, acTypeState);
+ targetCompositionStateTransition = true;
+ break;
+ } else {
+ TimeUnit.SECONDS.sleep(acmConfiguration.getRetryInterval());
+ }
+ }
+ } catch (Exception e) {
+ logger.warn("Unable to get composition state for composition {}", compositionId, e);
+ Thread.currentThread().interrupt();
+ }
+ return targetCompositionStateTransition;
+ }
+
+ boolean isCompositionStateEquals(UUID compositionId, AcTypeState acTypeState) {
+ return automationCompositionDefinitionApiClient.getCompositionDefinition(compositionId, UUID.randomUUID())
+ .getState().equals(acTypeState);
+ }
+
public void syncRappInstanceStatus(UUID compositionId, RappInstance rappInstance) {
if (rappInstance.getAcm().getAcmInstanceId() != null) {
try {