'Creates and returns node.
:keyword    ex_network: link to a "Network" e.g.,
``https://services.vcloudexpress...``
:type       ex_network: ``str``
:keyword    ex_vdc: Name of organisation\'s virtual data
center where vApp VMs will be deployed.
:type       ex_vdc: ``str``
:keyword    ex_cpus: number of virtual cpus (limit depends on provider)
:type       ex_cpus: ``int``
:type       ex_row: ``str``
:type       ex_group: ``str``'

def create_node(self, **kwargs):

    name = kwargs['name']
    image = kwargs['image']
    size = kwargs['size']
    try:
        network = kwargs.get('ex_network', self.networks[0].get('href'))
    except IndexError:
        network = ''
    password = None
    auth = self._get_and_check_auth(kwargs.get('auth'))
    password = auth.password
    instantiate_xml = InstantiateVAppXML(name=name, template=image.id, net_href=network, cpus=str(kwargs.get('ex_cpus', 1)), memory=str(size.ram), password=password, row=kwargs.get('ex_row', None), group=kwargs.get('ex_group', None))
    vdc = self._get_vdc(kwargs.get('ex_vdc', None))
    content_type = 'application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml'
    res = self.connection.request(('%s/action/instantiateVAppTemplate' % get_url_path(vdc.id)), data=instantiate_xml.tostring(), method='POST', headers={'Content-Type': content_type})
    vapp_path = get_url_path(res.object.get('href'))
    res = self.connection.request(('%s/action/deploy' % vapp_path), method='POST')
    self._wait_for_task_completion(res.object.get('href'))
    res = self.connection.request(('%s/power/action/powerOn' % vapp_path), method='POST')
    res = self.connection.request(vapp_path)
    node = self._to_node(res.object)
    if getattr(auth, 'generated', False):
        node.extra['password'] = auth.password
    return node
