1 package org.openecomp.sdc.validation.impl.validators.namingconvention;
3 import org.apache.commons.collections4.MapUtils;
4 import org.apache.commons.lang3.tuple.ImmutablePair;
5 import org.apache.commons.lang3.tuple.Pair;
6 import org.openecomp.core.validation.ErrorMessageCode;
7 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
8 import org.openecomp.core.validation.types.GlobalValidationContext;
9 import org.openecomp.sdc.common.errors.Messages;
10 import org.openecomp.sdc.datatypes.error.ErrorLevel;
11 import org.openecomp.sdc.heat.datatypes.DefinedHeatParameterTypes;
12 import org.openecomp.sdc.heat.datatypes.model.Environment;
13 import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate;
14 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
15 import org.openecomp.sdc.heat.datatypes.model.Resource;
16 import org.openecomp.sdc.heat.datatypes.model.ResourceReferenceFunctions;
17 import org.openecomp.sdc.heat.services.HeatStructureUtil;
18 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
19 import org.openecomp.sdc.logging.types.LoggerErrorDescription;
20 import org.openecomp.sdc.logging.types.LoggerTragetServiceName;
21 import org.openecomp.sdc.validation.ResourceValidator;
22 import org.openecomp.sdc.validation.ValidationContext;
23 import org.openecomp.sdc.validation.type.NamingConventionValidationContext;
24 import org.openecomp.sdc.validation.util.ValidationUtil;
26 import java.util.ArrayList;
27 import java.util.Arrays;
28 import java.util.Collection;
29 import java.util.Comparator;
30 import java.util.HashMap;
31 import java.util.LinkedList;
32 import java.util.List;
34 import java.util.Objects;
35 import java.util.TreeMap;
37 import static java.util.Objects.nonNull;
39 public class NovaServerNamingConventionGuideLineValidator implements ResourceValidator {
40 private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
41 private static final ErrorMessageCode ERROR_CODE_NNS1 = new ErrorMessageCode("NNS1");
42 private static final ErrorMessageCode ERROR_CODE_NNS2 = new ErrorMessageCode("NNS2");
43 private static final ErrorMessageCode ERROR_CODE_NNS3 = new ErrorMessageCode("NNS3");
44 private static final ErrorMessageCode ERROR_CODE_NNS4 = new ErrorMessageCode("NNS4");
45 private static final ErrorMessageCode ERROR_CODE_NNS5 = new ErrorMessageCode("NNS5");
46 private static final ErrorMessageCode ERROR_CODE_NNS6 = new ErrorMessageCode("NNS6");
47 private static final ErrorMessageCode ERROR_CODE_NNS7 = new ErrorMessageCode("NNS7");
48 private static final ErrorMessageCode ERROR_CODE_NNS8 = new ErrorMessageCode("NNS8");
49 private static final ErrorMessageCode ERROR_CODE_NNS9 = new ErrorMessageCode("NNS9");
50 private static final ErrorMessageCode ERROR_CODE_NNS10 = new ErrorMessageCode("NNS10");
51 private static final ErrorMessageCode ERROR_CODE_NNS11 = new ErrorMessageCode("NNS11");
52 private static final ErrorMessageCode ERROR_CODE_NNS12 = new ErrorMessageCode("NNS12");
53 private static final ErrorMessageCode ERROR_CODE_NNS13 = new ErrorMessageCode("NNS13");
54 private static final ErrorMessageCode ERROR_CODE_NNS14 = new ErrorMessageCode("NNS14");
57 public void validate(String fileName, Map.Entry<String, Resource> resourceEntry,
58 GlobalValidationContext globalContext, ValidationContext validationContext) {
60 NamingConventionValidationContext namingConventionValidationContext =
61 (NamingConventionValidationContext)validationContext;
62 validateHeatNovaResource(fileName, namingConventionValidationContext.getEnvFileName(),
63 namingConventionValidationContext.getHeatOrchestrationTemplate(),
67 private void validateHeatNovaResource(String fileName, String envFileName,
68 HeatOrchestrationTemplate heatOrchestrationTemplate,
69 GlobalValidationContext globalContext) {
72 mdcDataDebugMessage.debugEntryMessage("file", fileName);
74 Map<String, String> uniqueResourcePortNetworkRole = new HashMap<>();
75 //if no resources exist return
76 if (MapUtils.isEmpty(heatOrchestrationTemplate.getResources())) {
80 heatOrchestrationTemplate
84 .filter(entry -> entry.getValue().getType()
85 .equals(HeatResourcesTypes.NOVA_SERVER_RESOURCE_TYPE.getHeatResource()))
86 .forEach( entry -> validateNovaServerResourceType(entry.getKey(), fileName, envFileName,
87 entry, uniqueResourcePortNetworkRole, heatOrchestrationTemplate, globalContext));
89 mdcDataDebugMessage.debugExitMessage("file", fileName);
92 private void validateNovaServerResourceType(String resourceId, String fileName,
94 Map.Entry<String, Resource> resourceEntry,
95 Map<String, String> uniqueResourcePortNetworkRole,
96 HeatOrchestrationTemplate heatOrchestrationTemplate,
97 GlobalValidationContext globalContext) {
99 mdcDataDebugMessage.debugEntryMessage("file", fileName);
101 validateNovaServerResourceMetaData(fileName, resourceId,
102 heatOrchestrationTemplate.getResources().get(resourceId), globalContext);
103 validateNovaServerResourceNetworkUniqueRole(fileName, resourceId, uniqueResourcePortNetworkRole,
104 heatOrchestrationTemplate, globalContext);
105 validateAvailabilityZoneName(fileName, resourceEntry, globalContext);
106 validateNovaServerNameImageAndFlavor(fileName, envFileName, resourceEntry, globalContext);
108 mdcDataDebugMessage.debugExitMessage("file", fileName);
111 @SuppressWarnings("unchecked")
112 private void validateNovaServerResourceMetaData(String fileName, String resourceId,
114 GlobalValidationContext globalValidationContext) {
116 mdcDataDebugMessage.debugEntryMessage("file", fileName);
118 Map<String, Object> novaServerProp = resource.getProperties();
119 Object novaServerPropMetadata;
120 if (MapUtils.isNotEmpty(novaServerProp)) {
121 novaServerPropMetadata = novaServerProp.get("metadata");
122 if (novaServerPropMetadata == null) {
123 globalValidationContext.addMessage(
126 ErrorMessagesFormatBuilder
127 .getErrorWithParameters(
128 ERROR_CODE_NNS1, Messages.MISSING_NOVA_SERVER_METADATA.getErrorMessage(),
130 LoggerTragetServiceName.VALIDATE_NOVA_META_DATA_NAME,
131 LoggerErrorDescription.MISSING_NOVA_PROPERTIES);
132 } else if (novaServerPropMetadata instanceof Map) {
133 TreeMap<String, Object> propertyMap = new TreeMap(new Comparator<String>() {
136 public int compare(String o1, String o2) {
137 return o1.compareToIgnoreCase(o2);
141 public boolean equals(Object obj) {
146 public int hashCode() {
147 return super.hashCode();
150 propertyMap.putAll((Map) novaServerPropMetadata);
151 if (!propertyMap.containsKey("vf_module_id")) {
152 globalValidationContext.addMessage(
155 ErrorMessagesFormatBuilder.getErrorWithParameters(
156 ERROR_CODE_NNS2, Messages.MISSING_NOVA_SERVER_VF_MODULE_ID.getErrorMessage(),
158 LoggerTragetServiceName.VALIDATE_NOVA_META_DATA_NAME,
159 LoggerErrorDescription.MISSING_NOVA_PROPERTIES);
161 if (!propertyMap.containsKey("vnf_id")) {
162 globalValidationContext.addMessage(
163 fileName, ErrorLevel.WARNING,
164 ErrorMessagesFormatBuilder
165 .getErrorWithParameters(
166 ERROR_CODE_NNS3, Messages.MISSING_NOVA_SERVER_VNF_ID.getErrorMessage(),
168 LoggerTragetServiceName.VALIDATE_NOVA_META_DATA_NAME,
169 LoggerErrorDescription.MISSING_NOVA_PROPERTIES);
174 mdcDataDebugMessage.debugExitMessage("file", fileName);
177 private void validateNovaServerResourceNetworkUniqueRole(String fileName, String resourceId,
178 Map<String, String> uniqueResourcePortNetworkRole,
179 HeatOrchestrationTemplate heatOrchestrationTemplate,
180 GlobalValidationContext globalValidationContext) {
183 mdcDataDebugMessage.debugEntryMessage("file", fileName);
188 Object propertyNetworkValue =
189 heatOrchestrationTemplate.getResources().get(resourceId).getProperties().get("networks");
190 if (propertyNetworkValue != null && propertyNetworkValue instanceof List) {
191 List<String> portResourceIdList =
192 getNovaNetworkPortResourceList(fileName, (List) propertyNetworkValue,
193 globalValidationContext);
194 for (String portResourceId : portResourceIdList) {
195 Resource portResource = heatOrchestrationTemplate.getResources().get(portResourceId);
196 if (portResource != null && portResource.getType()
197 .equals(HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource())) {
199 getPortNetwork(fileName, resourceId, portResource, globalValidationContext);
200 if (Objects.nonNull(portNetwork)) {
201 network = portNetwork.get("get_param");
202 if (Objects.nonNull(network)) {
203 if (network instanceof String ){
204 role = getNetworkRole((String)network);
205 }else if (network instanceof List){
206 role = getNetworkRole((String)((List) network).get(0));
208 if (role != null && uniqueResourcePortNetworkRole.containsKey(role)) {
209 globalValidationContext.addMessage(
212 ErrorMessagesFormatBuilder.getErrorWithParameters(
213 ERROR_CODE_NNS12, Messages.RESOURCE_CONNECTED_TO_TWO_EXTERNAL_NETWORKS_WITH_SAME_ROLE
214 .getErrorMessage(), resourceId, role),
215 LoggerTragetServiceName.VALIDATE_RESOURCE_NETWORK_UNIQUE_ROLW,
216 LoggerErrorDescription.RESOURCE_UNIQUE_NETWORK_ROLE);
218 uniqueResourcePortNetworkRole.put(role, portResourceId);
226 mdcDataDebugMessage.debugExitMessage("file", fileName);
229 private List<String> getNovaNetworkPortResourceList(String filename, List propertyNetworkValue,
230 GlobalValidationContext globalContext) {
231 globalContext.setMessageCode(ERROR_CODE_NNS14);
232 List<String> portResourceIdList = new ArrayList<>();
233 for (Object propValue : propertyNetworkValue) {
234 Object portPropValue = ((Map) propValue).get("port");
235 Collection<String> portResourceIds = HeatStructureUtil
236 .getReferencedValuesByFunctionName(filename, "get_resource", portPropValue,
238 if (portResourceIds != null) {
239 portResourceIdList.addAll(portResourceIds);
243 return portResourceIdList;
246 private String getNetworkRole(String network) {
247 if (network == null) {
250 if (network.contains("_net_id")) {
251 return network.substring(0, network.indexOf("_net_id"));
252 } else if (network.contains("_net_name")) {
253 return network.substring(0, network.indexOf("_net_name"));
254 } else if (network.contains("_net_fqdn")) {
255 return network.substring(0, network.indexOf("_net_fqdn"));
260 private Map getPortNetwork(String fileName, String resourceId, Resource portResource,
261 GlobalValidationContext globalValidationContext) {
262 Object portNetwork = portResource.getProperties().get("network_id");
263 if (portNetwork == null) {
264 portNetwork = portResource.getProperties().get("network");
266 if (!(portNetwork instanceof Map)) {
267 globalValidationContext.addMessage(
270 ErrorMessagesFormatBuilder
271 .getErrorWithParameters(
272 ERROR_CODE_NNS4, Messages.MISSING_GET_PARAM.getErrorMessage(),
273 "network or network_id", resourceId),
274 LoggerTragetServiceName.VALIDATE_RESOURCE_NETWORK_UNIQUE_ROLW,
275 LoggerErrorDescription.MISSING_GET_PARAM);
278 return (Map) portNetwork;
281 private void validateAvailabilityZoneName(String fileName,
282 Map.Entry<String, Resource> resourceEntry,
283 GlobalValidationContext globalContext) {
286 mdcDataDebugMessage.debugEntryMessage("file", fileName);
288 String[] regexList = new String[]{"availability_zone_(\\d+)"};
290 if (MapUtils.isEmpty(resourceEntry.getValue().getProperties())) {
291 mdcDataDebugMessage.debugExitMessage("file", fileName);
295 Object availabilityZoneMap =
296 resourceEntry.getValue().getProperties().containsKey("availability_zone") ? resourceEntry
297 .getValue().getProperties().get("availability_zone") : null;
299 if (nonNull(availabilityZoneMap)) {
300 if (availabilityZoneMap instanceof Map) {
301 String availabilityZoneName = ValidationUtil.getWantedNameFromPropertyValueGetParam
302 (availabilityZoneMap);
304 if (availabilityZoneName != null) {
305 if (!ValidationUtil.evalPattern(availabilityZoneName, regexList)) {
306 globalContext.addMessage(
308 ErrorLevel.WARNING, ErrorMessagesFormatBuilder.getErrorWithParameters(
309 ERROR_CODE_NNS5, Messages.PARAMETER_NAME_NOT_ALIGNED_WITH_GUIDELINES.getErrorMessage(),
310 ValidationUtil.getMessagePartAccordingToResourceType(resourceEntry),
311 "Availability Zone", availabilityZoneName, resourceEntry.getKey()),
312 LoggerTragetServiceName.VALIDATE_AVAILABILITY_ZONE_NAME,
313 LoggerErrorDescription.NAME_NOT_ALIGNED_WITH_GUIDELINES);
317 globalContext.addMessage(
319 ErrorLevel.WARNING, ErrorMessagesFormatBuilder
320 .getErrorWithParameters(
321 ERROR_CODE_NNS6, Messages.MISSING_GET_PARAM.getErrorMessage(),
322 "availability_zone", resourceEntry.getKey()),
323 LoggerTragetServiceName.VALIDATE_AVAILABILITY_ZONE_NAME,
324 LoggerErrorDescription.MISSING_GET_PARAM);
327 mdcDataDebugMessage.debugExitMessage("file", fileName);
330 private void validateNovaServerNameImageAndFlavor(String fileName, String envFileName,
331 Map.Entry<String, Resource> resourceEntry,
332 GlobalValidationContext globalContext) {
334 mdcDataDebugMessage.debugEntryMessage("file", fileName);
337 validateNovaServerNamingConvention(fileName, envFileName, resourceEntry, globalContext);
338 Map<String, String> legalNovaNamingConventionMap =
339 validateImageAndFlavorFromNovaServer(fileName, resourceEntry, globalContext);
341 if (Objects.nonNull(novaName)) {
342 legalNovaNamingConventionMap.put("name", novaName);
345 if (legalNovaNamingConventionMap.keySet().size() > 1) {
346 validateNovaServerNameImageAndFlavorSync(fileName, resourceEntry,
347 legalNovaNamingConventionMap, globalContext);
350 mdcDataDebugMessage.debugExitMessage("file", fileName);
353 private String validateNovaServerNamingConvention(String fileName, String envFileName,
354 Map.Entry<String, Resource> resourceEntry,
355 GlobalValidationContext globalContext) {
357 mdcDataDebugMessage.debugEntryMessage("file", fileName);
359 if (MapUtils.isEmpty(resourceEntry.getValue().getProperties())) {
360 mdcDataDebugMessage.debugExitMessage("file", fileName);
364 mdcDataDebugMessage.debugExitMessage("file", fileName);
365 return checkIfNovaNameByGuidelines(fileName, envFileName, resourceEntry, globalContext);
368 private Map<String, String> validateImageAndFlavorFromNovaServer(String fileName,
369 Map.Entry<String, Resource> resourceEntry,
370 GlobalValidationContext globalContext) {
372 mdcDataDebugMessage.debugEntryMessage("file", fileName);
374 if (MapUtils.isEmpty(resourceEntry.getValue().getProperties())) {
375 mdcDataDebugMessage.debugExitMessage("file", fileName);
379 Pair<String, String> imagePair = new ImmutablePair<>("image", ".*_image_name");
380 Pair<String, String> flavorPair = new ImmutablePair<>("flavor", ".*_flavor_name");
381 List<Pair<String, String>> imageFlavorPairs = Arrays.asList(imagePair, flavorPair);
382 Map<String, Object> propertiesMap = resourceEntry.getValue().getProperties();
383 Map<String, String> imageAndFlavorLegalNames = new HashMap<>();
385 for (Pair<String, String> imageOrFlavor : imageFlavorPairs) {
386 boolean isErrorInImageOrFlavor =
387 isErrorExistWhenValidatingImageOrFlavorNames(fileName, imageOrFlavor, resourceEntry,
388 propertiesMap, globalContext);
389 if (!isErrorInImageOrFlavor) {
390 Object nameValue = propertiesMap.get(imageOrFlavor.getKey()) == null ? null
391 : propertiesMap.get(imageOrFlavor.getKey());
392 String imageOrFlavorName = ValidationUtil.getWantedNameFromPropertyValueGetParam
394 imageAndFlavorLegalNames.put(imageOrFlavor.getKey(), imageOrFlavorName);
398 mdcDataDebugMessage.debugExitMessage("file", fileName);
399 return imageAndFlavorLegalNames;
402 private String checkIfNovaNameByGuidelines(String fileName, String envFileName,
403 Map.Entry<String, Resource> resourceEntry,
404 GlobalValidationContext globalContext) {
405 if (MapUtils.isEmpty(resourceEntry.getValue().getProperties())) {
408 Object novaNameGetParam = getNovaServerName(resourceEntry);
409 String novaName = null;
410 if (nonNull(novaNameGetParam)) {
412 checkNovaNameGetParamValueMap(fileName, novaNameGetParam, resourceEntry, globalContext);
413 checkIfNovaNameParameterInEnvIsStringOrList(fileName, envFileName, novaName, resourceEntry,
416 globalContext.addMessage(
418 ErrorLevel.WARNING, ErrorMessagesFormatBuilder
419 .getErrorWithParameters(
420 ERROR_CODE_NNS7, Messages.MISSING_GET_PARAM.getErrorMessage(),
421 "nova server name", resourceEntry.getKey()),
422 LoggerTragetServiceName.VALIDATE_NOVA_SERVER_NAME,
423 LoggerErrorDescription.MISSING_GET_PARAM);
429 private boolean isErrorExistWhenValidatingImageOrFlavorNames(String fileName,
430 Pair<String, String> propertyNameAndRegex,
431 Map.Entry<String, Resource> resourceEntry,
432 Map<String, Object> propertiesMap,
433 GlobalValidationContext globalContext) {
434 String propertyName = propertyNameAndRegex.getKey();
436 propertiesMap.get(propertyName) == null ? null : propertiesMap.get(propertyName);
437 String[] regexList = new String[]{propertyNameAndRegex.getValue()};
440 if (nonNull(nameValue)) {
441 if (nameValue instanceof Map) {
442 globalContext.setMessageCode(ERROR_CODE_NNS13);
443 if (ValidationUtil.validateMapPropertyValue(fileName, resourceEntry, globalContext,
445 nameValue, regexList)) {
449 globalContext.addMessage(
451 ErrorLevel.WARNING, ErrorMessagesFormatBuilder
452 .getErrorWithParameters(
453 ERROR_CODE_NNS8, Messages.MISSING_GET_PARAM.getErrorMessage(),
454 propertyName, resourceEntry.getKey()),
455 LoggerTragetServiceName.VALIDATE_IMAGE_AND_FLAVOR_NAME,
456 LoggerErrorDescription.MISSING_GET_PARAM);
465 private Object getNovaServerName(Map.Entry<String, Resource> resourceEntry) {
466 Object novaServerName = resourceEntry.getValue().getProperties().get("name");
468 if (nonNull(novaServerName)) {
469 if (novaServerName instanceof Map) {
470 novaNameMap = (Map) novaServerName;
471 return novaNameMap.get(ResourceReferenceFunctions.GET_PARAM.getFunction()) == null ? null
472 : novaNameMap.get(ResourceReferenceFunctions.GET_PARAM.getFunction());
478 @SuppressWarnings("unchecked")
479 private String checkNovaNameGetParamValueMap(String fileName, Object getParamValue,
480 Map.Entry<String, Resource> resourceEntry,
481 GlobalValidationContext globalContext) {
482 if (getParamValue instanceof List) {
483 List<Object> getParamNameList = (List) getParamValue;
484 String[] regexName = new String[]{".*_names"};
485 return isNovaNameAsListLegal(fileName, regexName, getParamNameList, resourceEntry,
487 } else if (getParamValue instanceof String) {
488 String[] regexName = new String[]{".*_name_(\\d+)"};
489 return isNovaNameAsStringLegal(fileName, (String) getParamValue, regexName, resourceEntry,
496 private void checkIfNovaNameParameterInEnvIsStringOrList(String fileName,
498 String novaServerName,
499 Map.Entry<String, Resource> resourceEntry,
500 GlobalValidationContext globalContext) {
501 if (nonNull(envFileName)) {
502 Environment environment = ValidationUtil.validateEnvContent(envFileName, globalContext);
504 if (environment != null && MapUtils.isNotEmpty(environment.getParameters())) {
505 Object novaServerNameEnvValue =
506 environment.getParameters().containsKey(novaServerName) ? environment.getParameters()
507 .get(novaServerName) : null;
508 if (Objects.nonNull(novaServerNameEnvValue)) {
509 if (!DefinedHeatParameterTypes
510 .isNovaServerEnvValueIsFromRightType(novaServerNameEnvValue)) {
511 globalContext.addMessage(
513 ErrorLevel.WARNING, ErrorMessagesFormatBuilder.getErrorWithParameters(
514 ERROR_CODE_NNS9, Messages.PARAMETER_NAME_NOT_ALIGNED_WITH_GUIDELINES.getErrorMessage(),
516 novaServerNameEnvValue.toString(), resourceEntry.getKey()),
517 LoggerTragetServiceName.VALIDATE_NOVA_SERVER_NAME,
518 LoggerErrorDescription.NAME_NOT_ALIGNED_WITH_GUIDELINES);
525 private String isNovaNameAsListLegal(String fileName,
527 List<Object> getParamNameList,
528 Map.Entry<String, Resource> resourceEntry,
529 GlobalValidationContext globalContext) {
531 if (getParamNameList.size() != 2 || !ValidationUtil.evalPattern(getParamNameList.get(0),
533 globalContext.addMessage(
536 ErrorMessagesFormatBuilder.getErrorWithParameters(
537 ERROR_CODE_NNS10, Messages.PARAMETER_NAME_NOT_ALIGNED_WITH_GUIDELINES.getErrorMessage(),
539 "name", getParamNameList.toString(), resourceEntry.getKey()),
540 LoggerTragetServiceName.VALIDATE_NOVA_SERVER_NAME,
541 LoggerErrorDescription.NAME_NOT_ALIGNED_WITH_GUIDELINES);
545 return (String) getParamNameList.get(0);
548 private String isNovaNameAsStringLegal(String fileName,
551 Map.Entry<String, Resource> resourceEntry,
552 GlobalValidationContext globalContext) {
553 if (!ValidationUtil.evalPattern(novaName, regexName)) {
554 globalContext.addMessage(
557 ErrorMessagesFormatBuilder.getErrorWithParameters(
558 ERROR_CODE_NNS10, Messages.PARAMETER_NAME_NOT_ALIGNED_WITH_GUIDELINES.getErrorMessage(),
560 "name", novaName, resourceEntry.getKey()),
561 LoggerTragetServiceName.VALIDATE_NOVA_SERVER_NAME,
562 LoggerErrorDescription.NAME_NOT_ALIGNED_WITH_GUIDELINES);
568 private void validateNovaServerNameImageAndFlavorSync(String fileName,
569 Map.Entry<String, Resource> resourceEntry,
570 Map<String, String> legalNovaNamingConventionNames,
571 GlobalValidationContext globalContext) {
573 mdcDataDebugMessage.debugEntryMessage("file", fileName);
575 List<String> vmNames = new LinkedList<>();
577 for (Map.Entry<String, String> nameEntry : legalNovaNamingConventionNames.entrySet()) {
578 vmNames.add(getVmName(nameEntry.getValue(), nameEntry.getKey()));
581 vmNames.removeIf(VMName -> VMName == null);
583 if (!isVmNameSync(vmNames)) {
584 globalContext.addMessage(
587 ErrorMessagesFormatBuilder.getErrorWithParameters(
588 ERROR_CODE_NNS11, Messages.NOVA_NAME_IMAGE_FLAVOR_NOT_CONSISTENT.getErrorMessage(),
589 resourceEntry.getKey()),
590 LoggerTragetServiceName.VALIDATE_IMAGE_AND_FLAVOR_NAME,
591 LoggerErrorDescription.NAME_NOT_ALIGNED_WITH_GUIDELINES);
593 mdcDataDebugMessage.debugExitMessage("file", fileName);
596 private String getVmName(String nameToGetVmNameFrom, String stringToGetIndexOf) {
598 nameToGetVmNameFrom == null ? -1 : nameToGetVmNameFrom.indexOf(stringToGetIndexOf);
599 String vmName = null;
600 if (nameToGetVmNameFrom != null) {
601 vmName = vmIndex < 0 ? null
602 : trimNonAlphaNumericCharactersFromEndOfString(nameToGetVmNameFrom.substring(0, vmIndex));
607 private boolean isVmNameSync(List<String> namesToCompare) {
608 int size = namesToCompare.size();
609 for (int i = 0; i < size - 1; i++) {
610 if (!namesToCompare.get(i).equals(namesToCompare.get(i + 1))) {
617 private String trimNonAlphaNumericCharactersFromEndOfString(String toTrim) {
618 int stringSize = toTrim.length();
619 int stringLength = stringSize - 1;
620 String[] regexList = new String[]{"[^a-zA-Z0-9]"};
622 while (stringLength >= 0) {
623 if (!ValidationUtil.evalPattern(String.valueOf(toTrim.charAt(stringLength)), regexList)) {
629 return toTrim.substring(0, stringLength + 1);