def disassociate_node(ServerName=None, NodeName=None, EngineAttributes=None):
    """
    Disassociates a node from a Chef server, and removes the node from the Chef server's managed nodes. After a node is disassociated, the node key pair is no longer valid for accessing the Chef API. For more information about how to associate a node, see  AssociateNode .
    A node can can only be disassociated from a server that is in a HEALTHY state. Otherwise, an InvalidStateException is thrown. A ResourceNotFoundException is thrown when the server does not exist. A ValidationException is raised when parameters of the request are not valid.
    See also: AWS API Documentation
    
    
    :example: response = client.disassociate_node(
        ServerName='string',
        NodeName='string',
        EngineAttributes=[
            {
                'Name': 'string',
                'Value': 'string'
            },
        ]
    )
    
    
    :type ServerName: string
    :param ServerName: [REQUIRED]
            The name of the server from which to disassociate the node.
            

    :type NodeName: string
    :param NodeName: [REQUIRED]
            The name of the Chef client node.
            

    :type EngineAttributes: list
    :param EngineAttributes: Engine attributes used for disassociating the node.
            Attributes accepted in a DisassociateNode request:
            CHEF_ORGANIZATION : The Chef organization with which the node was associated. By default only one organization named default can exist.
            (dict) --A name and value pair that is specific to the engine of the server.
            Name (string) --The name of the engine attribute.
            Value (string) --The value of the engine attribute.
            
            

    :rtype: dict
    :return: {
        'NodeAssociationStatusToken': 'string'
    }
    
    
    """
    pass
