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

def _clean_create_kwargs(**kwargs):
    '''
    Sanatize kwargs to be sent to create_server
    '''
    VALID_OPTS = {
        'name': six.string_types,
        'image': six.string_types,
        'flavor': six.string_types,
        'auto_ip': bool,
        'ips': list,
        'ip_pool': six.string_types,
        'root_volume': six.string_types,
        'boot_volume': six.string_types,
        'terminate_volume': bool,
        'volumes': list,
        'meta': dict,
        'files': dict,
        'reservation_id': six.string_types,
        'security_groups': list,
        'key_name': six.string_types,
        'availability_zone': six.string_types,
        'block_device_mapping': dict,
        'block_device_mapping_v2': dict,
        'nics': list,
        'scheduler_hints': dict,
        'config_drive': bool,
        'disk_config': six.string_types,  # AUTO or MANUAL
        'admin_pass': six.string_types,
        'wait': bool,
        'timeout': int,
        'reuse_ips': bool,
        'network': dict,
        'boot_from_volume': bool,
        'volume_size': int,
        'nat_destination': six.string_types,
        'group': six.string_types,
        'userdata': six.string_types,
    }
    extra = kwargs.pop('extra', {})
    for key, value in six.iteritems(kwargs.copy()):
        if key in VALID_OPTS:
            if isinstance(value, VALID_OPTS[key]):
                continue
            log.error('Error %s: %s is not of type %s', key, value, VALID_OPTS[key])
        kwargs.pop(key)
    return __utils__['dictupdate.update'](kwargs, extra)