private[input] def applyTemplates()

in magenta-lib/src/main/scala/magenta/input/resolver/DeploymentResolver.scala [78:124]


  private[input] def applyTemplates(
      templateName: String,
      template: DeploymentOrTemplate,
      templates: Option[Map[String, DeploymentOrTemplate]]
  ): Validated[ConfigErrors, DeploymentOrTemplate] = {

    template.template match {
      case None =>
        Valid(template)
      case Some(parentTemplateName) =>
        for {
          parentTemplate <- {
            Validated.fromOption(
              templates.flatMap(_.get(parentTemplateName)),
              ConfigErrors(
                templateName,
                s"Template with name $parentTemplateName does not exist"
              )
            )
          }
          resolvedParent <- applyTemplates(
            parentTemplateName,
            parentTemplate,
            templates
          )
        } yield {
          DeploymentOrTemplate(
            `type` = template.`type`.orElse(resolvedParent.`type`),
            template = None,
            stacks = template.stacks.orElse(resolvedParent.stacks),
            regions = template.regions.orElse(resolvedParent.regions),
            allowedStages = resolvedParent.allowedStages,
            actions = template.actions.orElse(resolvedParent.actions),
            app = template.app.orElse(resolvedParent.app),
            contentDirectory =
              template.contentDirectory.orElse(resolvedParent.contentDirectory),
            dependencies =
              template.dependencies.orElse(resolvedParent.dependencies),
            parameters = Some(
              resolvedParent.parameters.getOrElse(
                Map.empty
              ) ++ template.parameters.getOrElse(Map.empty)
            )
          )
        }
    }
  }