Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-sdc-validation-lib / openecomp-sdc-validation-impl / src / main / java / org / openecomp / sdc / validation / impl / validators / heatresource / NovaServerResourceValidator.java
1 package org.openecomp.sdc.validation.impl.validators.heatresource;
2
3 import org.apache.commons.collections4.MapUtils;
4 import org.openecomp.core.validation.ErrorMessageCode;
5 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
6 import org.openecomp.core.validation.types.GlobalValidationContext;
7 import org.openecomp.sdc.common.errors.Messages;
8 import org.openecomp.sdc.datatypes.error.ErrorLevel;
9 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
10 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
11 import org.openecomp.sdc.heat.datatypes.model.PropertiesMapKeyTypes;
12 import org.openecomp.sdc.heat.datatypes.model.Resource;
13 import org.openecomp.sdc.heat.datatypes.model.ResourceReferenceFunctions;
14 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
15 import org.openecomp.sdc.logging.types.LoggerErrorDescription;
16 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
17 import org.openecomp.sdc.validation.ResourceValidator;
18 import org.openecomp.sdc.validation.ValidationContext;
19 import org.openecomp.sdc.validation.type.HeatResourceValidationContext;
20
21 import java.util.Map;
22
23 /**
24  * Created by TALIO on 2/22/2017.
25  */
26 public class NovaServerResourceValidator implements ResourceValidator {
27   private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
28   private static final ErrorMessageCode ERROR_CODE_HNS1 = new ErrorMessageCode("HNS1");
29   private static final ErrorMessageCode ERROR_CODE_HNS2 = new ErrorMessageCode("HNS2");
30
31   public void validate(String fileName, Map.Entry<String, Resource> resourceEntry,
32                        GlobalValidationContext globalContext, ValidationContext validationContext) {
33
34     HeatResourceValidationContext heatResourceValidationContext = (HeatResourceValidationContext)
35             validationContext;
36     validateNovaServerResourceType
37             (fileName, resourceEntry, heatResourceValidationContext, globalContext);
38   }
39
40   private static void validateNovaServerResourceType(String fileName,
41                                                      Map.Entry<String, Resource> resourceEntry,
42                                                      HeatResourceValidationContext heatResourceValidationContext,
43                                                      GlobalValidationContext globalContext) {
44
45     mdcDataDebugMessage.debugEntryMessage("file", fileName);
46
47     validateAssignedValueForImageOrFlavorFromNova(fileName, resourceEntry, globalContext);
48     validateAllServerGroupsPointedByServerExistAndDefined
49             (fileName, resourceEntry,
50                     heatResourceValidationContext.getHeatOrchestrationTemplate(), globalContext);
51
52     mdcDataDebugMessage.debugExitMessage("file", fileName);
53
54   }
55
56   private static void validateAssignedValueForImageOrFlavorFromNova(String fileName,
57                                                                     Map.Entry<String, Resource>
58                                                                             resourceEntry,
59                                                                     GlobalValidationContext
60                                                                             globalContext) {
61
62     mdcDataDebugMessage.debugEntryMessage("file", fileName);
63
64     Resource resource = resourceEntry.getValue();
65     Map<String, Object> propertiesMap = resource.getProperties();
66     if (propertiesMap.get(PropertiesMapKeyTypes.IMAGE.getKeyMap()) == null
67             && propertiesMap.get(PropertiesMapKeyTypes.FLAVOR.getKeyMap()) == null) {
68       globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
69                       .getErrorWithParameters(ERROR_CODE_HNS1, Messages.MISSING_IMAGE_AND_FLAVOR.getErrorMessage(),
70                               resourceEntry.getKey()),
71               LoggerTragetServiceName.VALIDATE_ASSIGNED_VALUES_FOR_NOVA_IMAGE_FLAVOR,
72               LoggerErrorDescription.MISSING_NOVA_PROPERTIES);
73     }
74
75     mdcDataDebugMessage.debugExitMessage("file", fileName);
76   }
77
78   @SuppressWarnings("unchecked")
79   private static void validateAllServerGroupsPointedByServerExistAndDefined(String fileName,
80                                                                             Map.Entry<String, Resource> resourceEntry,
81                                                                             HeatOrchestrationTemplate heatOrchestrationTemplate,
82                                                                             GlobalValidationContext globalContext) {
83
84     mdcDataDebugMessage.debugEntryMessage("file", fileName);
85
86     Map<String, Resource> resourcesMap = heatOrchestrationTemplate.getResources();
87     Map<String, Object> resourceProperties = resourceEntry.getValue().getProperties();
88     Map<String, Object> schedulerHintsMap =
89             resourceProperties == null ? null : (Map<String, Object>) resourceProperties.get(
90                     ResourceReferenceFunctions.SCHEDULER_HINTS.getFunction());
91
92     if (MapUtils.isEmpty(schedulerHintsMap)) {
93       return;
94     }
95
96     if (schedulerHintsMap != null) {
97       for (Object serverGroupValue : schedulerHintsMap.values()) {
98         if (!(serverGroupValue instanceof Map)) {
99           continue;
100         }
101         Map<String, Object> currentServerMap = (Map<String, Object>) serverGroupValue;
102         String serverResourceName = (String) currentServerMap
103                 .get(ResourceReferenceFunctions.GET_RESOURCE.getFunction());
104         Resource serverResource =
105                 serverResourceName == null || resourcesMap == null ? null
106                         : resourcesMap.get(serverResourceName);
107
108         if (serverResource != null && !serverResource.getType()
109                 .equals(HeatResourcesTypes.NOVA_SERVER_GROUP_RESOURCE_TYPE.getHeatResource())) {
110           globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
111                           .getErrorWithParameters(ERROR_CODE_HNS2, Messages.SERVER_NOT_DEFINED_FROM_NOVA.getErrorMessage(),
112                                   serverResourceName, resourceEntry.getKey()),
113                   LoggerTragetServiceName.VALIDATE_SERVER_GROUP_EXISTENCE,
114                   LoggerErrorDescription.SERVER_NOT_DEFINED_NOVA);
115         }
116       }
117     }
118
119     mdcDataDebugMessage.debugExitMessage("file", fileName);
120   }
121
122 }