func Update()

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
}