Skip to content

Commit

Permalink
Merge 2bbc444 into e65fe09
Browse files Browse the repository at this point in the history
  • Loading branch information
tylersouthwick committed Feb 6, 2016
2 parents e65fe09 + 2bbc444 commit 3e7dc01
Show file tree
Hide file tree
Showing 2 changed files with 147 additions and 0 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,10 @@ describe("Template Lookup") {
- AWS::EC2::Volume
- AWS::EC2::VolumeAttachment
- AWS::ElasticLoadBalancing::LoadBalancer
- AWS::ElasticBeanstalk::Application
- AWS::ElasticBeanstalk::ApplicationVersion
- AWS::ElasticBeanstalk::ConfigurationTemplate
- AWS::ElasticBeanstalk::Environment
- AWS::IAM::AccessKey
- AWS::IAM::Group
- AWS::IAM::InstanceProfile
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package com.monsanto.arch.cloudformation.model.resource

import com.monsanto.arch.cloudformation.model.{ResourceRef, ConditionRef, Token, `Fn::GetAtt`}
import spray.json.DefaultJsonProtocol._
import spray.json.{JsString, JsValue, JsonFormat}

case class `AWS::ElasticBeanstalk::Application`(
name: String,
ApplicationName: Option[Token[String]] = None,
Description: Option[String] = None,
override val Condition: Option[ConditionRef] = None
) extends Resource[`AWS::ElasticBeanstalk::Application`] {
override def when(newCondition: Option[ConditionRef]) = copy(Condition = newCondition)
}

object `AWS::ElasticBeanstalk::Application` {
implicit val format: JsonFormat[`AWS::ElasticBeanstalk::Application`] = jsonFormat4(`AWS::ElasticBeanstalk::Application`.apply)
}

case class `AWS::ElasticBeanstalk::ApplicationVersion`(
name: String,
ApplicationName: Token[String],
Description: Option[String] = None,
SourceBundle: SourceBundle,
override val Condition: Option[ConditionRef] = None
) extends Resource[`AWS::ElasticBeanstalk::ApplicationVersion`] {
override def when(newCondition: Option[ConditionRef]) = copy(Condition = newCondition)
}

object `AWS::ElasticBeanstalk::ApplicationVersion` {
implicit val format: JsonFormat[`AWS::ElasticBeanstalk::ApplicationVersion`] = jsonFormat5(`AWS::ElasticBeanstalk::ApplicationVersion`.apply)
}

case class SourceBundle(
S3Bucket: String,
S3Key: String
)

object SourceBundle {
implicit val format: JsonFormat[SourceBundle] = jsonFormat2(SourceBundle.apply)
}

case class `AWS::ElasticBeanstalk::ConfigurationTemplate`(
name: String,
ApplicationName: ResourceRef[`AWS::ElasticBeanstalk::Application`],
Description: Option[String] = None,
EnvironmentId: Option[String],
OptionSettings: Option[Seq[OptionSetting]],
SolutionStackName: Option[String],
SourceConfiguration: Option[SourceConfiguration],
override val Condition: Option[ConditionRef] = None
) extends Resource[`AWS::ElasticBeanstalk::ConfigurationTemplate`] {

override def when(newCondition: Option[ConditionRef]) = copy(Condition = newCondition)
}

object `AWS::ElasticBeanstalk::ConfigurationTemplate` {
implicit val format: JsonFormat[`AWS::ElasticBeanstalk::ConfigurationTemplate`] = jsonFormat8(`AWS::ElasticBeanstalk::ConfigurationTemplate`.apply)
}

case class SourceConfiguration(
//ApplicationName: Resource[`AWS::ElasticBeanstalk::Application`],
//TemplateName: Resource[`AWS::ElasticBeanstalk::ConfigurationTemplate`]
ApplicationName: Token[String],
TemplateName: Token[String]
)

object SourceConfiguration {
implicit val format: JsonFormat[SourceConfiguration] = jsonFormat2(SourceConfiguration.apply)
}

case class `AWS::ElasticBeanstalk::Environment`(
name: String,
ApplicationName: ResourceRef[`AWS::ElasticBeanstalk::Application`],
CNAMEPrefix: Option[String] = None,
Description: Option[String] = None,
EnvironmentName: Option[Token[String]] = None,
OptionSettings: Option[Seq[OptionSetting]] = None,
SolutionStackName: Option[String] = None,
Tags: Option[Seq[ResourceTag]] = None,
TemplateName: Option[String] = None,
Tier: Option[EnvironmentTier] = None,
VersionLabel: Option[String] = None,
override val Condition: Option[ConditionRef] = None
) extends Resource[`AWS::ElasticBeanstalk::Environment`] {
def endpointUrl: Token[String] = `Fn::GetAtt`(Seq(name, "EndpointURL"))

override def when(newCondition: Option[ConditionRef]) = copy(Condition = newCondition)
}

object `AWS::ElasticBeanstalk::Environment` {
implicit val format: JsonFormat[`AWS::ElasticBeanstalk::Environment`] = jsonFormat12(`AWS::ElasticBeanstalk::Environment`.apply)
}

case class OptionSetting(
Namespace: Token[String],
OptionName: Token[String],
Value: Token[String]
)

object OptionSetting {
implicit val format: JsonFormat[OptionSetting] = jsonFormat3(OptionSetting.apply)
}

case class ResourceTag(
Key: String,
Value: String
)

object ResourceTag {
implicit val format: JsonFormat[ResourceTag] = jsonFormat2(ResourceTag.apply)
}

sealed abstract class EnvironmentTierType(val tierType: String)

object EnvironmentTierType {
implicit val format = new JsonFormat[EnvironmentTierType] {
override def read(json: JsValue) = ???

override def write(obj: EnvironmentTierType) = JsString(obj.tierType)
}
}

/**
* WebServer
*/
case object Standard extends EnvironmentTierType("Standard")

/**
* Worker Tier
*/
case object `SQS/HTTP` extends EnvironmentTierType("SQS/HTTP")

case class EnvironmentTier(
Name: Option[String],
Type: Option[EnvironmentTierType],
Version: Option[String]
)

object EnvironmentTier {
implicit val format: JsonFormat[EnvironmentTier] = jsonFormat3(EnvironmentTier.apply)
}

0 comments on commit 3e7dc01

Please sign in to comment.