예제 #1
0
    def validate_integrity(self):
        invalid = {}
        # validate networks integrity
        invalid_networks = list(
            set(self.info['networks']) - set(self._get_all_networks_name()))
        if invalid_networks:
            invalid['networks'] = invalid_networks

        # validate storagepools integrity
        pool_uri = self.info['storagepool']
        pool_name = pool_name_from_uri(pool_uri)
        if pool_name not in self._get_all_storagepools_name():
            invalid['storagepools'] = [pool_name]

        # validate iso integrity
        # FIXME when we support multiples cdrom devices
        iso = self.info.get('cdrom')
        if iso:
            if os.path.exists(iso):
                st_mode = os.stat(iso).st_mode
                if not (stat.S_ISREG(st_mode) or stat.S_ISBLK(st_mode)):
                    invalid['cdrom'] = [iso]
            elif not check_url_path(iso):
                invalid['cdrom'] = [iso]

        self.info['invalid'] = invalid

        return self.info
예제 #2
0
    def validate_integrity(self):
        invalid = {}
        # validate networks integrity
        invalid_networks = list(set(self.info['networks']) -
                                set(self._get_all_networks_name()))
        if invalid_networks:
            invalid['networks'] = invalid_networks

        # validate storagepools integrity
        pool_uri = self.info['storagepool']
        pool_name = pool_name_from_uri(pool_uri)
        if pool_name not in self._get_all_storagepools_name():
            invalid['storagepools'] = [pool_name]

        # validate iso integrity
        # FIXME when we support multiples cdrom devices
        iso = self.info.get('cdrom')
        if iso:
            if os.path.exists(iso):
                st_mode = os.stat(iso).st_mode
                if not (stat.S_ISREG(st_mode) or stat.S_ISBLK(st_mode)):
                    invalid['cdrom'] = [iso]
            elif not check_url_path(iso):
                invalid['cdrom'] = [iso]

        self.info['invalid'] = invalid

        return self.info
예제 #3
0
    def _get_disks_xml(self, vm_uuid):
        # Current implementation just allows to create disk in one single
        # storage pool, so we cannot mix the types (scsi volumes vs img file)
        storage_type = self._get_storage_type()
        storage_path = self._get_storage_path()

        base_disk_params = {'type': 'disk', 'disk': 'file',
                            'bus': self.info['disk_bus']}
        logical_disk_params = {'format': 'raw'}
        iscsi_disk_params = {'disk': 'block', 'format': 'raw'}

        scsi_disk = 'volume' if self.fc_host_support else 'block'
        scsi_disk_params = {'disk': scsi_disk, 'type': 'lun',
                            'format': 'raw', 'bus': 'scsi'}

        disks_xml = ''
        pool_name = pool_name_from_uri(self.info['storagepool'])
        for index, disk in enumerate(self.info['disks']):
            params = dict(base_disk_params)
            params['format'] = disk['format']
            params.update(locals().get('%s_disk_params' % storage_type, {}))
            params['index'] = index

            volume = disk.get('volume')
            if volume is not None:
                params['path'] = self._get_volume_path(pool_name, volume)
            else:
                volume = "%s-%s.img" % (vm_uuid, params['index'])
                params['path'] = os.path.join(storage_path, volume)

            disks_xml += get_disk_xml(params)[1]

        return unicode(disks_xml, 'utf-8')
예제 #4
0
    def _get_disks_xml(self, vm_uuid):
        # Current implementation just allows to create disk in one single
        # storage pool, so we cannot mix the types (scsi volumes vs img file)
        storage_type = self._get_storage_type()
        storage_path = self._get_storage_path()

        base_disk_params = {
            'type': 'disk',
            'disk': 'file',
            'bus': self.info['disk_bus']
        }
        logical_disk_params = {'format': 'raw'}
        iscsi_disk_params = {'disk': 'block', 'format': 'raw'}

        scsi_disk = 'volume' if self.fc_host_support else 'block'
        scsi_disk_params = {
            'disk': scsi_disk,
            'type': 'lun',
            'format': 'raw',
            'bus': 'scsi'
        }

        disks_xml = ''
        pool_name = pool_name_from_uri(self.info['storagepool'])
        for index, disk in enumerate(self.info['disks']):
            params = dict(base_disk_params)
            params['format'] = disk['format']
            params.update(locals().get('%s_disk_params' % storage_type, {}))
            params['index'] = index

            volume = disk.get('volume')
            if volume is not None:
                params['path'] = self._get_volume_path(pool_name, volume)
            else:
                volume = "%s-%s.img" % (vm_uuid, params['index'])
                params['path'] = os.path.join(storage_path, volume)

            disks_xml += get_disk_xml(params)[1]

        return unicode(disks_xml, 'utf-8')