1 package org.openecomp.sdc.validation.impl.validators.heatresource;
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;
24 * Created by TALIO on 2/22/2017.
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");
31 public void validate(String fileName, Map.Entry<String, Resource> resourceEntry,
32 GlobalValidationContext globalContext, ValidationContext validationContext) {
34 HeatResourceValidationContext heatResourceValidationContext = (HeatResourceValidationContext)
36 validateNovaServerResourceType
37 (fileName, resourceEntry, heatResourceValidationContext, globalContext);
40 private static void validateNovaServerResourceType(String fileName,
41 Map.Entry<String, Resource> resourceEntry,
42 HeatResourceValidationContext heatResourceValidationContext,
43 GlobalValidationContext globalContext) {
45 mdcDataDebugMessage.debugEntryMessage("file", fileName);
47 validateAssignedValueForImageOrFlavorFromNova(fileName, resourceEntry, globalContext);
48 validateAllServerGroupsPointedByServerExistAndDefined
49 (fileName, resourceEntry,
50 heatResourceValidationContext.getHeatOrchestrationTemplate(), globalContext);
52 mdcDataDebugMessage.debugExitMessage("file", fileName);
56 private static void validateAssignedValueForImageOrFlavorFromNova(String fileName,
57 Map.Entry<String, Resource>
59 GlobalValidationContext
62 mdcDataDebugMessage.debugEntryMessage("file", fileName);
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);
75 mdcDataDebugMessage.debugExitMessage("file", fileName);
78 @SuppressWarnings("unchecked")
79 private static void validateAllServerGroupsPointedByServerExistAndDefined(String fileName,
80 Map.Entry<String, Resource> resourceEntry,
81 HeatOrchestrationTemplate heatOrchestrationTemplate,
82 GlobalValidationContext globalContext) {
84 mdcDataDebugMessage.debugEntryMessage("file", fileName);
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());
92 if (MapUtils.isEmpty(schedulerHintsMap)) {
96 if (schedulerHintsMap != null) {
97 for (Object serverGroupValue : schedulerHintsMap.values()) {
98 if (!(serverGroupValue instanceof Map)) {
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);
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);
119 mdcDataDebugMessage.debugExitMessage("file", fileName);