use of org.finra.herd.model.api.xml.NodeTag in project herd by FINRAOS.
the class EmrDaoTest method createEmrClusterAssertEncryptionDisabled.
@Test
public void createEmrClusterAssertEncryptionDisabled() throws Exception {
/*
* Use only minimum required options
*/
String clusterName = "clusterName";
EmrClusterDefinition emrClusterDefinition = new EmrClusterDefinition();
InstanceDefinitions instanceDefinitions = new InstanceDefinitions();
instanceDefinitions.setMasterInstances(new MasterInstanceDefinition(10, "masterInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, NO_INSTANCE_SPOT_PRICE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD));
instanceDefinitions.setCoreInstances(new InstanceDefinition(20, "coreInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, NO_INSTANCE_SPOT_PRICE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD));
emrClusterDefinition.setInstanceDefinitions(instanceDefinitions);
emrClusterDefinition.setNodeTags(Arrays.asList(new NodeTag("tagName", "tagValue")));
emrClusterDefinition.setEncryptionEnabled(false);
String clusterId = "clusterId";
when(mockEmrOperations.runEmrJobFlow(any(), any())).then(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
RunJobFlowRequest runJobFlowRequest = invocation.getArgument(1);
// No bootstrap action should be added
assertEquals(0, runJobFlowRequest.getBootstrapActions().size());
return clusterId;
}
});
assertEquals(clusterId, emrDao.createEmrCluster(clusterName, emrClusterDefinition, new AwsParamsDto()));
}
use of org.finra.herd.model.api.xml.NodeTag in project herd by FINRAOS.
the class EmrDaoTest method createEmrClusterAssertCallRunEmrJobFlowRequiredParamsOnly.
@Test
public void createEmrClusterAssertCallRunEmrJobFlowRequiredParamsOnly() throws Exception {
String clusterName = "clusterName";
EmrClusterDefinition emrClusterDefinition = new EmrClusterDefinition();
InstanceDefinitions instanceDefinitions = new InstanceDefinitions();
instanceDefinitions.setMasterInstances(new MasterInstanceDefinition(10, "masterInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, NO_INSTANCE_SPOT_PRICE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD));
instanceDefinitions.setCoreInstances(new InstanceDefinition(20, "coreInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, NO_INSTANCE_SPOT_PRICE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD));
emrClusterDefinition.setInstanceDefinitions(instanceDefinitions);
emrClusterDefinition.setNodeTags(Arrays.asList(new NodeTag("tagName", "tagValue")));
String clusterId = "clusterId";
when(mockEmrOperations.runEmrJobFlow(any(), any())).then(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
/*
* Assert that the given EMR cluster definition produced the correct RunJobFlowRequest
*/
RunJobFlowRequest runJobFlowRequest = invocation.getArgument(1);
JobFlowInstancesConfig jobFlowInstancesConfig = runJobFlowRequest.getInstances();
List<InstanceGroupConfig> instanceGroupConfigs = jobFlowInstancesConfig.getInstanceGroups();
assertEquals(2, instanceGroupConfigs.size());
{
InstanceGroupConfig instanceGroupConfig = instanceGroupConfigs.get(0);
assertEquals(10, instanceGroupConfig.getInstanceCount().intValue());
assertEquals("masterInstanceType", instanceGroupConfig.getInstanceType());
}
{
InstanceGroupConfig instanceGroupConfig = instanceGroupConfigs.get(1);
assertEquals(20, instanceGroupConfig.getInstanceCount().intValue());
assertEquals("coreInstanceType", instanceGroupConfig.getInstanceType());
}
assertEquals(herdStringHelper.getRequiredConfigurationValue(ConfigurationValue.EMR_DEFAULT_EC2_NODE_IAM_PROFILE_NAME), runJobFlowRequest.getJobFlowRole());
assertEquals(herdStringHelper.getRequiredConfigurationValue(ConfigurationValue.EMR_DEFAULT_SERVICE_IAM_ROLE_NAME), runJobFlowRequest.getServiceRole());
List<StepConfig> stepConfigs = runJobFlowRequest.getSteps();
assertEquals(0, stepConfigs.size());
List<Tag> tags = runJobFlowRequest.getTags();
assertEquals(1, tags.size());
{
Tag tag = tags.get(0);
assertEquals("tagName", tag.getKey());
assertEquals("tagValue", tag.getValue());
}
return clusterId;
}
});
assertEquals(clusterId, emrDao.createEmrCluster(clusterName, emrClusterDefinition, new AwsParamsDto()));
}
use of org.finra.herd.model.api.xml.NodeTag in project herd by FINRAOS.
the class EmrDaoTest method createEmrClusterAssertCallRunEmrJobFlowOptionalParams.
@Test
public void createEmrClusterAssertCallRunEmrJobFlowOptionalParams() throws Exception {
String clusterName = "clusterName";
EmrClusterDefinition emrClusterDefinition = new EmrClusterDefinition();
InstanceDefinitions instanceDefinitions = new InstanceDefinitions();
instanceDefinitions.setMasterInstances(new MasterInstanceDefinition(10, "masterInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, NO_INSTANCE_SPOT_PRICE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD));
instanceDefinitions.setCoreInstances(new InstanceDefinition(20, "coreInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, BigDecimal.ONE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD));
instanceDefinitions.setTaskInstances(new InstanceDefinition(30, "taskInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, NO_INSTANCE_SPOT_PRICE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD));
emrClusterDefinition.setInstanceDefinitions(instanceDefinitions);
emrClusterDefinition.setNodeTags(Arrays.asList(new NodeTag("tagName", "tagValue"), new NodeTag("", "tagValue"), new NodeTag("tagName", "")));
emrClusterDefinition.setSshKeyPairName("sshKeyPairName");
emrClusterDefinition.setSubnetId("subnetId");
emrClusterDefinition.setKeepAlive(true);
emrClusterDefinition.setTerminationProtection(true);
emrClusterDefinition.setHadoopVersion("hadoopVersion");
emrClusterDefinition.setReleaseLabel("releaseLabel");
emrClusterDefinition.setApplications(new ArrayList<>());
{
EmrClusterDefinitionApplication emrClusterDefinitionApplication = new EmrClusterDefinitionApplication();
emrClusterDefinitionApplication.setName("applicationName1");
emrClusterDefinitionApplication.setVersion("applicationVersion1");
emrClusterDefinitionApplication.setArgs(Arrays.asList("applicationArg1"));
emrClusterDefinition.getApplications().add(emrClusterDefinitionApplication);
}
{
EmrClusterDefinitionApplication emrClusterDefinitionApplication = new EmrClusterDefinitionApplication();
emrClusterDefinitionApplication.setName("applicationName2");
emrClusterDefinitionApplication.setVersion("applicationVersion2");
emrClusterDefinitionApplication.setArgs(Arrays.asList("applicationArg2"));
emrClusterDefinitionApplication.setAdditionalInfoList(Arrays.asList(new Parameter("applicationAdditionalInfoName2", "applicationAdditionalInfoValue2")));
emrClusterDefinition.getApplications().add(emrClusterDefinitionApplication);
}
emrClusterDefinition.setConfigurations(new ArrayList<>());
{
EmrClusterDefinitionConfiguration emrClusterDefinitionConfiguration = new EmrClusterDefinitionConfiguration();
emrClusterDefinitionConfiguration.setClassification("classification");
EmrClusterDefinitionConfiguration emrClusterDefinitionConfigurationInner = new EmrClusterDefinitionConfiguration();
emrClusterDefinitionConfigurationInner.setClassification("classificationInner");
emrClusterDefinitionConfiguration.setConfigurations(Arrays.asList(emrClusterDefinitionConfigurationInner));
emrClusterDefinitionConfiguration.setProperties(Arrays.asList(new Parameter("propertyKey", "propertyValue")));
emrClusterDefinition.getConfigurations().add(emrClusterDefinitionConfiguration);
}
emrClusterDefinition.setLogBucket("logBucket");
emrClusterDefinition.setVisibleToAll(true);
emrClusterDefinition.setEc2NodeIamProfileName("ec2NodeIamProfileName");
emrClusterDefinition.setServiceIamRole("serviceIamRole");
emrClusterDefinition.setAmiVersion("amiVersion");
emrClusterDefinition.setAdditionalInfo("additionalInfo");
emrClusterDefinition.setEncryptionEnabled(true);
emrClusterDefinition.setDaemonConfigurations(Arrays.asList(new Parameter("daemonConfigurationsKey", "daemonConfigurationsValue")));
ConfigurationFiles configurationFiles = new ConfigurationFiles();
configurationFiles.getConfigurationFiles().add(new ConfigurationFile("fileNameShortcut", "configFileLocation"));
KeyValuePairConfigurations keyValuePairConfigurations = new KeyValuePairConfigurations();
keyValuePairConfigurations.getKeyValuePairConfigurations().add(new KeyValuePairConfiguration("keyValueShortcut", "attribKey", "attribVal"));
emrClusterDefinition.setHadoopConfigurations(Arrays.asList(configurationFiles, keyValuePairConfigurations));
emrClusterDefinition.setCustomBootstrapActionAll(new ArrayList<>());
{
ScriptDefinition scriptDefinitionAll = new ScriptDefinition();
scriptDefinitionAll.setScriptName("scriptDefinitionAllName1");
scriptDefinitionAll.setScriptLocation("scriptDefinitionAllLocation1");
scriptDefinitionAll.setScriptArguments(Arrays.asList("scriptDefinitionAllArg1"));
emrClusterDefinition.getCustomBootstrapActionAll().add(scriptDefinitionAll);
}
{
ScriptDefinition scriptDefinitionAll = new ScriptDefinition();
scriptDefinitionAll.setScriptName("scriptDefinitionAllName2");
scriptDefinitionAll.setScriptLocation("scriptDefinitionAllLocation2");
emrClusterDefinition.getCustomBootstrapActionAll().add(scriptDefinitionAll);
}
emrClusterDefinition.setCustomBootstrapActionMaster(new ArrayList<>());
{
ScriptDefinition scriptDefinitionMaster = new ScriptDefinition();
scriptDefinitionMaster.setScriptName("scriptDefinitionMasterName1");
scriptDefinitionMaster.setScriptLocation("scriptDefinitionMasterLocation1");
scriptDefinitionMaster.setScriptArguments(Arrays.asList("scriptDefinitionMasterArg1"));
emrClusterDefinition.getCustomBootstrapActionMaster().add(scriptDefinitionMaster);
}
{
ScriptDefinition scriptDefinitionMaster = new ScriptDefinition();
scriptDefinitionMaster.setScriptName("scriptDefinitionMasterName2");
scriptDefinitionMaster.setScriptLocation("scriptDefinitionMasterLocation2");
emrClusterDefinition.getCustomBootstrapActionMaster().add(scriptDefinitionMaster);
}
emrClusterDefinition.setHiveVersion("hiveVersion");
emrClusterDefinition.setPigVersion("pigVersion");
emrClusterDefinition.setInstallOozie(true);
emrClusterDefinition.setHadoopJarSteps(Arrays.asList(new HadoopJarStep("stepName", "jarLocation", "mainClass", null, true)));
emrClusterDefinition.setSupportedProduct("supportedProduct");
emrClusterDefinition.setSecurityConfiguration("securityConfiguration");
emrClusterDefinition.setScaleDownBehavior("scaleDownBehavior");
emrClusterDefinition.setMasterSecurityGroup(EMR_MASTER_SECURITY_GROUP);
emrClusterDefinition.setSlaveSecurityGroup(EMR_SLAVE_SECURITY_GROUP);
String clusterId = "clusterId";
when(mockEmrOperations.runEmrJobFlow(any(), any())).then(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
/*
* Assert that the given EMR cluster definition produced the correct RunJobFlowRequest
*/
RunJobFlowRequest runJobFlowRequest = invocation.getArgument(1);
assertEquals(3, runJobFlowRequest.getInstances().getInstanceGroups().size());
{
InstanceGroupConfig instanceGroupConfig = runJobFlowRequest.getInstances().getInstanceGroups().get(1);
assertEquals("1", instanceGroupConfig.getBidPrice());
}
{
InstanceGroupConfig instanceGroupConfig = runJobFlowRequest.getInstances().getInstanceGroups().get(2);
assertEquals("taskInstanceType", instanceGroupConfig.getInstanceType());
assertEquals(30, instanceGroupConfig.getInstanceCount().intValue());
}
assertEquals("sshKeyPairName", runJobFlowRequest.getInstances().getEc2KeyName());
assertEquals("subnetId", runJobFlowRequest.getInstances().getEc2SubnetId());
assertEquals(true, runJobFlowRequest.getInstances().getKeepJobFlowAliveWhenNoSteps());
assertEquals(true, runJobFlowRequest.getInstances().getTerminationProtected());
assertEquals("hadoopVersion", runJobFlowRequest.getInstances().getHadoopVersion());
assertEquals("releaseLabel", runJobFlowRequest.getReleaseLabel());
assertEquals(2, runJobFlowRequest.getApplications().size());
{
Application application = runJobFlowRequest.getApplications().get(0);
assertEquals("applicationName1", application.getName());
assertEquals("applicationVersion1", application.getVersion());
assertEquals(Arrays.asList("applicationArg1"), application.getArgs());
}
{
Application application = runJobFlowRequest.getApplications().get(1);
Map<String, String> additionalInfo = application.getAdditionalInfo();
assertEquals(1, additionalInfo.size());
assertEquals("applicationAdditionalInfoValue2", additionalInfo.get("applicationAdditionalInfoName2"));
}
assertEquals(1, runJobFlowRequest.getConfigurations().size());
{
Configuration configuration = runJobFlowRequest.getConfigurations().get(0);
assertEquals("classification", configuration.getClassification());
assertEquals(1, configuration.getConfigurations().size());
{
Configuration configurationInner = configuration.getConfigurations().get(0);
assertEquals("classificationInner", configurationInner.getClassification());
}
assertEquals(1, configuration.getProperties().size());
assertEquals("propertyValue", configuration.getProperties().get("propertyKey"));
}
assertEquals("logBucket", runJobFlowRequest.getLogUri());
assertEquals(true, runJobFlowRequest.getVisibleToAllUsers());
assertEquals("ec2NodeIamProfileName", runJobFlowRequest.getJobFlowRole());
assertEquals("serviceIamRole", runJobFlowRequest.getServiceRole());
assertEquals("amiVersion", runJobFlowRequest.getAmiVersion());
assertEquals("additionalInfo", runJobFlowRequest.getAdditionalInfo());
assertEquals(7, runJobFlowRequest.getBootstrapActions().size());
{
BootstrapActionConfig bootstrapActionConfig = runJobFlowRequest.getBootstrapActions().get(0);
assertEquals("emr.encryption.script", bootstrapActionConfig.getName());
ScriptBootstrapActionConfig scriptBootstrapAction = bootstrapActionConfig.getScriptBootstrapAction();
assertEquals("s3:////herd_SCRIPTS/encrypt_disks.sh", scriptBootstrapAction.getPath());
assertEquals(0, scriptBootstrapAction.getArgs().size());
}
{
BootstrapActionConfig bootstrapActionConfig = runJobFlowRequest.getBootstrapActions().get(1);
assertEquals("emr.aws.configure.daemon", bootstrapActionConfig.getName());
ScriptBootstrapActionConfig scriptBootstrapAction = bootstrapActionConfig.getScriptBootstrapAction();
assertEquals("s3://elasticmapreduce/bootstrap-actions/configure-daemons", scriptBootstrapAction.getPath());
assertEquals(Arrays.asList("daemonConfigurationsKey=daemonConfigurationsValue"), scriptBootstrapAction.getArgs());
}
{
BootstrapActionConfig bootstrapActionConfig = runJobFlowRequest.getBootstrapActions().get(2);
assertEquals("emr.aws.configure.hadoop", bootstrapActionConfig.getName());
ScriptBootstrapActionConfig scriptBootstrapAction = bootstrapActionConfig.getScriptBootstrapAction();
assertEquals("s3://us-east-1.elasticmapreduce/bootstrap-actions/configure-hadoop", scriptBootstrapAction.getPath());
assertEquals(Arrays.asList("fileNameShortcut", "configFileLocation", "keyValueShortcut", "attribKey=attribVal"), scriptBootstrapAction.getArgs());
}
{
BootstrapActionConfig bootstrapActionConfig = runJobFlowRequest.getBootstrapActions().get(3);
assertEquals("scriptDefinitionAllName1", bootstrapActionConfig.getName());
ScriptBootstrapActionConfig scriptBootstrapAction = bootstrapActionConfig.getScriptBootstrapAction();
assertEquals("scriptDefinitionAllLocation1", scriptBootstrapAction.getPath());
assertEquals(Arrays.asList("scriptDefinitionAllArg1"), scriptBootstrapAction.getArgs());
}
{
BootstrapActionConfig bootstrapActionConfig = runJobFlowRequest.getBootstrapActions().get(4);
ScriptBootstrapActionConfig scriptBootstrapAction = bootstrapActionConfig.getScriptBootstrapAction();
assertEquals(0, scriptBootstrapAction.getArgs().size());
}
{
BootstrapActionConfig bootstrapActionConfig = runJobFlowRequest.getBootstrapActions().get(5);
assertEquals("scriptDefinitionMasterName1", bootstrapActionConfig.getName());
ScriptBootstrapActionConfig scriptBootstrapAction = bootstrapActionConfig.getScriptBootstrapAction();
assertEquals("s3://elasticmapreduce/bootstrap-actions/run-if", scriptBootstrapAction.getPath());
assertEquals(Arrays.asList("instance.isMaster=true", "scriptDefinitionMasterLocation1", "scriptDefinitionMasterArg1"), scriptBootstrapAction.getArgs());
}
{
BootstrapActionConfig bootstrapActionConfig = runJobFlowRequest.getBootstrapActions().get(6);
ScriptBootstrapActionConfig scriptBootstrapAction = bootstrapActionConfig.getScriptBootstrapAction();
assertEquals(Arrays.asList("instance.isMaster=true", "scriptDefinitionMasterLocation2"), scriptBootstrapAction.getArgs());
}
assertEquals(Arrays.asList("supportedProduct"), runJobFlowRequest.getSupportedProducts());
assertEquals("securityConfiguration", runJobFlowRequest.getSecurityConfiguration());
assertEquals("scaleDownBehavior", runJobFlowRequest.getScaleDownBehavior());
assertEquals(EMR_MASTER_SECURITY_GROUP, runJobFlowRequest.getInstances().getEmrManagedMasterSecurityGroup());
assertEquals(EMR_SLAVE_SECURITY_GROUP, runJobFlowRequest.getInstances().getEmrManagedSlaveSecurityGroup());
return clusterId;
}
});
assertEquals(clusterId, emrDao.createEmrCluster(clusterName, emrClusterDefinition, new AwsParamsDto()));
}
use of org.finra.herd.model.api.xml.NodeTag in project herd by FINRAOS.
the class EmrClusterDefinitionHelper method validateEmrClusterDefinitionConfiguration.
/**
* Validates an EMR cluster definition configuration.
*
* @param emrClusterDefinition the EMR cluster definition configuration
*
* @throws IllegalArgumentException if any validation errors were found
*/
public void validateEmrClusterDefinitionConfiguration(EmrClusterDefinition emrClusterDefinition) throws IllegalArgumentException {
Assert.notNull(emrClusterDefinition, "An EMR cluster definition configuration must be specified.");
Assert.isTrue(StringUtils.isNotBlank(emrClusterDefinition.getSubnetId()), "Subnet ID must be specified");
for (String token : emrClusterDefinition.getSubnetId().split(",")) {
Assert.isTrue(StringUtils.isNotBlank(token), "No blank is allowed in the list of subnet IDs");
}
Assert.isTrue(!emrHelper.isInstanceDefinitionsEmpty(emrClusterDefinition.getInstanceDefinitions()) || CollectionUtils.isNotEmpty(emrClusterDefinition.getInstanceFleets()), "Instance group definitions or instance fleets must be specified.");
if (!emrHelper.isInstanceDefinitionsEmpty(emrClusterDefinition.getInstanceDefinitions())) {
// Check master instances.
Assert.notNull(emrClusterDefinition.getInstanceDefinitions().getMasterInstances(), "Master instances must be specified.");
validateMasterInstanceDefinition(emrClusterDefinition.getInstanceDefinitions().getMasterInstances());
// Check core instances.
if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances() != null) {
validateInstanceDefinition("core", emrClusterDefinition.getInstanceDefinitions().getCoreInstances(), 0);
// If instance count is <= 0, remove the entire core instance definition since it is redundant.
if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances().getInstanceCount() <= 0) {
emrClusterDefinition.getInstanceDefinitions().setCoreInstances(null);
}
}
// Check task instances
if (emrClusterDefinition.getInstanceDefinitions().getTaskInstances() != null) {
validateInstanceDefinition("task", emrClusterDefinition.getInstanceDefinitions().getTaskInstances(), 1);
}
// Check that total number of instances does not exceed the max allowed.
int maxEmrInstanceCount = configurationHelper.getProperty(ConfigurationValue.MAX_EMR_INSTANCES_COUNT, Integer.class);
if (maxEmrInstanceCount > 0) {
int instancesRequested = emrClusterDefinition.getInstanceDefinitions().getMasterInstances().getInstanceCount();
if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances() != null) {
instancesRequested += emrClusterDefinition.getInstanceDefinitions().getCoreInstances().getInstanceCount();
}
if (emrClusterDefinition.getInstanceDefinitions().getTaskInstances() != null) {
instancesRequested += emrClusterDefinition.getInstanceDefinitions().getTaskInstances().getInstanceCount();
}
Assert.isTrue((maxEmrInstanceCount >= instancesRequested), "Total number of instances requested can not exceed : " + maxEmrInstanceCount);
}
}
// Validate node tags including checking for required tags and detecting any duplicate node tag names in case sensitive manner.
Assert.notEmpty(emrClusterDefinition.getNodeTags(), "Node tags must be specified.");
HashSet<String> nodeTagNameValidationSet = new HashSet<>();
for (NodeTag nodeTag : emrClusterDefinition.getNodeTags()) {
Assert.hasText(nodeTag.getTagName(), "A node tag name must be specified.");
Assert.hasText(nodeTag.getTagValue(), "A node tag value must be specified.");
Assert.isTrue(!nodeTagNameValidationSet.contains(nodeTag.getTagName()), String.format("Duplicate node tag \"%s\" is found.", nodeTag.getTagName()));
nodeTagNameValidationSet.add(nodeTag.getTagName());
}
// Validate the mandatory AWS tags are there
for (String mandatoryTag : herdStringHelper.splitStringWithDefaultDelimiter(configurationHelper.getProperty(ConfigurationValue.MANDATORY_AWS_TAGS))) {
Assert.isTrue(nodeTagNameValidationSet.contains(mandatoryTag), String.format("Mandatory AWS tag not specified: \"%s\"", mandatoryTag));
}
emrClusterDefinition.setAdditionalMasterSecurityGroups(assertNotBlankAndTrim(emrClusterDefinition.getAdditionalMasterSecurityGroups(), "additionalMasterSecurityGroup"));
emrClusterDefinition.setAdditionalSlaveSecurityGroups(assertNotBlankAndTrim(emrClusterDefinition.getAdditionalSlaveSecurityGroups(), "additionalSlaveSecurityGroup"));
// Fail if security configuration is specified for EMR version less than 4.8.0.
if (StringUtils.isNotBlank(emrClusterDefinition.getSecurityConfiguration())) {
final DefaultArtifactVersion securityConfigurationMinEmrVersion = new DefaultArtifactVersion("4.8.0");
Assert.isTrue(StringUtils.isNotBlank(emrClusterDefinition.getReleaseLabel()) && securityConfigurationMinEmrVersion.compareTo(new DefaultArtifactVersion(emrClusterDefinition.getReleaseLabel().replaceFirst("^(emr-)", ""))) <= 0, "EMR security configuration is not supported prior to EMR release 4.8.0.");
}
}
Aggregations