def _setup_nmstate(networks, bondings, options, in_rollback): """ Setup the networks using nmstate as the backend provider. nmstate handles the rollback by itself in case of an error during the transaction or in case the resulted state does not include the desired one. In order to support the connectivity check, the "regular" rollback is used (the Transaction context). """ logging.info('Processing setup through nmstate') desired_state = nmstate.generate_state(networks, bondings) logging.info('Desired state: %s', desired_state) _setup_dynamic_src_routing(networks) nmstate.setup(desired_state, verify_change=not in_rollback) net_info = NetInfo(netinfo_get()) with Transaction(in_rollback=in_rollback, persistent=False) as config: _setup_qos(networks, net_info, config.networks) for net_name, net_attrs in six.viewitems(networks): if net_attrs.get('remove'): config.removeNetwork(net_name) for net_name, net_attrs in six.viewitems(networks): if not net_attrs.get('remove'): config.setNetwork(net_name, net_attrs) for bond_name, bond_attrs in six.viewitems(bondings): if bond_attrs.get('remove'): config.removeBonding(bond_name) for bond_name, bond_attrs in six.viewitems(bondings): if not bond_attrs.get('remove'): config.setBonding(bond_name, bond_attrs) _setup_static_src_routing(networks) config.save() link_setup.setup_custom_bridge_opts(networks) connectivity.check(options)
def _setup_nmstate(networks, bondings, options, in_rollback): """ Setup the networks using nmstate as the backend provider. nmstate handles the rollback by itself in case of an error during the transaction or in case the resulted state does not include the desired one. In order to support the connectivity check, the "regular" rollback is used (the Transaction context). """ logging.info('Processing setup through nmstate') desired_state = nmstate.generate_state(networks, bondings) logging.info('Desired state: %s', desired_state) nmstate.setup(desired_state, verify_change=not in_rollback) with Transaction(in_rollback=in_rollback) as config: config.networks = { name: attrs for name, attrs in six.viewitems(networks) if not attrs.get('remove') } config.bonds = { name: attrs for name, attrs in six.viewitems(bondings) if not attrs.get('remove') } connectivity.check(options)
def _setup_ovs(networks, bondings, options, net_info, in_rollback): _ovs_info = ovs_info.OvsInfo() ovs_nets = ovs_info.create_netinfo(_ovs_info)['networks'] nets2add, nets2edit, nets2remove = _split_setup_actions(networks, ovs_nets) bonds2add, bonds2edit, bonds2remove = _split_setup_actions( bondings, net_info['bondings']) # TODO: If a nework is to be edited, we remove it and recreate again. # We should implement editation. nets2add.update(nets2edit) nets2remove.update(nets2edit) # FIXME: we are not able to move a nic from bond to network in one setup with Transaction(in_rollback=in_rollback) as config: setup_bonds = SetupBonds(bonds2add, bonds2edit, bonds2remove, config) with ifacquire.Transaction(ovs_nets) as acq: _remove_networks(nets2remove, _ovs_info, config) setup_bonds.remove_bonds() # Post removal of nets, update ovs_nets. ovs_nets = ovs_info.create_netinfo(_ovs_info)['networks'] kernel_bonds = bond.Bond.bonds() validator.validate_nic_usage( nets2add, bonds2add, _get_kernel_nets_nics(ovs_nets, kernel_bonds), _get_kernel_bonds_slaves(kernel_bonds), ) acq.acquire(setup_bonds.ifaces_for_acquirement) setup_bonds.edit_bonds() setup_bonds.add_bonds() _add_networks(nets2add, _ovs_info, config, acq) ovs_switch.update_network_to_bridge_mappings(ovs_info.OvsInfo()) setup_ipv6autoconf(networks) set_ovs_links_up(nets2add, bonds2add, bonds2edit) setup_ovs_ip_config(nets2add, nets2remove) _setup_ovs_dns(nets2add) connectivity.check(options)
def _setup_legacy(networks, bondings, options, net_info, in_rollback): _netinfo = CachingNetInfo(net_info) with Ifcfg(_netinfo, in_rollback) as configurator: # from this point forward, any exception thrown will be handled by # Configurator.__exit__. legacy_switch.remove_networks(networks, bondings, configurator, _netinfo) legacy_switch.bonds_setup(bondings, configurator, _netinfo, in_rollback) legacy_switch.add_missing_networks(configurator, networks, bondings, _netinfo) connectivity.check(options)
def _setup_ovs(networks, bondings, options, net_info, in_rollback): _ovs_info = ovs_info.OvsInfo() ovs_nets = ovs_info.create_netinfo(_ovs_info)['networks'] nets2add, nets2edit, nets2remove = _split_setup_actions( networks, ovs_nets) bonds2add, bonds2edit, bonds2remove = _split_setup_actions( bondings, net_info['bondings']) # TODO: If a nework is to be edited, we remove it and recreate again. # We should implement editation. nets2add.update(nets2edit) nets2remove.update(nets2edit) # FIXME: we are not able to move a nic from bond to network in one setup with Transaction(in_rollback=in_rollback) as config: setup_bonds = SetupBonds(bonds2add, bonds2edit, bonds2remove, config) with ifacquire.Transaction(ovs_nets) as acq: _remove_networks(nets2remove, _ovs_info, config) setup_bonds.remove_bonds() # Post removal of nets, update ovs_nets. ovs_nets = ovs_info.create_netinfo(_ovs_info)['networks'] kernel_bonds = bond.Bond.bonds() validator.validate_nic_usage( nets2add, bonds2add, _get_kernel_nets_nics(ovs_nets, kernel_bonds), _get_kernel_bonds_slaves(kernel_bonds)) acq.acquire(setup_bonds.ifaces_for_acquirement) setup_bonds.edit_bonds() setup_bonds.add_bonds() _add_networks(nets2add, _ovs_info, config, acq) ovs_switch.update_network_to_bridge_mappings(ovs_info.OvsInfo()) setup_ipv6autoconf(networks) set_ovs_links_up(nets2add, bonds2add, bonds2edit) setup_ovs_ip_config(nets2add, nets2remove) _setup_ovs_dns(nets2add) connectivity.check(options)
def _setup_nmstate(networks, bondings, options, in_rollback): """ Setup the networks using nmstate as the backend provider. nmstate handles the rollback by itself in case of an error during the transaction or in case the resulted state does not include the desired one. In order to support the connectivity check, the "regular" rollback is used (the Transaction context). """ logging.info('Processing setup through nmstate') desired_state = nmstate.generate_state(networks, bondings) nmstate.setup(desired_state, verify_change=not in_rollback) with Transaction(in_rollback=in_rollback) as config: config.networks = { name: attrs for name, attrs in six.viewitems(networks) if not attrs.get('remove') } config.bonds = { name: attrs for name, attrs in six.viewitems(bondings) if not attrs.get('remove') } connectivity.check(options)
def _setup_nmstate(networks, bondings, options, in_rollback, net_info): """ Setup the networks using nmstate as the backend provider. nmstate handles the rollback by itself in case of an error during the transaction or in case the resulted state does not include the desired one. In order to support the connectivity check, the "regular" rollback is used (the Transaction context). """ logging.info('Processing setup through nmstate') desired_state = nmstate.generate_state(networks, bondings) logging.info('Desired state: %s', desired_state) _setup_dynamic_src_routing(networks) vlan_ifaces_states = _generate_vlan_ifaces_states(desired_state, net_info) logging.info('Reapply VLANs desired state: %s', vlan_ifaces_states) nmstate.setup(desired_state, verify_change=not in_rollback) if vlan_ifaces_states: nmstate.setup({'interfaces': vlan_ifaces_states}, verify_change=not in_rollback) with Transaction(in_rollback=in_rollback) as config: for net_name, net_attrs in six.viewitems(networks): if net_attrs.get('remove'): config.removeNetwork(net_name) for net_name, net_attrs in six.viewitems(networks): if not net_attrs.get('remove'): config.setNetwork(net_name, net_attrs) for bond_name, bond_attrs in six.viewitems(bondings): if bond_attrs.get('remove'): config.removeBonding(bond_name) for bond_name, bond_attrs in six.viewitems(bondings): if not bond_attrs.get('remove'): config.setBonding(bond_name, bond_attrs) _setup_static_src_routing(networks) connectivity.check(options)
def test_check_timeout_fail(self): with pytest.raises(ConfigNetworkError): connectivity.check({'connectivityTimeout': 0})
def test_check_timeout_success(self): connectivity.check({'connectivityTimeout': 2})
def test_check_default_timeout_success(self): connectivity.check({})
def test_check_disabled(self): connectivity.check({'connectivityCheck': False})
def test_check_timeout_fail(self): with self.assertRaises(ConfigNetworkError): connectivity.check({'connectivityTimeout': 0})
def test_check_timeout_success(self): with self.assertNotRaises(): connectivity.check({'connectivityTimeout': 2})
def test_check_default_timeout_success(self): with self.assertNotRaises(): connectivity.check({})
def test_check_disabled(self): with self.assertNotRaises(): connectivity.check({'connectivityCheck': False})