Skip to content

Commit

Permalink
Modeled Autoscaling EBS parameters.
Browse files Browse the repository at this point in the history
  • Loading branch information
bkrodgers committed Sep 1, 2015
1 parent 0acd0af commit 6029ce3
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,53 @@ case class `AWS::AutoScaling::LaunchConfiguration`(
SecurityGroups: Seq[Token[ResourceRef[`AWS::EC2::SecurityGroup`]]],
UserData: `Fn::Base64`,
IamInstanceProfile: Option[Token[ResourceRef[`AWS::IAM::InstanceProfile`]]] = None,
BlockDeviceMappings: Option[Seq[BlockDeviceMapping]] = None,
override val Condition: Option[ConditionRef] = None,
override val DependsOn : Option[Seq[String]] = None
) extends Resource[`AWS::AutoScaling::LaunchConfiguration`] {
def when(newCondition: Option[ConditionRef] = Condition) = copy(Condition = newCondition)
}

object `AWS::AutoScaling::LaunchConfiguration` extends DefaultJsonProtocol {
implicit val format: JsonFormat[`AWS::AutoScaling::LaunchConfiguration`] = jsonFormat9(`AWS::AutoScaling::LaunchConfiguration`.apply)
implicit val format: JsonFormat[`AWS::AutoScaling::LaunchConfiguration`] = jsonFormat10(`AWS::AutoScaling::LaunchConfiguration`.apply)
}
case class BlockDeviceMapping(
DeviceName: Token[String],
Ebs: Option[AutoScalingEBS] = None,
NoDevice: Option[Token[Boolean]] = None,
VirtualName: Option[Token[String]] = None
)
object BlockDeviceMapping extends DefaultJsonProtocol {
implicit val format: JsonFormat[BlockDeviceMapping] = jsonFormat4(BlockDeviceMapping.apply)
}

case class AutoScalingEBS(
DeleteOnTermination: Option[Token[Boolean]] = None,
Iops: Option[Token[Int]] = None,
SnapshotId: Option[Token[String]] = None,
VolumeSize: Option[Token[Int]] = None,
VolumeType: Option[VolumeType] = None
)
object AutoScalingEBS extends DefaultJsonProtocol {
implicit val format: JsonFormat[AutoScalingEBS] = jsonFormat5(AutoScalingEBS.apply)
}

sealed trait VolumeType
object VolumeType extends DefaultJsonProtocol{
case object Standard extends VolumeType
case object IO1 extends VolumeType
case object GP2 extends VolumeType

implicit val format: JsonFormat[VolumeType] = new JsonFormat[VolumeType] {
override def write(obj: VolumeType): JsValue = JsString(obj.toString.toLowerCase())

override def read(json: JsValue): VolumeType = json.toString() match {
case "standard" => Standard
case "io1" => IO1
case "gp2" => GP2
}
}
}
case class `AWS::AutoScaling::ScalingPolicy`(
name: String,
AdjustmentType: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,18 +203,20 @@ trait Autoscaling {
userData: `Fn::Base64`,
iam: Option[Token[ResourceRef[`AWS::IAM::InstanceProfile`]]] = None,
condition: Option[ConditionRef] = None,
dependsOn: Option[Seq[String]] = None
dependsOn: Option[Seq[String]] = None,
blockDevices: Option[Seq[BlockDeviceMapping]] = None
)(implicit vpc: `AWS::EC2::VPC`) =
SecurityGroupRoutable from `AWS::AutoScaling::LaunchConfiguration`(
name = name,
ImageId = image,
InstanceType = instanceType,
KeyName = keyName,
SecurityGroups = sgs,
UserData = userData,
IamInstanceProfile = iam,
Condition = condition,
DependsOn = dependsOn
name = name,
ImageId = image,
InstanceType = instanceType,
KeyName = keyName,
SecurityGroups = sgs,
UserData = userData,
IamInstanceProfile = iam,
Condition = condition,
DependsOn = dependsOn,
BlockDeviceMappings = blockDevices
)

def asg(
Expand All @@ -226,7 +228,8 @@ trait Autoscaling {
userData: `Fn::Base64`,
iam: Option[Token[ResourceRef[`AWS::IAM::InstanceProfile`]]] = None,
condition: Option[ConditionRef] = None,
dependsOn: Option[Seq[String]] = None
dependsOn: Option[Seq[String]] = None,
blockDevices: Option[Seq[BlockDeviceMapping]] = None
)(
minSize: Int,
maxSize: Int,
Expand All @@ -241,7 +244,7 @@ trait Autoscaling {
val asgName = baseName + "AutoScale"

val launchConfigSGR @ SecurityGroupRoutable(aLaunchConfig, _, _) =
launchConfig(baseName, image, instanceType, keyName, sgs, userData, iam, condition, dependsOn)
launchConfig(baseName, image, instanceType, keyName, sgs, userData, iam, condition, dependsOn, blockDevices)

val asg = `AWS::AutoScaling::AutoScalingGroup`(
name = asgName,
Expand Down

0 comments on commit 6029ce3

Please sign in to comment.