def createImage()

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)
  }