[SDC-29] Amdocs OnBoard 1707 initial commit.
[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.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     for (Object serverGroupValue : schedulerHintsMap.values()) {
94       if(!(serverGroupValue instanceof Map)){
95         continue;
96       }
97       Map<String, Object> currentServerMap = (Map<String, Object>) serverGroupValue;
98       String serverResourceName =
99           currentServerMap == null ? null : (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     mdcDataDebugMessage.debugExitMessage("file", fileName);
116   }
117
118 }