diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NovaServerGroupResourceValidator.java')
-rw-r--r-- | openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NovaServerGroupResourceValidator.java | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NovaServerGroupResourceValidator.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NovaServerGroupResourceValidator.java new file mode 100644 index 0000000000..f56d941ba4 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/NovaServerGroupResourceValidator.java @@ -0,0 +1,128 @@ +package org.openecomp.sdc.validation.impl.validators.heatresource; + +import org.apache.commons.collections4.MapUtils; +import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder; +import org.openecomp.core.validation.types.GlobalValidationContext; +import org.openecomp.sdc.common.errors.Messages; +import org.openecomp.sdc.datatypes.error.ErrorLevel; +import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes; +import org.openecomp.sdc.heat.datatypes.model.PolicyTypes; +import org.openecomp.sdc.heat.datatypes.model.Resource; +import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage; +import org.openecomp.sdc.logging.types.LoggerErrorDescription; +import org.openecomp.sdc.logging.types.LoggerTragetServiceName; +import org.openecomp.sdc.validation.ResourceValidator; +import org.openecomp.sdc.validation.ValidationContext; +import org.openecomp.sdc.validation.type.HeatResourceValidationContext; +import org.openecomp.sdc.validation.type.ValidatorConstants; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * Created by TALIO on 2/22/2017. + */ +public class NovaServerGroupResourceValidator implements ResourceValidator { + private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage(); + + public void validate(String fileName, Map.Entry<String, Resource> resourceEntry, + GlobalValidationContext globalContext, ValidationContext validationContext) { + validateNovaServerGroupPolicy(fileName, resourceEntry, globalContext); + validateServerGroupIsUsed + (fileName, resourceEntry, globalContext, (HeatResourceValidationContext) validationContext); + } + + @SuppressWarnings("unchecked") + private static void validateNovaServerGroupPolicy(String fileName, + Map.Entry<String, Resource> resourceEntry, + GlobalValidationContext globalContext) { + + mdcDataDebugMessage.debugEntryMessage("file", fileName); + + Resource resource = resourceEntry.getValue(); + Object policies = + resource.getProperties() == null ? null : resource.getProperties().get("policies"); + + if (Objects.nonNull(policies) && policies instanceof List) { + List<Object> policiesList = (List<Object>) policies; + if (policiesList.size() == 1) { + Object policy = policiesList.get(0); + if (!isGivenPolicyValid(policy)) { + globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder + .getErrorWithParameters(Messages.WRONG_POLICY_IN_SERVER_GROUP.getErrorMessage(), + resourceEntry.getKey()), + LoggerTragetServiceName.VALIDATE_NOVA_SEVER_GROUP_POLICY, + LoggerErrorDescription.WRONG_POLICY_SERVER_GROUP); + } + } else { + globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder + .getErrorWithParameters(Messages.WRONG_POLICY_IN_SERVER_GROUP.getErrorMessage(), + resourceEntry.getKey()), + LoggerTragetServiceName.VALIDATE_NOVA_SEVER_GROUP_POLICY, + LoggerErrorDescription.WRONG_POLICY_SERVER_GROUP); + } + } + + mdcDataDebugMessage.debugExitMessage("file", fileName); + } + + private static boolean isGivenPolicyValid(Object policy) { + if (policy instanceof Map) { + return true; + } + if (policy instanceof String) { + return PolicyTypes.isGivenPolicyValid((String) policy); + } + return false; + } + + public void validateServerGroupIsUsed(String fileName, + Map.Entry<String, Resource> resourceEntry, + GlobalValidationContext globalContext, + HeatResourceValidationContext validationContext) { + + Map<String, Map<String, List<String>>> pointedServerGroups = + validationContext.getFileLevelResourceDependencies().get(HeatResourcesTypes + .NOVA_SERVER_GROUP_RESOURCE_TYPE.getHeatResource()); + + if (MapUtils.isEmpty(pointedServerGroups)) { + globalContext + .addMessage( + fileName, + ErrorLevel.WARNING, + ErrorMessagesFormatBuilder + .getErrorWithParameters( + Messages.RESOURCE_NOT_IN_USE.getErrorMessage(), + ValidatorConstants.Server_Group, resourceEntry.getKey()), + LoggerTragetServiceName.VALIDATE_ALL_SERVER_GROUP_OR_SECURITY_GROUP_IN_USE, + LoggerErrorDescription.SERVER_GROUP_SECURITY_GROUP_NOT_IN_USE); + return; + } + + handleServerGroupReferences(fileName, resourceEntry, pointedServerGroups, globalContext); + + + } + + private void handleServerGroupReferences(String fileName, Map.Entry<String, Resource> + resourceEntry, Map<String, Map<String, List<String>>> pointedServerGroups, + GlobalValidationContext globalContext) { + Map<String, List<String>> resourcesPointingToCurrServerGroup = + pointedServerGroups.get(resourceEntry.getKey()); + + if (MapUtils.isEmpty(resourcesPointingToCurrServerGroup)) { + globalContext + .addMessage( + fileName, + ErrorLevel.WARNING, + ErrorMessagesFormatBuilder + .getErrorWithParameters( + Messages.RESOURCE_NOT_IN_USE.getErrorMessage(), + ValidatorConstants.Server_Group, resourceEntry.getKey()), + LoggerTragetServiceName.VALIDATE_ALL_SERVER_GROUP_OR_SECURITY_GROUP_IN_USE, + LoggerErrorDescription.SERVER_GROUP_SECURITY_GROUP_NOT_IN_USE); + } + + } +} |