'Create a node.  If at first this does not succeed, try, try again.
:param str name: The name of the node.
:param str distribution: The name of the distribution to install on the
node.
:param dict metadata: Metadata to associate with the node.
:return libcloud.compute.base.Node: The created node.'

def create_node(self, name, distribution, metadata={}):

    size = self._default_size
    try:
        image_name = self._image_names[distribution]
    except KeyError:
        raise Exception('Distribution    not    supported    with    provider', distribution, self._driver.name)
    create_node_arguments = self._create_node_arguments()
    (node, addresses) = self._create_with_retry(name=name, image=get_image(self._driver, image_name), size=get_size(self._driver, size), ex_keyname=self._keyname, ex_metadata=metadata, **create_node_arguments)
    public_address = addresses[0]
    if isinstance(public_address, unicode):
        public_address = public_address.encode('ascii')
    if self._use_private_addresses:
        private_address = node.private_ips[0]
    else:
        private_address = None
    if isinstance(private_address, unicode):
        private_address = private_address.encode('ascii')
    return LibcloudNode(provisioner=self, node=node, address=public_address, private_address=private_address, distribution=distribution)
