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