Exemple #1
0
    def __init__(self, config):
        self._dom = FakeDomain(config)
        self.log = logging.getLogger()
        self.cif = fake.ClientIF()
        self._domain = DomainDescriptor(config.xmls["00-before.xml"])
        self.id = self._domain.id
        self._md_desc = metadata.Descriptor.from_xml(
            config.xmls["00-before.xml"])

        drive = config.values["drive"]
        self._devices = {
            "disk": [
                storage.Drive(**drive,
                              volumeChain=xml_chain(
                                  config.xmls["00-before.xml"]),
                              log=self.log)
            ]
        }

        # Add the drives to to IRS:
        self.cif.irs.prepared_volumes = {
            (drive["domainID"], drive["imageID"], vol_id): vol_info
            for vol_id, vol_info in config.values["volumes"].items()
        }

        self.conf = self._conf_devices(config)
        self.conf["vmId"] = config.values["vm-id"]
        self.conf["xml"] = config.xmls["00-before.xml"]

        self._external = False  # Used when syncing metadata.
        self.volume_monitor = thinp.VolumeMonitor(self, self.log)
        self._confLock = threading.Lock()
        self._drive_merger = DriveMerger(self)
        self._migrationSourceThread = migration.SourceThread(self)
    def testGetChunkedDrives(self, disk_conf, expected):
        with fake.VM() as testvm:
            vda = storage.Drive(self.log, **drive_config(**disk_conf))
            testvm._devices[hwclass.DISK] = [vda]

            drives = [drive.name for drive in testvm.getChunkedDrives()]
            assert drives == expected
Exemple #3
0
    def test_devices_storage(self):
        drive_params = {
            'device': hwclass.DISK,
            'iface': 'sata',
            'index': 0,
            # *ID are not validated by the Drive class
            'shared': 'transient',
            'domainID': 'domainID',
            'imageID': 'imageID',
            'poolID': 'poolID',
            'volumeID': 'volumeID',
        }
        expected_xml = """<ovirt-vm:vm xmlns:ovirt-vm="http://ovirt.org/vm/1.0">
    <ovirt-vm:device devtype="disk" name="sda">
        <ovirt-vm:domainID>domainID</ovirt-vm:domainID>
        <ovirt-vm:imageID>imageID</ovirt-vm:imageID>
        <ovirt-vm:poolID>poolID</ovirt-vm:poolID>
        <ovirt-vm:shared>transient</ovirt-vm:shared>
        <ovirt-vm:volumeID>volumeID</ovirt-vm:volumeID>
    </ovirt-vm:device>
</ovirt-vm:vm>"""
        dev_map = common.empty_dev_map()
        dev_map[hwclass.DISK].append(storage.Drive(self.log, **drive_params))
        common.save_device_metadata(self.md_desc, dev_map, self.log)
        self.assertXMLEqual(self.md_desc.to_xml(), expected_xml)
Exemple #4
0
def make_drive(log, index, **param_dict):
    conf = drive_config(index=str(index),
                        domainID='domain_%s' % index,
                        poolID='pool_%s' % index,
                        imageID='image_%s' % index,
                        volumeID='volume_%s' % index,
                        **param_dict)
    return storage.Drive(log, **conf)
Exemple #5
0
    def test_shared_from_metadata(self):

        md_desc = metadata.Descriptor.from_xml(_DRIVE_TRANSIENT_DISK_XML)
        root = xmlutils.fromstring(_DRIVE_TRANSIENT_DISK_XML)

        dev_xml = root.find('./devices/disk')

        with md_desc.device(devtype='disk', name='sda') as meta:
            dev_obj = storage.Drive(self.log,
                                    **storagexml.parse(dev_xml, meta))
            assert dev_obj['shared'] == storage.DRIVE_SHARED_TYPE.TRANSIENT
Exemple #6
0
    def test_devices_storage_iotune(self):
        drive_params = {
            'index': 0,
            'cache': 'none',
            'name': 'vda',
            'format': 'raw',
            'bootOrder': '1',
            'discard': False,
            'diskType': 'block',
            'specParams': {
                'ioTune': {
                    'write_bytes_sec': 0,
                    'total_iops_sec': 0,
                    'read_iops_sec': 100,
                    'read_bytes_sec': 0,
                    'write_iops_sec': 100,
                    'total_bytes_sec': 0
                }
            },
            'iface': 'virtio',
            'device': 'disk',
            'path': '/some/path',
            'serial': 'random-serial',
            'propagateErrors': 'off',
            'type': 'disk',
            # *ID are not validated by the Drive class
            'shared': 'transient',
            'domainID': 'domainID',
            'imageID': 'imageID',
            'poolID': 'poolID',
            'volumeID': 'volumeID',
        }
        expected_xml = """<ovirt-vm:vm xmlns:ovirt-vm="http://ovirt.org/vm/1.0">
    <ovirt-vm:device devtype="disk" name="vda">
        <ovirt-vm:domainID>domainID</ovirt-vm:domainID>
        <ovirt-vm:imageID>imageID</ovirt-vm:imageID>
        <ovirt-vm:managed type="bool">False</ovirt-vm:managed>
        <ovirt-vm:poolID>poolID</ovirt-vm:poolID>
        <ovirt-vm:shared>transient</ovirt-vm:shared>
        <ovirt-vm:volumeID>volumeID</ovirt-vm:volumeID>
        <ovirt-vm:specParams />
    </ovirt-vm:device>
</ovirt-vm:vm>"""
        dev_map = common.empty_dev_map()
        dev_map[hwclass.DISK].append(storage.Drive(self.log, **drive_params))
        common.save_device_metadata(self.md_desc, dev_map, self.log)
        self.assertXMLEqual(self.md_desc.to_xml(), expected_xml)
Exemple #7
0
    def __init__(self, config):
        self._dom = FakeDomain(config)
        self.log = logging.getLogger()
        self.cif = fake.ClientIF()
        self._domain = DomainDescriptor(config.xmls["00-before.xml"])
        self.id = self._domain.id
        self._md_desc = metadata.Descriptor.from_xml(
            config.xmls["00-before.xml"])

        drive = config.values["drive"]
        self._devices = {
            "disk": [
                storage.Drive(**drive,
                              volumeChain=xml_chain(
                                  config.xmls["00-before.xml"]),
                              log=self.log)
            ]
        }

        # Add the drives to to IRS:
        self.cif.irs.prepared_volumes = {
            (drive["domainID"], drive["imageID"], vol_id): vol_info
            for vol_id, vol_info in config.values["volumes"].items()
        }

        # Add the drive block info to fake domain.  This value is returned by
        # FakeDomain.blockInfo().
        top_volume = config.values["volumes"][drive["volumeID"]]
        self._dom.drives[drive["path"]] = {
            "capacity": top_volume["capacity"],
            "alloc": 0,
            "physical": top_volume["apparentsize"],
        }

        self.conf = self._conf_devices(config)
        self.conf["vmId"] = config.values["vm-id"]
        self.conf["xml"] = config.xmls["00-before.xml"]

        self._external = False  # Used when syncing metadata.
        self.drive_monitor = FakeDriveMonitor()
        self._confLock = threading.Lock()
        self._drive_merger = DriveMerger(self)
Exemple #8
0
    def test_disk_specParams_payload_device(self):
        payload_params = {
            u'index': u'3',
            u'iface': u'ide',
            u'specParams': {
                u'vmPayload': {
                    u'volId': u'config-2',
                    u'file': {
                        u'openstack/content/0000': u'A',
                        u'openstack/latest/meta_data.json': u'B',
                        u'openstack/latest/user_data': u'C',
                    }
                }
            },
            u'readonly': u'true',
            u'deviceId': u'e5cd57aa-6eb6-424b-b16b-83ef07bf9cca',
            u'shared': u'false',
            u'device': u'cdrom',
            u'path': u'',
            u'type': u'disk'
        }
        expected_xml = """<ovirt-vm:vm xmlns:ovirt-vm="http://ovirt.org/vm/1.0">
<ovirt-vm:device name="hdd" devtype="disk">
  <ovirt-vm:deviceId>e5cd57aa-6eb6-424b-b16b-83ef07bf9cca</ovirt-vm:deviceId>
  <ovirt-vm:managed type="bool">False</ovirt-vm:managed>
    <ovirt-vm:shared>false</ovirt-vm:shared>
    <ovirt-vm:specParams>
     <ovirt-vm:vmPayload>
       <ovirt-vm:volId>config-2</ovirt-vm:volId>
       <ovirt-vm:file path='openstack/content/0000'>A</ovirt-vm:file>
       <ovirt-vm:file path='openstack/latest/meta_data.json'>B</ovirt-vm:file>
       <ovirt-vm:file path='openstack/latest/user_data'>C</ovirt-vm:file>
     </ovirt-vm:vmPayload>
    </ovirt-vm:specParams>
  </ovirt-vm:device>
</ovirt-vm:vm>"""
        dev_map = common.empty_dev_map()
        dev_map[hwclass.DISK].append(storage.Drive(self.log, **payload_params))
        common.save_device_metadata(self.md_desc, dev_map, self.log)
        self.assertXMLEqual(self.md_desc.to_xml(), expected_xml)
Exemple #9
0
def make_drive(drive_conf, shared_type=storage.DRIVE_SHARED_TYPE.EXCLUSIVE):
    drive_conf['shared'] = shared_type
    return storage.Drive(log, **drive_conf)