2 import com.google.gson.JsonObject;
3 import json.templateInfo.TemplateInfo;
4 import org.onap.sdc.dcae.composition.restmodels.CreateVFCMTRequest;
5 import org.onap.sdc.dcae.composition.restmodels.sdc.ResourceDetailed;
6 import org.onap.sdc.dcae.composition.util.DcaeBeConstants;
7 import org.springframework.web.client.HttpServerErrorException;
8 import utilities.IDcaeRestClient;
9 import utilities.IReport;
11 import java.util.ArrayList;
12 import java.util.List;
14 import java.util.concurrent.atomic.AtomicInteger;
17 public class DeployTemplate {
18 private static final String FAILED_UPDATE_VFCMT = "Failed update vfcmt: ";
19 private static final String FAILED = "failed";
20 private final IReport report;
21 private final IDcaeRestClient dcaeRestClient;
22 private LoggerError errLogger = LoggerError.getInstance();
23 private LoggerDebug debugLogger = LoggerDebug.getInstance();
25 DeployTemplate(IReport report, IDcaeRestClient dcaeRestClient) {
28 this.dcaeRestClient = dcaeRestClient;
31 public void deploy(Map<TemplateInfo, JsonObject> templateInfoToJsonObjectMap) {
32 List<ResourceDetailed> vfcmtList = dcaeRestClient.getAllVfcmts();
34 List<TemplateInfo> updatedTemplateInfos = new ArrayList<>();
35 vfcmtList.stream().forEach(vfcmt ->
36 templateInfoToJsonObjectMap.keySet().stream().filter(templateInfo -> templateInfo.getName().equalsIgnoreCase(vfcmt.getName())).forEach(templateInfo -> {
37 update(vfcmt, templateInfo, templateInfoToJsonObjectMap.get(templateInfo));
38 updatedTemplateInfos.add(templateInfo);
40 templateInfoToJsonObjectMap.keySet().stream()
41 .filter(templateInfo -> !updatedTemplateInfos.contains(templateInfo))
42 .forEach(templateInfo -> createNew(templateInfo, templateInfoToJsonObjectMap.get(templateInfo)));
44 verify(templateInfoToJsonObjectMap);
47 private void verify(Map<TemplateInfo, JsonObject> templateInfoToJsonObjectMap) {
48 AtomicInteger foundCount = new AtomicInteger();
49 debugLogger.log("Starting verify deployment");
50 List<ResourceDetailed> vfcmtList = dcaeRestClient.getAllVfcmts();
52 templateInfoToJsonObjectMap.keySet().stream()
53 .forEach(templateInfo -> vfcmtList.stream()
54 .filter(vfcmt -> vfcmt.getName().equalsIgnoreCase(templateInfo.getName()))
55 .forEach(vfcmt -> foundCount.getAndIncrement()));
56 if (foundCount.get() == templateInfoToJsonObjectMap.size()) {
57 debugLogger.log("Deployment verify finished successfully");
59 errLogger.log("Deployment verify finished successfully");
60 String msg = "Deployment verify finished with errors, found only: " +
61 foundCount.get() + " of " + templateInfoToJsonObjectMap.size() + " vfcmts";
62 report.addErrorMessage(msg);
67 private void createNew(TemplateInfo templateInfo, JsonObject jsonObject) {
69 CreateVFCMTRequest createVFCMTRequest = new CreateVFCMTRequest();
70 createVFCMTRequest.setName(templateInfo.getName());
71 createVFCMTRequest.setDescription(templateInfo.getDescription());
72 createVFCMTRequest.setSubcategory(templateInfo.getSubCategory());
73 createVFCMTRequest.setCategory(templateInfo.getCategory());
74 ResourceDetailed vfcmt = dcaeRestClient.createResource(createVFCMTRequest);
76 jsonObject.addProperty("cid", vfcmt.getUuid());
78 saveAndCertify(jsonObject, vfcmt);
80 } catch (HttpServerErrorException e) {
81 String msg = FAILED_UPDATE_VFCMT + templateInfo.getName() + ", With general message: " + e.getMessage();
82 report.addErrorMessage(msg);
83 errLogger.log(msg + " " + e);
87 private void update(ResourceDetailed vfcmt, TemplateInfo templateInfo, JsonObject jsonObject) {
88 ResourceDetailed checkedoutVfcmt = vfcmt;
90 Boolean checkoutChecking = checkUserIfResourceCheckedOut(dcaeRestClient.getUserId(), vfcmt);
91 if (checkoutChecking != null && checkoutChecking) {
92 report.addErrorMessage(FAILED_UPDATE_VFCMT + vfcmt.getName() + ", cannot checkout vfcmt");
95 if (templateInfo.getUpdateIfExist()) {
96 if (checkoutChecking == null) {
97 checkedoutVfcmt = dcaeRestClient.checkoutVfcmt(vfcmt.getUuid());
99 if (checkedoutVfcmt != null) {
100 checkedoutVfcmt.setSubCategory(templateInfo.getSubCategory());
101 checkedoutVfcmt.setCategory(templateInfo.getCategory());
102 checkedoutVfcmt.setDescription(templateInfo.getDescription());
103 dcaeRestClient.updateResource(checkedoutVfcmt);
104 saveAndCertify(jsonObject, checkedoutVfcmt);
107 report.addNotUpdatedMessage("vfcmt: " + vfcmt.getName() + " found, but didn't update.");
109 } catch (HttpServerErrorException e) {
110 String msg = FAILED_UPDATE_VFCMT + vfcmt.getName() + ", With general message: " + e.getMessage();
111 report.addErrorMessage(msg);
112 errLogger.log( msg + " " + e);
116 private void saveAndCertify(JsonObject jsonObject, ResourceDetailed checkedoutVfcmt) {
117 if (saveCompositionAndCertify(checkedoutVfcmt, jsonObject)) {
118 report.addUpdatedMessage("vfcmt: " + checkedoutVfcmt.getName() + " updated successfully");
120 report.addErrorMessage("VFCMT " + checkedoutVfcmt.getName() + " failed to update");
124 private boolean saveCompositionAndCertify(ResourceDetailed vfcmt, JsonObject jsonObject) {
125 if (vfcmt.getUuid() == null) {
129 debugLogger.log("Saving cdump of: " + vfcmt.getName() + " vfcmt");
130 debugLogger.log(jsonObject.toString());
132 String responseEntity = dcaeRestClient.saveComposition(vfcmt.getUuid(), jsonObject.toString());
133 if (responseEntity.equalsIgnoreCase(FAILED)) {
134 String msg = "Failed saving vfcmt: " + vfcmt.getName();
135 report.addErrorMessage(msg);
139 dcaeRestClient.certifyVfcmt(vfcmt.getUuid());
143 private Boolean checkUserIfResourceCheckedOut(String userId, ResourceDetailed asset) {
144 if (DcaeBeConstants.LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT == DcaeBeConstants.LifecycleStateEnum.findState(asset.getLifecycleState())) {
145 String lastUpdaterUserId = asset.getLastUpdaterUserId();
146 if (lastUpdaterUserId != null && !lastUpdaterUserId.equals(userId)) {
147 String msg = "User conflicts. Operation not allowed for user "+userId+" on resource checked out by "+lastUpdaterUserId;
148 report.addErrorMessage(msg);