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 }