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
});
}
}