in cfn-resources/database-user/cmd/resource/resource.go [143:214]
func Read(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
}
groupID := *currentModel.ProjectId
username := *currentModel.Username
dbName := *currentModel.DatabaseName
databaseUser, resp, err := client.DatabaseUsers.Get(context.Background(), dbName, groupID, username)
if err != nil {
log.Infof("error fetching database user:%s, error: %s", groupID, dbName, username, err)
if resp != nil && resp.StatusCode == 404 {
log.Infof("Resource Not Found 404 for READ groupId:%s, dbName:%s, database user:%s, err:%+v, resp:%+v", groupID, dbName, username, err, resp)
return handler.ProgressEvent{
Message: err.Error(),
OperationStatus: handler.Failed,
HandlerErrorCode: cloudformation.HandlerErrorCodeNotFound}, nil
} else {
log.Infof("Error READ groupId:%s, dbName:%s, database user:%s, err:%+v, resp:%+v", groupID, dbName, username, err, resp)
return handler.ProgressEvent{
Message: err.Error(),
OperationStatus: handler.Failed,
HandlerErrorCode: cloudformation.HandlerErrorCodeServiceInternalError}, nil
}
}
currentModel.DatabaseName = &databaseUser.DatabaseName
currentModel.LdapAuthType = &databaseUser.LDAPAuthType
currentModel.Username = &databaseUser.Username
log.Debugf("databaseUser:%+v", databaseUser)
var roles []RoleDefinition
for i, _ := range databaseUser.Roles {
r := databaseUser.Roles[i]
role := RoleDefinition{
CollectionName: &r.CollectionName,
DatabaseName: &r.DatabaseName,
RoleName: &r.RoleName,
}
roles = append(roles, role)
}
currentModel.Roles = roles
log.Debugf("currentModel.Roles:%+v", roles)
var labels []LabelDefinition
for i, _ := range databaseUser.Labels {
l := databaseUser.Labels[i]
label := LabelDefinition{
Key: &l.Key,
Value: &l.Value,
}
labels = append(labels, label)
}
currentModel.Labels = labels
cfnid := fmt.Sprintf("%s-%s", *currentModel.Username, groupID)
currentModel.UserCFNIdentifier = &cfnid
log.Debugf("READ----> currentModel:%s", spew.Sdump(currentModel))
return handler.ProgressEvent{
OperationStatus: handler.Success,
Message: "Read Complete",
ResourceModel: currentModel,
}, nil
}