in cfn-resources/network-peering/cmd/resource/resource.go [254:320]
func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler.ProgressEvent, error) {
setup()
log.Debugf("Update currentModel:%+v", currentModel)
client, err := util.CreateMongoDBClient(*currentModel.ApiKeys.PublicKey, *currentModel.ApiKeys.PrivateKey)
if err != nil {
log.Warnf("Update - error err:%+v", err)
return handler.ProgressEvent{
OperationStatus: handler.Failed,
Message: err.Error(),
HandlerErrorCode: cloudformation.HandlerErrorCodeInvalidRequest}, nil
}
projectID := *currentModel.ProjectId
if currentModel.Id == nil {
return handler.ProgressEvent{
Message: fmt.Sprintf("No Id found in model:%+v for Update", currentModel),
OperationStatus: handler.Failed,
HandlerErrorCode: cloudformation.HandlerErrorCodeNotFound}, nil
}
peerID := *currentModel.Id
peerRequest := mongodbatlas.Peer{}
region := currentModel.AccepterRegionName
if region != nil {
peerRequest.AccepterRegionName = *region
}
accountID := currentModel.AwsAccountId
if accountID != nil {
peerRequest.AWSAccountID = *accountID
}
peerRequest.ProviderName = "AWS"
rtTableBlock := currentModel.RouteTableCIDRBlock
if rtTableBlock != nil {
peerRequest.RouteTableCIDRBlock = *rtTableBlock
}
vpcId := currentModel.VpcId
if vpcId != nil {
peerRequest.VpcID = *vpcId
}
peerResponse, resp, err := client.Peers.Update(context.Background(), projectID, peerID, &peerRequest)
if err != nil {
if resp != nil && resp.StatusCode == 404 {
log.Warnf("Resource Not Found 404 for READ projectId:%s, peerID:%+v, err:%+v", projectID, peerID, err)
return handler.ProgressEvent{
Message: err.Error(),
OperationStatus: handler.Failed,
HandlerErrorCode: cloudformation.HandlerErrorCodeNotFound}, nil
} else {
log.Warnf("Error READ projectId:%s, err:%+v", projectID, err)
return handler.ProgressEvent{
Message: err.Error(),
OperationStatus: handler.Failed,
HandlerErrorCode: cloudformation.HandlerErrorCodeServiceInternalError}, nil
}
//return handler.ProgressEvent{}, fmt.Errorf("error updating peer with id(project: %s, peer: %s): %s", projectID, peerID, err)
}
currentModel.Id = &peerResponse.ID
return handler.ProgressEvent{
OperationStatus: handler.Success,
Message: "Update Complete",
ResourceModel: currentModel,
}, nil
}