public CreateChangeSetResponse CreateChangeSet()

in Runtime/Core/DeploymentManagement/DeploymentManager.cs [205:359]


        public CreateChangeSetResponse CreateChangeSet(CreateChangeSetRequest request)
        {
            try
            {
                if (!_fileWrapper.FileExists(request.ParametersFilePath))
                {
                    return Response.Fail(new CreateChangeSetResponse
                    {
                        ErrorCode = ErrorCode.ParametersFileNotFound
                    });
                }

                (bool success, string errorMessage, List<Parameter> parameters) deserializedParameters
                    = DeserializeParameters(request.ParametersFilePath);

                if (!deserializedParameters.success)
                {
                    return Response.Fail(new CreateChangeSetResponse
                    {
                        ErrorCode = ErrorCode.InvalidParameters,
                        ErrorMessage = deserializedParameters.errorMessage
                    });
                }

                bool exists = _amazonS3Wrapper.DoesBucketExist(request.BootstrapBucketName);
                if (!exists)
                {
                    return Response.Fail(new CreateChangeSetResponse
                    {
                        ErrorCode = ErrorCode.BucketDoesNotExist
                    });
                }

                string fileName = Path.GetFileName(request.TemplateFilePath);
                string key = s_formatter.GetCloudFormationFileKey(fileName);

                (bool success, string fileUrl, _)
                    = UploadFile(request.BootstrapBucketName, request.TemplateFilePath, key);

                if (!success)
                {
                    return Response.Fail(new CreateChangeSetResponse
                    {
                        ErrorCode = ErrorCode.AwsError
                    });
                }

                InjectLambdaParameters(
                            deserializedParameters.parameters,
                            request.BootstrapBucketName,
                            request.GameName,
                            request.LambdaSourcePath
                        );

                InjectBuildParameters(
                        deserializedParameters.parameters,
                        request.BootstrapBucketName,
                        request.BuildS3Key
                    );

                StackExistsResponse stackExistsResponse = StackExists(new StackExistsRequest
                {
                    StackName = request.StackName
                });

                if (!stackExistsResponse.Success)
                {
                    return Response.Fail(new CreateChangeSetResponse
                    {
                        ErrorCode = stackExistsResponse.ErrorCode
                    });
                }

                ChangeSetType changeSetType =
                    stackExistsResponse.Exists ? ChangeSetType.UPDATE : ChangeSetType.CREATE;

                string changeSetName = s_formatter.GetChangeSetName();

                Amazon.CloudFormation.Model.CreateChangeSetResponse createChangeSetResponse =
                    _amazonCloudFormation.CreateChangeSet(new Amazon.CloudFormation.Model.CreateChangeSetRequest()
                    {
                        ChangeSetName = changeSetName,
                        StackName = request.StackName,
                        Parameters = deserializedParameters.parameters,
                        TemplateURL = fileUrl,
                        Capabilities = new List<string> { "CAPABILITY_NAMED_IAM" },
                        ChangeSetType = changeSetType
                    });

                return Response.Ok(new CreateChangeSetResponse
                {
                    CreatedChangeSetName = changeSetName
                });
            }
            catch (AlreadyExistsException ex)
            {
                Logger.LogError(ex, ex.Message);

                return Response.Fail(new CreateChangeSetResponse
                {
                    ErrorCode = ErrorCode.ResourceWithTheNameRequestetAlreadyExists,
                    ErrorMessage = ex.Message
                });
            }
            catch (InsufficientCapabilitiesException ex)
            {
                Logger.LogError(ex, ex.Message);

                return Response.Fail(new CreateChangeSetResponse
                {
                    ErrorCode = ErrorCode.InsufficientCapabilities,
                    ErrorMessage = ex.Message
                });
            }
            catch (LimitExceededException ex)
            {
                Logger.LogError(ex, ex.Message);

                return Response.Fail(new CreateChangeSetResponse
                {
                    ErrorCode = ErrorCode.LimitExceeded,
                    ErrorMessage = ex.Message
                });
            }
            catch (AmazonCloudFormationException ex)
            {
                Logger.LogError(ex, ex.Message);

                return Response.Fail(new CreateChangeSetResponse
                {
                    ErrorCode = ErrorCode.AwsError,
                    ErrorMessage = ex.Message
                });
            }
            catch (AmazonS3Exception ex)
            {
                Logger.LogError(ex, ex.Message);

                return Response.Fail(new CreateChangeSetResponse
                {
                    ErrorCode = ErrorCode.AwsError,
                    ErrorMessage = ex.Message
                });
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, ex.Message);

                return Response.Fail(new CreateChangeSetResponse
                {
                    ErrorCode = ErrorCode.UnknownError,
                    ErrorMessage = ex.Message
                });
            }
        }