public static FieldDefinition CreateFieldDefinitionForLambda()

in src/Amazon.Lambda.Tools/TemplateProcessor/UpdatableResourceDefinition.cs [113:200]


            public static FieldDefinition CreateFieldDefinitionForLambda(bool isServerlessResource)
            {
                return new FieldDefinition
                {
                    Name = "CodeUri-Or-ImageUri",
                    IsCode = true,
                    GetLocalPath = (s) =>
                    {
                        string localPath;
                        var packageType = s.GetValue(LambdaConstants.CF_LAMBDA_PACKAGE_TYPE);

                        if (isServerlessResource)
                        {
                            if (string.Equals(PackageType.Image.Value, packageType, StringComparison.OrdinalIgnoreCase))
                            {
                                localPath = s.GetValueFromResource(LambdaConstants.CF_SERVERLESS_METADATA, LambdaConstants.CF_SERVERLESS_DOCKERCONTEXT);
                                if (string.IsNullOrEmpty(localPath))
                                {
                                    localPath = s.GetValue(LambdaConstants.CF_LAMBDA_IMAGEURI);
                                }
                            }
                            else
                            {
                                localPath = s.GetValue(LambdaConstants.CF_LAMBDA_CODEURI);

                                // Get value from Globals section for AWS::Serverless::Function
                                if (string.IsNullOrEmpty(localPath))
                                {
                                    localPath = s.GetValueFromRoot("Globals", "Function", LambdaConstants.CF_LAMBDA_CODEURI);
                                }
                            }
                        }
                        else
                        {
                            if (string.Equals(PackageType.Image.Value, packageType, StringComparison.OrdinalIgnoreCase))
                            {
                                localPath = s.GetValue(LambdaConstants.CF_LAMBDA_CODE, LambdaConstants.CF_LAMBDA_IMAGEURI);
                            }
                            else
                            {
                                var bucket = s.GetValue(LambdaConstants.CF_LAMBDA_CODE, LambdaConstants.CF_LAMBDA_S3BUCKET);

                                // If the bucket has a value then that means the CF template is referencing already
                                // uploaded resource.
                                if (!string.IsNullOrEmpty(bucket))
                                    return null;

                                localPath = s.GetValue(LambdaConstants.CF_LAMBDA_CODE, LambdaConstants.CF_LAMBDA_S3KEY);
                            }
                        }

                        if (string.IsNullOrEmpty(localPath))
                        {
                            localPath = ".";
                        }
                        else if (localPath.StartsWith("s3://"))
                        {
                            localPath = null;
                        }

                        return localPath;
                    },
                    SetS3Location = (s, b, k) =>
                    {
                        if(isServerlessResource)
                        {
                            var s3Url = $"s3://{b}/{k}";
                            s.SetValue(s3Url, LambdaConstants.CF_LAMBDA_CODEURI);
                        }
                        else
                        {
                            s.SetValue(b, LambdaConstants.CF_LAMBDA_CODE, LambdaConstants.CF_LAMBDA_S3BUCKET);
                            s.SetValue(k, LambdaConstants.CF_LAMBDA_CODE, LambdaConstants.CF_LAMBDA_S3KEY);
                        }
                    },
                    SetImageUri = (s, i) =>
                    {
                        if (isServerlessResource)
                        {
                            s.SetValue(i, LambdaConstants.CF_LAMBDA_IMAGEURI);
                        }
                        else
                        {
                            s.SetValue(i, LambdaConstants.CF_LAMBDA_CODE, LambdaConstants.CF_LAMBDA_IMAGEURI);
                        }
                    }
                };
            }