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