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 utilities.IDcaeRestClient;
8 import utilities.IReport;
10 import java.util.ArrayList;
11 import java.util.List;
13 import java.util.concurrent.atomic.AtomicInteger;
16 public class DeployTemplate {
17 private static final String FAILED_UPDATE_VFCMT = "Failed update vfcmt: ";
18 private static final String FAILED = "failed";
19 private final IReport report;
20 private final IDcaeRestClient dcaeRestClient;
21 private LoggerError errLogger = LoggerError.getInstance();
22 private LoggerDebug debugLogger = LoggerDebug.getInstance();
24 DeployTemplate(IReport report, IDcaeRestClient dcaeRestClient) {
27 this.dcaeRestClient = dcaeRestClient;
30 public void deploy(Map<TemplateInfo, JsonObject> templateInfoToJsonObjectMap) {
31 ArrayList<ResourceDetailed> vfcmtList = new ArrayList<>();
32 List<ResourceDetailed> regularVfcmtList = dcaeRestClient.getAllVfcmts();
33 if (regularVfcmtList != null) {
34 vfcmtList.addAll(regularVfcmtList);
36 List<ResourceDetailed> baseVfcmtList = dcaeRestClient.getAllBaseVfcmts();
37 if (baseVfcmtList != null) {
38 vfcmtList.addAll(baseVfcmtList);
41 List<TemplateInfo> updatedTemplateInfos = new ArrayList<>();
42 vfcmtList.forEach(vfcmt ->
43 templateInfoToJsonObjectMap.keySet().stream().filter(templateInfo -> templateInfo.getName().equalsIgnoreCase(vfcmt.getName())).forEach(templateInfo -> {
44 update(vfcmt, templateInfo, templateInfoToJsonObjectMap.get(templateInfo));
45 updatedTemplateInfos.add(templateInfo);
47 templateInfoToJsonObjectMap.keySet().stream()
48 .filter(templateInfo -> !updatedTemplateInfos.contains(templateInfo))
49 .forEach(templateInfo -> createNew(templateInfo, templateInfoToJsonObjectMap.get(templateInfo)));
51 verify(templateInfoToJsonObjectMap);
54 private void verify(Map<TemplateInfo, JsonObject> templateInfoToJsonObjectMap) {
55 AtomicInteger foundCount = new AtomicInteger();
56 debugLogger.log("Starting verify deployment");
57 ArrayList<ResourceDetailed> vfcmtList = new ArrayList<>();
58 List<ResourceDetailed> regularVfcmtList = dcaeRestClient.getAllVfcmts();
59 if (regularVfcmtList != null) {
60 vfcmtList.addAll(regularVfcmtList);
62 List<ResourceDetailed> baseVfcmtList = dcaeRestClient.getAllBaseVfcmts();
63 if (baseVfcmtList != null) {
64 vfcmtList.addAll(baseVfcmtList);
67 templateInfoToJsonObjectMap.keySet()
68 .forEach(templateInfo -> vfcmtList.stream()
69 .filter(vfcmt -> vfcmt.getName().equalsIgnoreCase(templateInfo.getName()))
70 .forEach(vfcmt -> foundCount.getAndIncrement()));
71 if (foundCount.get() == templateInfoToJsonObjectMap.size()) {
72 debugLogger.log("Deployment verify finished successfully");
74 errLogger.log("Deployment verify finished successfully");
75 String msg = "Deployment verify finished with errors, found only: " +
76 foundCount.get() + " of " + templateInfoToJsonObjectMap.size() + " vfcmts";
77 report.addErrorMessage(msg);
82 private void createNew(TemplateInfo templateInfo, JsonObject jsonObject) {
84 CreateVFCMTRequest createVFCMTRequest = new CreateVFCMTRequest();
85 createVFCMTRequest.setName(templateInfo.getName());
86 createVFCMTRequest.setDescription(templateInfo.getDescription());
87 createVFCMTRequest.setSubcategory(templateInfo.getSubCategory());
88 createVFCMTRequest.setCategory(templateInfo.getCategory());
89 ResourceDetailed vfcmt = dcaeRestClient.createResource(createVFCMTRequest);
91 saveAndCertify(jsonObject, vfcmt);
93 } catch (Exception e) {
94 String msg = FAILED_UPDATE_VFCMT + templateInfo.getName() + ", With general message: " + e.getMessage();
95 report.addErrorMessage(msg);
96 errLogger.log(msg + " " + e);
97 report.setStatusCode(2);
101 private void update(ResourceDetailed vfcmt, TemplateInfo templateInfo, JsonObject jsonObject) {
102 ResourceDetailed checkedoutVfcmt = vfcmt;
104 boolean vfcmtIsCheckedOut = isCheckedOut(vfcmt);
105 if (vfcmtIsCheckedOut && differentUserCannotCheckout(dcaeRestClient.getUserId(), vfcmt)){
106 report.addErrorMessage(FAILED_UPDATE_VFCMT + vfcmt.getName() + ", cannot checkout vfcmt");
109 if (templateInfo.getUpdateIfExist()) {
110 if (!vfcmtIsCheckedOut) {
111 checkedoutVfcmt = dcaeRestClient.checkoutVfcmt(vfcmt.getUuid());
113 if (checkedoutVfcmt != null) {
114 checkedoutVfcmt.setSubCategory(templateInfo.getSubCategory());
115 checkedoutVfcmt.setCategory(templateInfo.getCategory());
116 checkedoutVfcmt.setDescription(templateInfo.getDescription());
117 dcaeRestClient.updateResource(checkedoutVfcmt);
118 saveAndCertify(jsonObject, checkedoutVfcmt);
121 report.addNotUpdatedMessage("vfcmt: " + vfcmt.getName() + " found, but didn't update.");
123 } catch (Exception e) {
124 String msg = FAILED_UPDATE_VFCMT + vfcmt.getName() + ", With general message: " + e.getMessage();
125 report.addErrorMessage(msg);
126 errLogger.log( msg + " " + e);
127 report.setStatusCode(2);
131 private void saveAndCertify(JsonObject jsonObject, ResourceDetailed checkedoutVfcmt) {
132 jsonObject.addProperty("cid", checkedoutVfcmt.getUuid());
133 if (saveCompositionAndCertify(checkedoutVfcmt, jsonObject)) {
134 report.addUpdatedMessage("vfcmt: " + checkedoutVfcmt.getName() + " updated successfully");
136 report.addErrorMessage("VFCMT " + checkedoutVfcmt.getName() + " failed to update");
140 private boolean saveCompositionAndCertify(ResourceDetailed vfcmt, JsonObject jsonObject) {
141 if (vfcmt.getUuid() == null) {
145 debugLogger.log("Saving cdump of: " + vfcmt.getName() + " vfcmt");
146 debugLogger.log(jsonObject.toString());
148 String responseEntity = dcaeRestClient.saveComposition(vfcmt.getUuid(), jsonObject.toString());
149 if (responseEntity.equalsIgnoreCase(FAILED)) {
150 String msg = "Failed saving vfcmt: " + vfcmt.getName();
151 report.addErrorMessage(msg);
155 dcaeRestClient.certifyVfcmt(vfcmt.getUuid());
159 private boolean isCheckedOut(ResourceDetailed asset) {
160 return DcaeBeConstants.LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT == DcaeBeConstants.LifecycleStateEnum.findState(asset.getLifecycleState());
163 private Boolean differentUserCannotCheckout(String userId, ResourceDetailed asset) {
164 String lastUpdaterUserId = asset.getLastUpdaterUserId();
165 if (lastUpdaterUserId != null && !lastUpdaterUserId.equals(userId)) {
166 String msg = "User conflicts. Operation not allowed for user "+userId+" on resource checked out by "+lastUpdaterUserId;
167 report.addErrorMessage(msg);