app/models/packer/PackerBuilderConfig.scala (42 lines of code) (raw):
package models.packer
import play.api.libs.json.{Json, OWrites}
case class BlockDeviceMapping(
device_name: String = "/dev/sda1",
volume_size: Int,
volume_type: String = "gp2",
delete_on_termination: Boolean = true
)
case class AwsPolling(
delay_seconds: Int,
max_attempts: Int
)
case class PackerBuilderConfig(
name: String,
`type`: String,
region: String,
vpc_id: Option[String],
subnet_id: Option[String],
source_ami: String,
instance_type: String,
ssh_username: String,
ssh_interface: String,
run_tags: Map[String, String],
ami_name: String,
ami_description: String,
ami_users: String,
snapshot_users: String,
iam_instance_profile: Option[String],
tags: Map[String, String],
ami_block_device_mappings: Option[List[BlockDeviceMapping]],
launch_block_device_mappings: Option[List[BlockDeviceMapping]],
security_group_id: Option[String],
// Needed for long running bakes
// See https://developer.hashicorp.com/packer/integrations/hashicorp/amazon#resourcenotready-error
aws_polling: Option[AwsPolling]
)
object PackerBuilderConfig {
implicit val jsonAwsPollingWrites: OWrites[AwsPolling] =
Json.writes[AwsPolling]
implicit val jsonDiskWrites: OWrites[BlockDeviceMapping] =
Json.writes[BlockDeviceMapping]
implicit val jsonWrites: OWrites[PackerBuilderConfig] =
Json.writes[PackerBuilderConfig]
}