def METHOD_NAME(module):
    params = module.params
    client = hashivault_auth_client(params)
    mount_point = params.get('mount_point').strip('/')
    role_file = params.get('role_file')
    token_type = params.get('token_type')
    name = params.get('name').strip('/')
    state = params.get('state')
    desired_state = dict()
    exists = False
    changed = False
    if role_file:
        desired_state = json.loads(open(params.get('role_file'), 'r').read())
    else:
        desired_state['bound_service_account_names'] = params.get('bound_service_account_names')
        desired_state['bound_service_account_namespaces'] = params.get('bound_service_account_namespaces')
        desired_state['ttl'] = params.get('ttl')
        desired_state['max_ttl'] = params.get('max_ttl')
        desired_state['period'] = params.get('period')
        desired_state['policies'] = params.get('policies')
        desired_state['token_type'] = params.get('token_type')
    # check if role exists
    try:
        existing_roles = client.auth.kubernetes.list_roles(mount_point=mount_point)
        if name in existing_roles['keys']:
            # this role exists
            exists = True
    except Exception:
        # no roles exist yet
        pass
    if not exists and state == 'present':
        changed = True
    # compare current_state to desired_state
    if exists and state == 'present' and not changed:
        current_state = client.auth.kubernetes.read_role(name=name, mount_point=mount_point)
        # Map a couple elements
        if 'ttl' not in current_state and 'token_ttl' in current_state:
            current_state['ttl'] = current_state['token_ttl']
        if 'max_ttl' not in current_state and 'token_max_ttl' in current_state:
            current_state['max_ttl'] = current_state['token_max_ttl']
        if 'period' not in current_state and 'token_period' in current_state:
            current_state['period'] = current_state['token_period']
        for key in desired_state.keys():
            if key in current_state and desired_state[key] != current_state[key]:
                changed = True
    elif exists and state == 'absent':
        changed = True
    if changed and state == 'present' and not module.check_mode:
        client.auth.kubernetes.create_role(name=name, mount_point=mount_point, **desired_state)
    elif changed and state == 'absent' and not module.check_mode:
        client.auth.kubernetes.delete_role(name=name, mount_point=mount_point)
    return {'changed': changed}