use of com.emc.storageos.customconfigcontroller.CustomConfigConstraint in project coprhd-controller by CoprHD.
the class CustomConfigHandler method getCustomConfigPreviewValue.
/**
* Uses the samples provided in the configuration item to generate a resolved
* name for a given mask, configuration and scope. This can be used to preview
* and validate a name mask prior to setting it.
*
* @param name the configuration type name
* @param value the name mask to be resolved.
* @param scope the scope to be used to for deciding which constraints to apply.
* @param variables a map of variable-name-to-variable-value. This map can contain
* a value for all or only some of the name mask variables, or it can be
* empty. Any missing variable will be replaced with the variable default.
* @return the resolved name.
* @throws CustomConfigControllerException for invalid input.
*/
public String getCustomConfigPreviewValue(String name, String value, StringMap scope, Map<String, String> variables) {
CustomConfigType item = getCustomConfigType(name);
Map<DataSourceVariable, Boolean> dsVariables = item.getDataSourceVariables();
DataSource sampleDatasource = null;
if (dsVariables != null && !dsVariables.isEmpty()) {
sampleDatasource = datasourceFactory.getSampleDataSource(name);
}
CustomConfigResolver resolver = configResolvers.get(item.getConfigType());
if (variables != null && !variables.isEmpty()) {
for (Map.Entry<String, String> entry : variables.entrySet()) {
sampleDatasource.addProperty(entry.getKey(), entry.getValue());
}
}
// validate the computed value
resolver.validate(item, scope, value);
// Resolve the config value
String computedName = resolver.resolve(item, scope, value, sampleDatasource);
// validate against the constraints
List<CustomConfigConstraint> constraints = item.getConstraints();
String systemType = CustomConfigConstants.DEFAULT_KEY;
if (scope != null) {
systemType = scope.get(CustomConfigConstants.SYSTEM_TYPE_SCOPE);
// host type scope is only available for Hitachi Host Mode Option
if (systemType == null) {
systemType = scope.get(CustomConfigConstants.HOST_TYPE_SCOPE);
}
}
for (CustomConfigConstraint constraint : constraints) {
constraint.validate(computedName, systemType);
}
return computedName;
}
use of com.emc.storageos.customconfigcontroller.CustomConfigConstraint in project coprhd-controller by CoprHD.
the class CustomConfigHandler method validate.
/**
* Performs the necessary checks to ensure the user-specified value for a
* configuration is valid.
* <ol>
* <li>if isCheckDuplicate is set to true, ensure that a user-created configuration does not already exist for this configuration type
* and scope</li>
* <li>check that a configuration type exists for the name</li>
* <li>check that the scope is supported based on the definition of the scope in the type of this configuration</li>
* <li>check that the value is of the right type and that it is compliant with the constraints defined for this configuration type</li>
* </ol>
*
* @param name the configuration type name
* @param scope the scope of the configuration item
* @param value the value of the configuration item in a string form
* @param isCheckDuplicate true when uniqueness check is requested
* @throws CustomConfigControllerException if any of the checks fail.
*/
public void validate(String name, StringMap scope, String value, boolean isCheckDuplicate) {
// check this is a supported config
CustomConfigType item = getCustomConfigType(name);
if (item == null) {
throw CustomConfigControllerException.exceptions.configTypeNotFound(name);
}
// if this is a create, check for duplicates and also validate the scope
if (isCheckDuplicate) {
CustomConfig config = getUserDefinedCustomConfig(constructConfigName(name, scope));
if (config != null && config.getScope().equals(scope)) {
throw CustomConfigControllerException.exceptions.customConfigAlreadyExists(config.getLabel());
}
// check this is a supported scope
for (String key : scope.keySet()) {
if (!item.getScope().containsKey(key)) {
throw CustomConfigControllerException.exceptions.scopeTypeNotSupported(key, name);
}
List<String> scopeVals = java.util.Arrays.asList(item.getScope().get(key).split(","));
if (!scopeVals.contains(scope.get(key))) {
throw CustomConfigControllerException.exceptions.scopeValueNotSupported(scope.get(key), key, name);
}
}
}
// this performs additional validations
value = getCustomConfigPreviewValue(name, value, scope, null);
// check the value against each constraint
for (CustomConfigConstraint constraint : item.getConstraints()) {
constraint.validate(value, scope.values().iterator().next());
}
}
use of com.emc.storageos.customconfigcontroller.CustomConfigConstraint in project coprhd-controller by CoprHD.
the class CustomConfigHandler method getComputedCustomConfigValue.
/**
* Gets the resolved custom name for a given CustomName configuration type
* name, a scope and the list of values specified in the data source.
*
* @param name the configuration type name
* @param scope the scope to be used to find the configuration value. See {@link #getCustomConfigValue(String, StringMap)} for details.
* @param dataSource the object containing the variable values
* to be used replaced in the CustomName mask.
* @return resolved custom name for a given CustomName configuration
*/
public String getComputedCustomConfigValue(String name, StringMap scope, DataSource dataSource) throws CustomConfigControllerException {
CustomConfigType item = getCustomConfigType(name);
String value = getCustomConfigValue(name, scope);
CustomConfigResolver resolver = configResolvers.get(item.getConfigType());
String result = resolver.resolve(item, scope, value, dataSource);
// Apply the constraints
List<CustomConfigConstraint> constraints = item.getConstraints();
String systemType = CustomConfigConstants.DEFAULT_KEY;
if (scope != null) {
systemType = scope.get(CustomConfigConstants.SYSTEM_TYPE_SCOPE);
// host type scope is only available for Hitachi Host Mode Option
if (systemType == null) {
systemType = scope.get(CustomConfigConstants.HOST_TYPE_SCOPE);
}
}
for (CustomConfigConstraint constraint : constraints) {
result = constraint.applyConstraint(result, systemType);
}
return result;
}
use of com.emc.storageos.customconfigcontroller.CustomConfigConstraint in project coprhd-controller by CoprHD.
the class CustomConfigService method getCustomConfigType.
/**
* Show config type.
*
* @brief Show config type details
* @return The config type data.
*/
@GET
@Path("/types/{config_name}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR })
public CustomConfigTypeRep getCustomConfigType(@PathParam("config_name") String configName) {
CustomConfigType item = customConfigHandler.getCustomConfigType(configName);
CustomConfigTypeRep result = new CustomConfigTypeRep();
if (item == null) {
log.info("No config type found for :", configName);
throw APIException.badRequests.invalidConfigType(configName);
}
result.setConfigName(configName);
result.setType(item.getType());
result.setConfigType(item.getConfigType());
Map<DataSourceVariable, Boolean> dataSources = item.getDataSourceVariables();
if (dataSources != null && !dataSources.isEmpty()) {
List<VariableParam> variables = new ArrayList<VariableParam>();
for (Map.Entry<DataSourceVariable, Boolean> entry : dataSources.entrySet()) {
DataSourceVariable datasource = entry.getKey();
VariableParam variable = new VariableParam();
variable.setName(datasource.getDisplayName());
variable.setSampleValue(datasource.getSample());
variable.setIsRecommended(entry.getValue());
variables.add(variable);
}
CustomConfigVariableList variableList = new CustomConfigVariableList(variables);
result.setVariables(variableList);
}
Map<String, String> scopes = item.getScope();
if (scopes != null && !scopes.isEmpty()) {
List<ConfigTypeScopeParam> scopeParms = new ArrayList<ConfigTypeScopeParam>();
for (Map.Entry<String, String> entry : scopes.entrySet()) {
String type = entry.getKey();
String value = entry.getValue();
List<String> values = new ArrayList<String>();
if (value.contains(SCOPE_DELIMETER)) {
values = java.util.Arrays.asList(value.split(SCOPE_DELIMETER));
} else {
values.add(value);
}
ConfigTypeScopeParam scopeparm = new ConfigTypeScopeParam(type, values);
scopeParms.add(scopeparm);
}
ScopeParamList scopeList = new ScopeParamList(scopeParms);
result.setScopes(scopeList);
}
// get rules
List<CustomConfigConstraint> constraints = item.getConstraints();
if (constraints != null && !constraints.isEmpty()) {
List<String> rules = new ArrayList<String>();
for (CustomConfigConstraint constraint : constraints) {
rules.add(constraint.getName());
}
CustomConfigRuleList ruleList = new CustomConfigRuleList(rules);
result.setRules(ruleList);
}
return result;
}
Aggregations