in app/packer/PackerRunner.scala [31:87]
def createImage(
stage: String,
bake: Bake,
prism: PrismData,
eventBus: EventBus,
ansibleVars: Map[String, String],
debug: Boolean,
amiMetadataLookup: AmiMetadataLookup,
amigoDataBucket: Option[String]
)(implicit packerConfig: PackerConfig): Future[Int] = {
val sourceAmi = bake.recipe.baseImage.amiId.value
val amiMetadata = amiMetadataLookup
.lookupMetadataFor(sourceAmi)
.getOrElse(
throw new IllegalStateException(
s"Unable to identify the architecture for $sourceAmi"
)
)
val playbookYaml = PlaybookGenerator.generatePlaybook(
bake.recipe,
ansibleVars ++ Map(
"arch" -> amiMetadata.architecture,
"deb_arch" -> amiMetadata.debArchitecture
)
)
val playbookFile =
Files.createTempFile(s"amigo-ansible-${bake.recipe.id.value}", ".yml")
Files.write(
playbookFile,
playbookYaml.getBytes(StandardCharsets.UTF_8)
) // TODO error handling
val awsAccountNumbers = prism.accounts.map(_.accountNumber)
val packerVars = PackerVariablesConfig(bake)
val packerBuildConfig =
PackerBuildConfigGenerator.generatePackerBuildConfig(
stage,
bake,
playbookFile,
packerVars,
awsAccountNumbers,
amiMetadata,
amigoDataBucket,
bake.recipe.baseImage.requiresXLargeBuilder
)
val packerJson = Json.prettyPrint(Json.toJson(packerBuildConfig))
val packerConfigFile =
Files.createTempFile(s"amigo-packer-${bake.recipe.id.value}", ".json")
Files.write(
packerConfigFile,
packerJson.getBytes(StandardCharsets.UTF_8)
) // TODO error handling
executePacker(bake, playbookFile, packerConfigFile, eventBus, debug)
}