'Create a new OpenNebula node.
@inherits: :class:`NodeDriver.create_node`
:keyword networks: List of virtual networks to which this node should
connect. (optional)
:type    networks: :class:`OpenNebulaNetwork` or
``list`` of :class:`OpenNebulaNetwork`'

def create_node(self, **kwargs):

    compute = ET.Element('COMPUTE')
    name = ET.SubElement(compute, 'NAME')
    name.text = kwargs['name']
    instance_type = ET.SubElement(compute, 'INSTANCE_TYPE')
    instance_type.text = kwargs['size'].name
    storage = ET.SubElement(compute, 'STORAGE')
    ET.SubElement(storage, 'DISK', {'image': ('%s' % str(kwargs['image'].id))})
    if ('networks' in kwargs):
        if (not isinstance(kwargs['networks'], list)):
            kwargs['networks'] = [kwargs['networks']]
        networkGroup = ET.SubElement(compute, 'NETWORK')
        for network in kwargs['networks']:
            if network.address:
                ET.SubElement(networkGroup, 'NIC', {'network': ('%s' % str(network.id)), 'ip': network.address})
            else:
                ET.SubElement(networkGroup, 'NIC', {'network': ('%s' % str(network.id))})
    xml = ET.tostring(compute)
    node = self.connection.request('/compute', method='POST', data=xml).object
    return self._to_node(node)
