def lambdaToProcess()

in magenta-lib/src/main/scala/magenta/deployment_type/Lambda.scala [101:171]


  def lambdaToProcess(
      pkg: DeploymentPackage,
      target: DeployTarget,
      reporter: DeployReporter
  ): List[UpdateLambdaFunction] = {
    val bucket = getTargetBucketFromConfig(pkg, target, reporter)

    val stage = target.parameters.stage.name

    (
      functionNamesParam.get(pkg),
      functionsParam.get(pkg),
      lookupByTags(pkg, target, reporter),
      prefixStackParam(pkg, target, reporter)
    ) match {
      // the lambdas are a simple hardcoded list of function names
      case (Some(functionNames), None, false, prefixStack) =>
        val stackNamePrefix = if (prefixStack) target.stack.name else ""
        for {
          name <- functionNames
        } yield UpdateLambdaFunction(
          LambdaFunctionName(s"$stackNamePrefix$name$stage"),
          fileNameParam(pkg, target, reporter),
          target.region,
          bucket
        )

      // the list of lambdas are provided in a map from stage to lambda name and filename
      case (None, Some(functionsMap), false, _) =>
        val functionDefinition = functionsMap.getOrElse(
          stage,
          reporter.fail(s"Function not defined for stage $stage")
        )
        val functionName = functionDefinition.getOrElse(
          "name",
          reporter.fail(s"Function name not defined for stage $stage")
        )
        val fileName = functionDefinition.getOrElse("filename", "lambda.zip")
        List(
          UpdateLambdaFunction(
            LambdaFunctionName(functionName),
            fileName,
            target.region,
            bucket
          )
        )

      // the lambda to update is discovered from Stack, App and Stage tags
      case (None, None, true, _) =>
        val tags = LambdaFunctionTags(
          Map(
            "Stack" -> target.stack.name,
            "App" -> pkg.app.name,
            "Stage" -> stage
          )
        )
        List(
          UpdateLambdaFunction(
            tags,
            fileNameParam(pkg, target, reporter),
            target.region,
            bucket
          )
        )

      case _ =>
        reporter.fail(
          "Must specify one of 'functions', 'functionNames' or 'lookupByTags' parameters"
        )
    }
  }