in cfn-resources/database-user/cmd/resource/resource.go [217:294]
func Update(req handler.Request, prevModel *Model, currentModel *Model) (handler.ProgressEvent, error) {
setup()
client, err := util.CreateMongoDBClient(*currentModel.ApiKeys.PublicKey, *currentModel.ApiKeys.PrivateKey)
if err != nil {
return handler.ProgressEvent{
OperationStatus: handler.Failed,
Message: err.Error(),
HandlerErrorCode: cloudformation.HandlerErrorCodeInvalidRequest}, nil
}
log.Debugf("Update currentModel:%+v", currentModel)
roles := []mongodbatlas.Role{}
for i, _ := range currentModel.Roles {
r := currentModel.Roles[i]
role := mongodbatlas.Role{}
if r.CollectionName != nil {
role.CollectionName = *r.CollectionName
} else {
role.CollectionName = ""
}
role.DatabaseName = *r.DatabaseName
role.RoleName = *r.RoleName
roles = append(roles, role)
}
log.Debugf("Update roles:%+v", roles)
labels := []mongodbatlas.Label{}
for i, _ := range currentModel.Labels {
l := currentModel.Labels[i]
label := mongodbatlas.Label{
Key: *l.Key,
Value: *l.Value,
}
labels = append(labels, label)
}
if currentModel.LdapAuthType == nil {
currentModel.LdapAuthType = new(string)
}
groupID := *currentModel.ProjectId
username := *currentModel.Username
log.Debugf("groupID:%s, username:%s", groupID, username)
dbu := &mongodbatlas.DatabaseUser{
Roles: roles,
GroupID: groupID,
Username: username,
Password: *currentModel.Password,
DatabaseName: *currentModel.DatabaseName,
LDAPAuthType: *currentModel.LdapAuthType,
Labels: labels,
}
log.Debugf("dbu:%+v", dbu)
_, resp, err := client.DatabaseUsers.Update(context.Background(), groupID, username, dbu)
log.Debugf("Update resp:%+v", resp)
if err != nil {
log.Infof("Error Update database user:%s, error: %s", username, err)
if resp != nil && resp.StatusCode == 404 {
log.Warnf("Resource Not Found 404 for UPDATE groupId:%s, database user:%s, err:%+v, resp:%+v", groupID, username, err, resp)
return handler.ProgressEvent{
Message: err.Error(),
OperationStatus: handler.Failed,
HandlerErrorCode: cloudformation.HandlerErrorCodeNotFound}, nil
} else {
log.Warnf("Error UPDATE groupId:%s, database user:%s, err:%+v, resp:%+v", groupID, username, err, resp)
return handler.ProgressEvent{
Message: err.Error(),
OperationStatus: handler.Failed,
HandlerErrorCode: cloudformation.HandlerErrorCodeServiceInternalError}, nil
}
}
return handler.ProgressEvent{
OperationStatus: handler.Success,
Message: "Update Complete",
ResourceModel: currentModel,
}, nil
}