Skip to content

Commit

Permalink
Improved EIP definition.
Browse files Browse the repository at this point in the history
  • Loading branch information
bkrodgers committed Jan 12, 2016
1 parent aa4845f commit 27b2a2a
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.monsanto.arch.cloudformation.model.resource

import com.monsanto.arch.cloudformation.model.{ConditionRef, Token}
import spray.json.JsonFormat

/**
* Created by bkrodg on 1/11/16.
*/
case class `Custom::EC2-NAT-Gateway`(name: String,
ServiceToken: String,
eipAllocationID: Token[String],
subnet: Token[`AWS::EC2::Subnet`],
override val Condition: Option[ConditionRef] = None,
override val DependsOn: Option[Seq[String]] = None)
extends Resource[`Custom::EC2-NAT-Gateway`] {
def when(newCondition: Option[ConditionRef] = Condition) = copy(Condition = newCondition)
}
object `Custom::EC2-NAT-Gateway` {
import spray.json.DefaultJsonProtocol._
implicit def format: JsonFormat[`Custom::EC2-NAT-Gateway`] = jsonFormat6(`Custom::EC2-NAT-Gateway`.apply)
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,44 @@ import scala.language.implicitConversions
* Created by Ryan Richt on 2/28/15
*/

case class `AWS::EC2::EIP`(
case class `AWS::EC2::EIP` private (
name: String,
Domain: String,
InstanceId: Token[ResourceRef[`AWS::EC2::Instance`]],
override val Condition: Option[ConditionRef] = None,
override val DependsOn: Option[Seq[String]] = None
Domain: Option[String],
InstanceId: Option[Token[ResourceRef[`AWS::EC2::Instance`]]],
override val Condition: Option[ConditionRef],
override val DependsOn: Option[Seq[String]]
) extends Resource[`AWS::EC2::EIP`]{
def when(newCondition: Option[ConditionRef] = Condition) = copy(Condition = newCondition)
}
object `AWS::EC2::EIP` extends DefaultJsonProtocol {
implicit val format: JsonFormat[`AWS::EC2::EIP`] = jsonFormat5(`AWS::EC2::EIP`.apply)
// Need to be explicit here to get it to pick the apply above, not the backwards compatibility one below.
implicit val format: JsonFormat[`AWS::EC2::EIP`] =
jsonFormat5[String,
Option[String],
Option[Token[ResourceRef[`AWS::EC2::Instance`]]],
Option[ConditionRef],
Option[Seq[String]],
`AWS::EC2::EIP`](`AWS::EC2::EIP`.apply)

@deprecated(message = "Use .vpc() or .classic() instead.", since = "v3.0.6")
def apply(name: String,
Domain: String,
InstanceId: Token[ResourceRef[`AWS::EC2::Instance`]],
Condition: Option[ConditionRef] = None,
DependsOn: Option[Seq[String]] = None): `AWS::EC2::EIP` =
`AWS::EC2::EIP`(name, Some(Domain), Some(InstanceId), Condition, DependsOn)

def vpc(name: String,
InstanceId: Option[Token[ResourceRef[`AWS::EC2::Instance`]]],
Condition: Option[ConditionRef] = None,
DependsOn: Option[Seq[String]] = None): `AWS::EC2::EIP` =
`AWS::EC2::EIP`(name, Some("vpc"), InstanceId, Condition, DependsOn)

def classic(name: String,
InstanceId: Option[Token[ResourceRef[`AWS::EC2::Instance`]]],
Condition: Option[ConditionRef] = None,
DependsOn: Option[Seq[String]] = None): `AWS::EC2::EIP` =
`AWS::EC2::EIP`(name, None, InstanceId, Condition, DependsOn)
}

case class AMIId(id: String)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,33 @@ trait Route {
trait Instance {

implicit class RichInstance(ec2: `AWS::EC2::Instance`) {

@deprecated(message = "Use withEIPInVPC or withEIPInClassic", since = "v3.0.6")
def withEIP(
name: String,
domain: String = "vpc",
dependsOn: Option[Seq[String]] = None
) =
`AWS::EC2::EIP`(
name = name,
Domain = domain,
InstanceId = ResourceRef(ec2),
DependsOn = dependsOn
)
) : `AWS::EC2::EIP` = withEIPInVPC(name, dependsOn)

def withEIPInVPC(
name: String,
dependsOn: Option[Seq[String]] = None
) =
`AWS::EC2::EIP`.vpc(
name = name,
InstanceId = Some(ResourceRef(ec2)),
DependsOn = dependsOn
)

def withEIPInClassic(
name: String,
dependsOn: Option[Seq[String]] = None
) =
`AWS::EC2::EIP`.classic(
name = name,
InstanceId = Some(ResourceRef(ec2)),
DependsOn = dependsOn
)

def alarmOnSystemFailure(name: String, description: String) =
`AWS::CloudWatch::Alarm`(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -926,25 +926,22 @@ object StaxTemplate {
AmazonTag("CostCenter", ParameterRef(costCenterParam))
)

private val jumpEIPResource = `AWS::EC2::EIP`(
private val jumpEIPResource = `AWS::EC2::EIP`.vpc(
"JumpEIP",
DependsOn = Some(Seq(gatewayAttachmentResource.name)),
Domain = "vpc",
InstanceId = ResourceRef(jumpInstanceResource)
InstanceId = Some(ResourceRef(jumpInstanceResource))
)

private val nat1EIPResource = `AWS::EC2::EIP`(
private val nat1EIPResource = `AWS::EC2::EIP`.vpc(
"NAT1EIP",
DependsOn = Some(Seq(gatewayAttachmentResource.name)),
Domain = "vpc",
InstanceId = ResourceRef(nat1InstanceResource)
InstanceId = Some(ResourceRef(nat1InstanceResource))
)

private val nat2EIPResource = `AWS::EC2::EIP`(
private val nat2EIPResource = `AWS::EC2::EIP`.vpc(
"NAT2EIP",
DependsOn = Some(Seq(gatewayAttachmentResource.name)),
Domain = "vpc",
InstanceId = ResourceRef(nat2InstanceResource)
InstanceId = Some(ResourceRef(nat2InstanceResource))
)

val itsaDockerStack = Template(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class TemplateDoc_AT extends FunSpec with Matchers {
)
val sshToBastion = ParameterRef(allowSSHFromParameter) ->- 22 ->- bastion
Template.fromSecurityGroupRoutable(bastion) ++
bastion.map(_.withEIP("BastionEIP").andOutput("BastionEIP", "Bastion Host EIP")) ++
bastion.map(_.withEIPInVPC("BastionEIP").andOutput("BastionEIP", "Bastion Host EIP")) ++
Template.collapse(sshToBastion)
}
}
Expand Down

0 comments on commit 27b2a2a

Please sign in to comment.