<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def present(name, objectType, user, permission, acetype, propagation):
    '''
    Ensure an ACE is present
    '''
    ret = {'name': name,
           'result': True,
           'changes': {},
           'comment': ''}
    tRet = __salt__['win_dacl.check_ace'](name, objectType, user, permission, acetype, propagation, True)
    if tRet['result']:
        if not tRet['Exists']:
            if __opts__['test']:
                ret['result'] = None
                ret['comment'] = 'The ACE is set to be added.'
                ret['changes']['Added ACEs'] = ((
                    '{0} {1} {2} on {3}'
                    ).format(user, acetype, permission, propagation))
                return ret
            addRet = __salt__['win_dacl.add_ace'](name, objectType, user, permission, acetype, propagation)
            if addRet['result']:
                ret['result'] = True
                ret['changes'] = dict(ret['changes'], **addRet['changes'])
            else:
                ret['result'] = False
                ret['comment'] = ' '.join([ret['comment'], addRet['comment']])
        else:
            if __opts__['test']:
                ret['result'] = None
                ret['comment'] = 'The ACE is present.'
    else:
        ret['result'] = False
        ret['comment'] = tRet['comment']
    return ret