app/ansible/PlaybookGenerator.scala (24 lines of code) (raw):

package ansible import models.{CustomisedRole, Recipe} object PlaybookGenerator { def generatePlaybook(recipe: Recipe, allVars: Map[String, String]): String = { val allRoles = recipe.baseImage.builtinRoles ++ recipe.roles s"""--- | |- hosts: all | become: yes | vars: |${allVars.map { case (k, v) => s" $k: $v" }.mkString("\n")} | roles: |${allRoles.map(role => s" - ${renderRole(role)}").mkString("\n")} |""".stripMargin } private def renderRole(role: CustomisedRole): String = { if (role.variables.isEmpty) role.roleId.value else s"{ role: ${role.roleId.value}, ${role.variables .map { case (k, v) => s"$k: ${v.quoted}" } .mkString(", ")} }" } }