TODO(rdelinger) think about changing _format
        This is a pretty specialized function.
        It takes an existing volume, and creates a new volume
        that is backed by the existing volume
        Sadly there is no easy way to do this in libvirt, the
        best way I've found is to just create some xml and use the createXML
        function

def create_backed_vol(self, name, backer, _format='qcow2'):
        """
        TODO(rdelinger) think about changing _format
        This is a pretty specialized function.
        It takes an existing volume, and creates a new volume
        that is backed by the existing volume
        Sadly there is no easy way to do this in libvirt, the
        best way I've found is to just create some xml and use the createXML
        function
        """
        vol_xml = ElementTree.Element('volume')
        vol_name = ElementTree.SubElement(vol_xml, 'name')
        name = '{0}.{1}'.format(name, _format)
        vol_name.text = name

        target = ElementTree.SubElement(vol_xml, 'target')
        target_format = ElementTree.SubElement(target, 'format')
        target_format.set('type', _format)

        vol_cap = ElementTree.SubElement(vol_xml, 'capacity')
        vol_cap.set('unit', 'bytes')  # @TODO(rdelinger) this should be dynamic
        vol_cap.text = backer.capacity

        backing_store = ElementTree.SubElement(vol_xml, 'backingStore')
        bs_path = ElementTree.SubElement(backing_store, 'path')
        bs_path.text = backer.path

        bs_format = ElementTree.SubElement(backing_store, 'format')
        bs_format.set('type', backer.format)

        XMLString = ElementTree.tostring(vol_xml)
        self.virsp.createXML(XMLString, 0)

        return self.find_volume(name)