コード例 #1
0
def configure_vscsis(config_devs, vals):
    """Create the config for vscsis (virtual scsi devices).
    """
    devidlist = []
    config_scsi = []
    if len(vals.vscsi) == 0:
        return 0

    scsi_devices = vscsi_util.vscsi_get_scsidevices()
    for (p_dev, v_dev, backend) in vals.vscsi:
        tmp = p_dev.split(':')
        if len(tmp) == 4:
            (p_hctl, block) = vscsi_util._vscsi_hctl_block(p_dev, scsi_devices)
        else:
            (p_hctl, block) = vscsi_util._vscsi_block_scsiid_to_hctl(p_dev, scsi_devices)

        if p_hctl == None:
            raise ValueError("Cannot find device \"%s\"" % p_dev)

        for config in config_scsi:
            dev = vscsi_convert_sxp_to_dict(config)
            if dev['v-dev'] == v_dev:
                raise ValueError('The virtual device "%s" is already defined' % v_dev)

        v_hctl = v_dev.split(':')
        devid = int(v_hctl[0])
        config_scsi.append(['dev', \
                        ['state', 'Initialising'], \
                        ['devid', devid], \
                        ['p-dev', p_hctl], \
                        ['p-devname', block], \
                        ['v-dev', v_dev] ])

        if vscsi_lookup_devid(devidlist, devid) == 0:
            devidlist.append([devid, backend])

    for devid, backend in devidlist:
        tmp = []
        for config in config_scsi:
            dev = vscsi_convert_sxp_to_dict(config)
            if dev['devid'] == devid:
                tmp.append(config)

        tmp.insert(0, 'vscsi')
        if backend:
            tmp.append(['backend', backend])
        config_devs.append(['device', tmp])
コード例 #2
0
ファイル: create.py プロジェクト: amodj/Utopia
def configure_vscsis(config_devs, vals):
    """Create the config for vscsis (virtual scsi devices).
    """

    def get_devid(hctl):
        return int(hctl.split(':')[0])

    if len(vals.vscsi) == 0:
        return 0

    config_scsi = {}
    pHCTL_list = []
    vHCTL_list = []

    scsi_devices = vscsi_util.vscsi_get_scsidevices()
    for (p_dev, v_dev, backend) in vals.vscsi:
        (p_hctl, devname) = \
            vscsi_util.vscsi_get_hctl_and_devname_by(p_dev, scsi_devices)

        if p_hctl == None:
            raise ValueError('Cannot find device "%s"' % p_dev)

        feature_host = 0
        if v_dev == 'host':
            if serverType == SERVER_XEN_API:
                # TODO
                raise ValueError("SCSI devices assignment by HBA is not implemeted")
            feature_host = 1
            scsi_info = []
            devid = get_devid(p_hctl)
            for (pHCTL, devname, _, _) in scsi_devices:
                if get_devid(pHCTL) == devid:
                    scsi_info.append([devid, pHCTL, devname, pHCTL])
        else:
            scsi_info = [[get_devid(v_dev), p_hctl, devname, v_dev]]

        devid_key = scsi_info[0][0]
        try:
            config = config_scsi[devid_key]
        except KeyError:
            config = {'feature-host': feature_host, 'backend': backend, 'devs': []}

        devs = config['devs']
        for (devid, pHCTL, devname, vHCTL) in scsi_info:
            if pHCTL in pHCTL_list:
                raise ValueError('The physical device "%s" is already defined' % pHCTL)
            if vHCTL in vHCTL_list:
                raise ValueError('The virtual device "%s" is already defined' % vHCTL)
            pHCTL_list.append(pHCTL)
            vHCTL_list.append(vHCTL)
            devs.append(['dev', \
                         ['state', xenbusState['Initialising']], \
                         ['devid', devid], \
                         ['p-dev', pHCTL], \
                         ['p-devname', devname], \
                         ['v-dev', vHCTL] ])

        if config['feature-host'] != feature_host:
            raise ValueError('The physical device "%s" cannot define '
                             'because mode is different' % scsi_info[0][1])
        if config['backend'] != backend:
            raise ValueError('The physical device "%s" cannot define '
                             'because backend is different' % scsi_info[0][1])

        config['devs'] = devs
        config_scsi[devid_key] = config

    for config in config_scsi.values():
        device = ['vscsi', ['feature-host', config['feature-host']]]
        for dev in config['devs']:
            device.append(dev)
        if config['backend']:
            device.append(['backend', config['backend']])
        config_devs.append(['device', device])