コード例 #1
0
 def test_parse_bond_options(self):
     self.assertEqual(bonding.parse_bond_options('mode=4 custom=foo:bar'), {
         'custom': {
             'foo': 'bar'
         },
         'mode': '4'
     })
コード例 #2
0
 def test_parse_bond_options(self):
     self.assertEqual(
         bonding.parse_bond_options('mode=4 miimon=100'),
         {
             'mode': '4',
             'miimon': '100'
         },
     )
コード例 #3
0
def bondings_caps(running_config):
    ovs_bonding_caps = {}
    routes = netinfo_routes.get_routes()
    for bonding, attrs in iter_ovs_bonds(running_config.bonds):
        options = parse_bond_options(attrs.get('options'), keep_custom=True)
        net_info = _get_net_info(bonding, routes)
        net_info['slaves'] = attrs.get('nics')
        net_info['active_slave'] = _get_active_slave(bonding)
        net_info['opts'] = options
        ovs_bonding_caps[bonding] = net_info
    return ovs_bonding_caps
コード例 #4
0
ファイル: ovs_after_get_caps.py プロジェクト: igoihman/vdsm
def bondings_caps(running_config):
    ovs_bonding_caps = {}
    routes = netinfo_routes.get_routes()
    for bonding, attrs in iter_ovs_bonds(running_config.bonds):
        options = parse_bond_options(attrs.get('options'), keep_custom=True)
        net_info = _get_net_info(bonding, routes)
        net_info['slaves'] = attrs.get('nics')
        net_info['active_slave'] = _get_active_slave(bonding)
        net_info['opts'] = options
        ovs_bonding_caps[bonding] = net_info
    return ovs_bonding_caps
コード例 #5
0
def _setup_ovs_bond(bond, attrs, running_config):
    """ Add OVS bonding and set it requested mode and lacp options.
    As we use custom entry, these values are not validated in network api,
    so we check correct values here.
    """
    commands = []
    commands.extend(['--', '--fake-iface', '--may-exist', 'add-bond',
                     BRIDGE_NAME, bond] + attrs.get('nics'))

    bond_options = parse_bond_options(attrs.get('options'))
    mode = rget(bond_options, ('custom', 'ovs_mode')) or 'active-backup'
    lacp = rget(bond_options, ('custom', 'ovs_lacp')) or 'off'
    commands.extend(['--', 'set', 'port', bond, 'bond_mode=%s' % mode])
    commands.extend(['--', 'set', 'port', bond, 'lacp=%s' % lacp])

    running_config.setBonding(bond, {'nics': attrs.get('nics'),
                                     'options': attrs.get('options')})
    return commands
コード例 #6
0
    def _edit_mode(self, bond, options):
        # TODO: Support setup of all OVS bond-related attributes and move
        # fallback setup into a separate function.

        commands = []

        parsed_options = bonding.parse_bond_options(options)
        mode = parsed_options.get('mode')
        miimon = parsed_options.get('miimon')

        bond_mode = 'active-backup'
        if mode is None:
            lacp = 'off'
        else:
            if mode in ('1', bonding.BONDING_MODES_NUMBER_TO_NAME['1']):
                lacp = 'off'
            elif mode in ('4', bonding.BONDING_MODES_NUMBER_TO_NAME['4']):
                lacp = 'active'
            else:
                # TODO: Validation should be moved to validator.py as soon as
                # we implement bond options canonicalization.
                raise ne.ConfigNetworkError(
                    ne.ERR_BAD_PARAMS,
                    'Mode {} is not available for OVS bondings'.format(mode))
        commands.append(self._ovsdb.set_port_attr(bond, 'bond_mode',
                                                  bond_mode))
        commands.append(self._ovsdb.set_port_attr(bond, 'lacp', lacp))

        if miimon is None:
            bond_detect_mode = 'carrier'
            bond_miimon_interval = None
        else:
            bond_detect_mode = 'miimon'
            bond_miimon_interval = miimon
        commands.append(
            self._ovsdb.set_port_attr(bond, 'other_config:bond-detect-mode',
                                      bond_detect_mode))
        if bond_miimon_interval is not None:
            commands.append(
                self._ovsdb.set_port_attr(bond,
                                          'other_config:bond-miimon-interval',
                                          bond_miimon_interval))

        return commands
コード例 #7
0
def _validate_bond_configuration(attrs, netinfo):
    nics = attrs.get('nics')
    bond_options = parse_bond_options(attrs.get('options'))

    if nics is None or len(attrs.get('nics')) < 2:
        raise Exception('You have to define at least 2 slaves for '
                        'OVS bonding')
    for nic in nics:
        if nic not in netinfo.nics:
            raise Exception('Nic %s does not exist' % nic)

    mode = rget(bond_options, ('custom', 'ovs_mode')) or 'active-backup'
    lacp = rget(bond_options, ('custom', 'ovs_lacp')) or 'off'
    if mode:
        if mode not in VALID_MODES:
            raise Exception('%s is not valid ovs bond mode' % mode)
    if lacp:
        if lacp not in VALID_LACP:
            raise Exception('%s is not valid ovs lacp value' % lacp)
コード例 #8
0
ファイル: switch.py プロジェクト: yingyun001/vdsm
    def _edit_mode(self, bond, options):
        # TODO: Support setup of all OVS bond-related attributes and move
        # fallback setup into a separate function.

        commands = []

        parsed_options = bonding.parse_bond_options(options)
        mode = parsed_options.get('mode')
        miimon = parsed_options.get('miimon')

        bond_mode = 'active-backup'
        if mode is None:
            lacp = 'off'
        else:
            if mode in ('1', bonding.BONDING_MODES_NUMBER_TO_NAME['1']):
                lacp = 'off'
            elif mode in ('4', bonding.BONDING_MODES_NUMBER_TO_NAME['4']):
                lacp = 'active'
            else:
                # TODO: Validation should be moved to validator.py as soon as
                # we implement bond options canonicalization.
                raise ne.ConfigNetworkError(
                    ne.ERR_BAD_PARAMS,
                    'Mode {} is not available for OVS bondings'.format(mode))
        commands.append(self._ovsdb.set_port_attr(
            bond, 'bond_mode', bond_mode))
        commands.append(self._ovsdb.set_port_attr(bond, 'lacp', lacp))

        if miimon is None:
            bond_detect_mode = 'carrier'
            bond_miimon_interval = None
        else:
            bond_detect_mode = 'miimon'
            bond_miimon_interval = miimon
        commands.append(self._ovsdb.set_port_attr(
            bond, 'other_config:bond-detect-mode', bond_detect_mode))
        if bond_miimon_interval is not None:
            commands.append(self._ovsdb.set_port_attr(
                bond, 'other_config:bond-miimon-interval',
                bond_miimon_interval))

        return commands
コード例 #9
0
ファイル: ovs_utils.py プロジェクト: andrewlukoshko/vdsm
def is_ovs_bond(bond_attrs):
    bond_options = parse_bond_options(bond_attrs.get('options', ''))
    ovs_bond = get_bool(rget(bond_options, ('custom', 'ovs')))
    return ovs_bond
コード例 #10
0
 def test_parse_bond_options(self):
     expected = {'mode': '4', 'miimon': '100'}
     assert expected == bonding.parse_bond_options('mode=4 miimon=100')
コード例 #11
0
ファイル: netinfo_test.py プロジェクト: nirs/vdsm
 def test_parse_bond_options(self):
     self.assertEqual(bonding.parse_bond_options('mode=4 custom=foo:bar'),
                      {'custom': {'foo': 'bar'}, 'mode': '4'})
コード例 #12
0
ファイル: ovs_utils.py プロジェクト: rexhsu/vdsm
def is_ovs_bond(bond_attrs):
    bond_options = parse_bond_options(bond_attrs.get('options', ''))
    ovs_bond = get_bool(rget(bond_options, ('custom', 'ovs')))
    return ovs_bond