'Create a new node instance in Abiquo
All the :class:`Node`s need to be defined inside a VirtualAppliance
(called :class:`NodeGroup` here). If there is no group name defined,
\'libcloud\' name will be used instead.
This method wraps these Abiquo actions:
1. Create a group if it does not exist.
2. Register a new node in the group.
3. Deploy the node and boot it.
4. Retrieves it again to get schedule-time attributes (such as ips
and vnc ports).
The rest of the driver methods has been created in a way that, if any
of these actions fail, the user can not reach an inconsistent state
:keyword    name:   The name for this new node (required)
:type       name:   ``str``
:keyword    size:   The size of resources allocated to this node.
:type       size:   :class:`NodeSize`
:keyword    image:  OS Image to boot on node. (required)
:type       image:  :class:`NodeImage`
:keyword    location: Which data center to create a node in. If empty,
undefined behavior will be selected. (optional)
:type       location: :class:`NodeLocation`
:keyword   group_name:  Which group this node belongs to. If empty,
it will be created into \'libcloud\' group. If
it does not found any group in the target
location (random location if you have not set
the parameter), then it will create a new
group with this name.
:type     group_name:  c{str}
:return:               The newly created node.
:rtype:                :class:`Node`'

def create_node(self, **kwargs):

    (xml_loc, loc) = self._define_create_node_location(**kwargs)
    group = self._define_create_node_group(xml_loc, loc, **kwargs)
    vm = self._define_create_node_node(group, **kwargs)
    self._deploy_remote(vm)
    edit_vm = get_href(vm, 'edit')
    headers = {'Accept': self.NODE_MIME_TYPE}
    vm = self.connection.request(edit_vm, headers=headers).object
    return self._to_node(vm, self)
