'Updates a node.
:param  node: The node you wish to update.
:type   node: :class:`Node`
:param  name: The new name for the node.
:type   name: ``str``
:param  cores: The number of CPUs the node should have.
:type   cores: : ``int``
:param  ram: The amount of ram the node should have.
:type   ram: : ``int``
:param  availability_zone: Update the availability zone.
:type   availability_zone: :class:`ProfitBricksAvailabilityZone`
:param  ex_licence_type: Licence type (WINDOWS, LINUX, OTHER).
:type   ex_licence_type: ``str``
:param  ex_boot_volume: Setting the new boot (HDD) volume.
:type   ex_boot_volume: :class:`StorageVolume`
:param  ex_boot_cdrom: Setting the new boot (CDROM) volume.
:type   ex_boot_cdrom: :class:`StorageVolume`
:param  ex_cpu_family: CPU family (INTEL_XEON, AMD_OPTERON).
:type   ex_cpu_family: ``str``
:return:    Instance of class ``Node``
:rtype:     :class: `Node`'

def ex_update_node(self, node, name=None, cores=None, ram=None, availability_zone=None, ex_licence_type=None, ex_boot_volume=None, ex_boot_cdrom=None, ex_cpu_family=None):

    action = node.extra['href']
    body = {}
    if (name is not None):
        body['name'] = name
    if (cores is not None):
        body['cores'] = cores
    if (ram is not None):
        body['ram'] = ram
    if (availability_zone is not None):
        body['availabilityZone'] = availability_zone.name
    if (ex_licence_type is not None):
        body['licencetype'] = ex_licence_type
    if (ex_boot_volume is not None):
        body['bootVolume'] = ex_boot_volume.id
    if (ex_boot_cdrom is not None):
        body['bootCdrom'] = ex_boot_cdrom.id
    if (ex_cpu_family is not None):
        body['allowReboot'] = True
        body['cpuFamily'] = ex_cpu_family
    response = self.connection.request(action=action, data=body, headers={'Content-Type': 'application/json'}, method='PATCH', with_full_url=True)
    return self._to_node(response.object, response.headers)
