Skip to content

Commit

Permalink
refactor(aws): Refactored instance type utils
Browse files Browse the repository at this point in the history
 - gathered instance type related (hard-coded) config / utils in one place
 - converted BlockDeviceConfig from Groovy to Java

spinnaker/spinnaker#5989
  • Loading branch information
pdk27 authored and cfieber committed Oct 29, 2020
1 parent b444cf0 commit 5e13271
Show file tree
Hide file tree
Showing 17 changed files with 749 additions and 750 deletions.

This file was deleted.

This file was deleted.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ import com.netflix.frigga.Names
import com.netflix.spinnaker.clouddriver.aws.AmazonCloudProvider
import com.netflix.spinnaker.config.AwsConfiguration
import com.netflix.spinnaker.config.AwsConfiguration.DeployDefaults
import com.netflix.spinnaker.clouddriver.aws.data.InstanceFamilyUtils
import com.netflix.spinnaker.clouddriver.aws.deploy.AmiIdResolver
import com.netflix.spinnaker.clouddriver.aws.deploy.AutoScalingWorker
import com.netflix.spinnaker.clouddriver.aws.deploy.BlockDeviceConfig
import com.netflix.spinnaker.clouddriver.aws.deploy.InstanceTypeUtils
import com.netflix.spinnaker.clouddriver.aws.deploy.InstanceTypeUtils.BlockDeviceConfig
import com.netflix.spinnaker.clouddriver.aws.deploy.ResolvedAmiResult
import com.netflix.spinnaker.clouddriver.aws.deploy.description.BasicAmazonDeployDescription
import com.netflix.spinnaker.clouddriver.aws.deploy.ops.loadbalancer.LoadBalancerLookupHelper
Expand Down Expand Up @@ -233,7 +233,7 @@ class BasicAmazonDeployHandler implements DeployHandler<BasicAmazonDeployDescrip
if (!ami) {
throw new IllegalArgumentException("unable to resolve AMI imageId from $description.amiName in $region")
}
InstanceFamilyUtils.isAmiAndFamilyCompatible(ami.virtualizationType, description.instanceType)
InstanceTypeUtils.validateCompatibility(ami.virtualizationType, description.instanceType)

def account = accountCredentialsRepository.getOne(description.credentials.name)
if (account == null) {
Expand Down Expand Up @@ -290,7 +290,7 @@ class BasicAmazonDeployHandler implements DeployHandler<BasicAmazonDeployDescrip
kernelId: description.kernelId,
ramdiskId: description.ramdiskId,
instanceMonitoring: description.instanceMonitoring,
ebsOptimized: description.ebsOptimized == null ? InstanceFamilyUtils.getDefaultEbsOptimizedFlag(description.instanceType) : description.ebsOptimized,
ebsOptimized: description.ebsOptimized == null ? InstanceTypeUtils.getDefaultEbsOptimizedFlag(description.instanceType) : description.ebsOptimized,
regionScopedProvider: regionScopedProvider,
base64UserData: description.base64UserData,
legacyUdf: description.legacyUdf,
Expand Down Expand Up @@ -496,7 +496,7 @@ class BasicAmazonDeployHandler implements DeployHandler<BasicAmazonDeployDescrip
*/
@VisibleForTesting
static Boolean getUnlimitedCpuCredits(final Boolean unlimitedCpuCredits, final String instanceType) {
def isApplicableButNotSpecified = unlimitedCpuCredits == null && InstanceFamilyUtils.isBurstingSupported(instanceType)
def isApplicableButNotSpecified = unlimitedCpuCredits == null && InstanceTypeUtils.isBurstingSupported(instanceType)
return isApplicableButNotSpecified ? false : unlimitedCpuCredits
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import com.amazonaws.services.autoscaling.model.UpdateAutoScalingGroupRequest
import com.netflix.frigga.Names
import com.netflix.spinnaker.config.AwsConfiguration
import com.netflix.spinnaker.clouddriver.aws.deploy.AmiIdResolver
import com.netflix.spinnaker.clouddriver.aws.deploy.BlockDeviceConfig
import com.netflix.spinnaker.clouddriver.aws.deploy.InstanceTypeUtils.BlockDeviceConfig
import com.netflix.spinnaker.clouddriver.aws.deploy.ResolvedAmiResult
import com.netflix.spinnaker.clouddriver.aws.deploy.description.ModifyAsgLaunchConfigurationDescription
import com.netflix.spinnaker.clouddriver.aws.services.RegionScopedProviderFactory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.netflix.spinnaker.clouddriver.aws.deploy.BlockDeviceConfig;
import com.netflix.spinnaker.clouddriver.aws.deploy.InstanceTypeUtils.BlockDeviceConfig;
import com.netflix.spinnaker.clouddriver.aws.deploy.description.ModifyServerGroupLaunchTemplateDescription;
import com.netflix.spinnaker.clouddriver.aws.deploy.ops.ModifyServerGroupLaunchTemplateAtomicOperation.LaunchTemplateException;
import com.netflix.spinnaker.clouddriver.aws.deploy.ops.actions.UpdateAutoScalingGroup.UpdateAutoScalingGroupCommand;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.netflix.spinnaker.clouddriver.aws.deploy.AmiIdResolver;
import com.netflix.spinnaker.clouddriver.aws.deploy.BlockDeviceConfig;
import com.netflix.spinnaker.clouddriver.aws.deploy.InstanceTypeUtils.BlockDeviceConfig;
import com.netflix.spinnaker.clouddriver.aws.deploy.ResolvedAmiResult;
import com.netflix.spinnaker.clouddriver.aws.deploy.description.ModifyServerGroupLaunchTemplateDescription;
import com.netflix.spinnaker.clouddriver.aws.deploy.ops.ModifyServerGroupLaunchTemplateAtomicOperation.LaunchTemplateException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.google.common.annotations.VisibleForTesting
import com.netflix.spinnaker.clouddriver.aws.AmazonOperation
import com.netflix.spinnaker.clouddriver.aws.deploy.description.BasicAmazonDeployDescription
import com.netflix.spinnaker.clouddriver.aws.model.AmazonBlockDevice
import com.netflix.spinnaker.clouddriver.aws.deploy.InstanceTypeUtils
import com.netflix.spinnaker.clouddriver.aws.security.AmazonCredentials
import com.netflix.spinnaker.clouddriver.aws.security.NetflixAmazonCredentials
import com.netflix.spinnaker.clouddriver.deploy.ValidationErrors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
package com.netflix.spinnaker.clouddriver.aws.deploy.validators;

import com.netflix.spinnaker.clouddriver.aws.AmazonOperation;
import com.netflix.spinnaker.clouddriver.aws.data.InstanceFamilyUtils;
import com.netflix.spinnaker.clouddriver.aws.deploy.InstanceTypeUtils;
import com.netflix.spinnaker.clouddriver.aws.deploy.description.ModifyServerGroupLaunchTemplateDescription;
import com.netflix.spinnaker.clouddriver.aws.model.AmazonBlockDevice;
import com.netflix.spinnaker.clouddriver.aws.security.NetflixAmazonCredentials;
Expand Down Expand Up @@ -87,7 +87,7 @@ public void validate(

// unlimitedCpuCredits (set to true / false) is valid only with supported instance types
if (description.getUnlimitedCpuCredits() != null
&& !InstanceFamilyUtils.isBurstingSupported(description.getInstanceType())) {
&& !InstanceTypeUtils.isBurstingSupported(description.getInstanceType())) {
errors.rejectValue(
"unlimitedCpuCredits",
"modifyservergrouplaunchtemplatedescription.bursting.not.supported.by.instanceType");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@

package com.netflix.spinnaker.clouddriver.aws.model

import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString
import groovy.transform.TupleConstructor

/**
* Model for a block device mapping
Expand All @@ -25,10 +27,10 @@ import groovy.transform.Canonical
* (deviceName + virtualName)
* or an EBS device:
* (deviceName + size + (optionally) volumeType, deleteOnTermination, iops, snapshotId)
*
*
*/
@Canonical
@ToString
@EqualsAndHashCode
@TupleConstructor(force = true)
class AmazonBlockDevice {

// Required for all:
Expand Down Expand Up @@ -75,4 +77,69 @@ class AmazonBlockDevice {
*/
Boolean encrypted

private AmazonBlockDevice(Builder builder) {
deviceName = builder.deviceName
virtualName = builder.virtualName
size = builder.size
volumeType = builder.volumeType
deleteOnTermination = builder.deleteOnTermination
iops = builder.iops
snapshotId = builder.snapshotId
encrypted = builder.encrypted
}

static class Builder {
String deviceName
String virtualName
Integer size
String volumeType
Boolean deleteOnTermination
Integer iops
String snapshotId
Boolean encrypted

Builder deviceName(String deviceName) {
this.deviceName = deviceName
return this
}

Builder virtualName(String virtualName) {
this.virtualName = virtualName
return this
}

Builder size(Integer size) {
this.size = size
return this
}

Builder volumeType(String volumeType) {
this.volumeType = volumeType
return this
}

Builder deleteOnTermination(Boolean deleteOnTermination) {
this.deleteOnTermination = deleteOnTermination
return this
}

Builder iops(Integer iops) {
this.iops = iops
return this
}

Builder snapshotId(String snapshotId) {
this.snapshotId = snapshotId
return this
}

Builder encrypted(Boolean encrypted) {
this.encrypted = encrypted
return this
}

AmazonBlockDevice build() {
return new AmazonBlockDevice(this)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.awsobjectmapper.AmazonObjectMapperConfigurer
import com.netflix.spectator.api.Registry
import com.netflix.spinnaker.clouddriver.aws.AwsConfigurationProperties
import com.netflix.spinnaker.clouddriver.aws.deploy.BlockDeviceConfig
import com.netflix.spinnaker.clouddriver.aws.deploy.InstanceTypeUtils.BlockDeviceConfig
import com.netflix.spinnaker.clouddriver.aws.deploy.handlers.BasicAmazonDeployHandler
import com.netflix.spinnaker.clouddriver.aws.deploy.ops.securitygroup.SecurityGroupLookupFactory
import com.netflix.spinnaker.clouddriver.aws.deploy.scalingpolicy.DefaultScalingPolicyCopier
Expand Down

This file was deleted.

Loading

0 comments on commit 5e13271

Please sign in to comment.