github.com/mweagle/Sparta@v1.15.0/decorator/versioning.go (about)

     1  package decorator
     2  
     3  import (
     4  	"time"
     5  
     6  	sparta "github.com/mweagle/Sparta"
     7  	gocf "github.com/mweagle/go-cloudformation"
     8  	"github.com/sirupsen/logrus"
     9  )
    10  
    11  // LambdaVersioningDecorator returns a TemplateDecorator
    12  // that is responsible for including a versioning resource
    13  // with the given lambda function
    14  func LambdaVersioningDecorator() sparta.TemplateDecoratorHookFunc {
    15  	return func(serviceName string,
    16  		lambdaResourceName string,
    17  		lambdaResource gocf.LambdaFunction,
    18  		resourceMetadata map[string]interface{},
    19  		S3Bucket string,
    20  		S3Key string,
    21  		buildID string,
    22  		template *gocf.Template,
    23  		context map[string]interface{},
    24  		logger *logrus.Logger) error {
    25  
    26  		lambdaResName := sparta.CloudFormationResourceName("LambdaVersion",
    27  			buildID,
    28  			time.Now().UTC().String())
    29  		versionResource := &gocf.LambdaVersion{
    30  			FunctionName: gocf.GetAtt(lambdaResourceName, "Arn").String(),
    31  		}
    32  		lambdaVersionRes := template.AddResource(lambdaResName, versionResource)
    33  		lambdaVersionRes.DeletionPolicy = "Retain"
    34  		// That's it...
    35  		return nil
    36  	}
    37  }