'Set metadata for the specified node.
:keyword  node: The existing target Node (instance) for the request.
:type     node: ``Node``
:keyword  metadata: Set (or clear with None) metadata for this
particular node.
:type     metadata: ``dict`` or ``None``
:return: True if successful
:rtype:  ``bool``'

def ex_set_node_metadata(self, node, metadata):

    if (not isinstance(node, Node)):
        raise ValueError('Must    specify    a    valid    libcloud    node    object.')
    node_name = node.name
    zone_name = node.extra['zone'].name
    if (('metadata' in node.extra) and ('fingerprint' in node.extra['metadata'])):
        current_fp = node.extra['metadata']['fingerprint']
    else:
        current_fp = 'absent'
    body = self._format_metadata(current_fp, metadata)
    request = ('/zones/%s/instances/%s/setMetadata' % (zone_name, node_name))
    self.connection.async_request(request, method='POST', data=body)
    return True
