def METHOD_NAME(self,
           infrastructure_id: int,
           name: str,
           ip: str,
           dns: str,
           **kwargs
           ) -> List[Dict]:
    '''
    Creates a new directory instance.
    Args:
        infrastructure_id (int):
            The infrastructure object to bind this directory to.
        name (str):
            Name of the directory instance.
        ip (str):
            The IP Address of the directory server.
        dns (str):
            The DNS domain that this directory is tied to.
        directory_type (optional, str):
            The directory's type.
        ldap_port (optional, str):
            The port number associated to the LDAP service on the
            directory server.
        global_catalog_port (optional, str):
            The port number associated to the Global Catalog service
            running on the directory server.
        smb_port (optional, str):
            The port number associated to the Server Messaging
            Block (SMB) service running on the directory server.
    Returns:
        dict:
            The created directory instance.
    Examples:
        >>> tad.directories.create(
        ...     infrastructure_id=1,
        ...     name='ExampleServer',
        ...     ip='172.16.0.1',
        ...     directory_type='????',
        ...     dns='company.tld',
        ...     )
    '''
    schema = DirectorySchema(unknown=INCLUDE)
    payload = [schema.dump(schema.load(
        dict_clean({
            'infrastructureId': infrastructure_id,
            'name': name,
            'ip': ip,
            'type': kwargs.get('directory_type'),
            'dns': dns,
            'ldapPort': kwargs.get('ldap_port'),
            'globalCatalogPort': kwargs.get('global_catalog_port'),
            'smbPort': kwargs.get('smb_port')
        })
    ))]
    return schema.load(self._post(json=payload), many=True)