'Clone a server into a customer image.
:param  node: The server to clone
:type   node: :class:`Node`
:param  image_name: The name of the clone image
:type   image_name: ``str``
:param  description: The description of the image
:type   description: ``str``
:rtype: ``bool``'

def ex_clone_node_to_image(self, node, image_name, image_description=None, cluster_id=None, is_guest_Os_Customization=None, tag_key_id=None, tag_value=None):

    if (image_description is None):
        image_description = ''
    node_id = self._node_to_node_id(node)
    if (LooseVersion(self.connection.active_api_version) < LooseVersion('2.4')):
        response = self.connection.request_with_orgId_api_1(('server/%s?clone=%s&desc=%s' % (node_id, image_name, image_description))).object
    else:
        clone_server_elem = ET.Element('cloneServer', {'id': node_id, 'xmlns': TYPES_URN})
        ET.SubElement(clone_server_elem, 'imageName').text = image_name
        if (image_description is not None):
            ET.SubElement(clone_server_elem, 'description').text = image_description
        if (cluster_id is not None):
            ET.SubElement(clone_server_elem, 'clusterId').text = cluster_id
        if (is_guest_Os_Customization is not None):
            ET.SubElement(clone_server_elem, 'guestOsCustomization').text = is_guest_Os_Customization
        if (tag_key_id is not None):
            tag_elem = ET.SubElement(clone_server_elem, 'tagById')
            ET.SubElement(tag_elem, 'tagKeyId').text = tag_key_id
            if (tag_value is not None):
                ET.SubElement(tag_elem, 'value').text = tag_value
        response = self.connection.request_with_orgId_api_2('server/cloneServer', method='POST', data=ET.tostring(clone_server_elem)).object
    if (LooseVersion(self.connection.active_api_version) < LooseVersion('2.4')):
        response_code = findtext(response, 'result', GENERAL_NS)
    else:
        response_code = findtext(response, 'responseCode', TYPES_URN)
    return (response_code in ['IN_PROGRESS', 'SUCCESS'])
