diff options
Diffstat (limited to 'os_net_config/objects.py')
-rw-r--r-- | os_net_config/objects.py | 150 |
1 files changed, 63 insertions, 87 deletions
diff --git a/os_net_config/objects.py b/os_net_config/objects.py index 5bdbb9c..5fe6e49 100644 --- a/os_net_config/objects.py +++ b/os_net_config/objects.py @@ -81,6 +81,32 @@ def _get_required_field(json, name, object_name): return field +def _update_members(json, nic_mapping, persist_mapping): + """Update object's members fields and pass mapping info to each member. + + :param json: dictionary containing object values + :param nic_mapping: mapping of abstractions to actual nic names + :param persist_mapping: bool indicating mapping file should be permanent + :returns members: updated members + """ + members = [] + + members_json = json.get('members') + if members_json: + if isinstance(members_json, list): + for member in members_json: + # If this member already has a nic mapping, don't overwrite it + if not member.get('nic_mapping'): + member.update({'nic_mapping': nic_mapping}) + member.update({'persist_mapping': persist_mapping}) + members.append(object_from_json(member)) + else: + msg = 'Members must be a list.' + raise InvalidConfigException(msg) + + return members + + def _mapped_nics(nic_mapping=None): mapping = nic_mapping or {} global _MAPPED_NICS @@ -466,17 +492,8 @@ class OvsBridge(_BaseOpts): if not isinstance(ovs_extra, list): ovs_extra = [ovs_extra] fail_mode = json.get('ovs_fail_mode', DEFAULT_OVS_BRIDGE_FAIL_MODE) - members = [] - # members - members_json = json.get('members') - if members_json: - if isinstance(members_json, list): - for member in members_json: - members.append(object_from_json(member)) - else: - msg = 'Members must be a list.' - raise InvalidConfigException(msg) + members = _update_members(json, nic_mapping, persist_mapping) return OvsBridge(name, use_dhcp=use_dhcp, use_dhcpv6=use_dhcpv6, addresses=addresses, routes=routes, mtu=mtu, @@ -534,17 +551,8 @@ class OvsUserBridge(_BaseOpts): if not isinstance(ovs_extra, list): ovs_extra = [ovs_extra] fail_mode = json.get('ovs_fail_mode', DEFAULT_OVS_BRIDGE_FAIL_MODE) - members = [] - # members - members_json = json.get('members') - if members_json: - if isinstance(members_json, list): - for member in members_json: - members.append(object_from_json(member)) - else: - msg = 'Members must be a list.' - raise InvalidConfigException(msg) + members = _update_members(json, nic_mapping, persist_mapping) return OvsUserBridge(name, use_dhcp=use_dhcp, use_dhcpv6=use_dhcpv6, addresses=addresses, routes=routes, mtu=mtu, @@ -592,17 +600,8 @@ class LinuxBridge(_BaseOpts): persist_mapping, defroute, dhclient_args, dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) - members = [] - # members - members_json = json.get('members') - if members_json: - if isinstance(members_json, list): - for member in members_json: - members.append(object_from_json(member)) - else: - msg = 'Members must be a list.' - raise InvalidConfigException(msg) + members = _update_members(json, nic_mapping, persist_mapping) return LinuxBridge(name, use_dhcp=use_dhcp, use_dhcpv6=use_dhcpv6, addresses=addresses, routes=routes, mtu=mtu, @@ -655,17 +654,8 @@ class IvsBridge(_BaseOpts): persist_mapping, defroute, dhclient_args, dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) - members = [] - # members - members_json = json.get('members') - if members_json: - if isinstance(members_json, list): - for member in members_json: - members.append(object_from_json(member)) - else: - msg = 'Members must be a list.' - raise InvalidConfigException(msg) + members = _update_members(json, nic_mapping, persist_mapping) return IvsBridge(name, use_dhcp=use_dhcp, use_dhcpv6=use_dhcpv6, addresses=addresses, routes=routes, mtu=mtu, @@ -715,16 +705,7 @@ class NfvswitchBridge(_BaseOpts): dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) - # members - members = [] - members_json = json.get('members') - if members_json: - if isinstance(members_json, list): - for member in members_json: - members.append(object_from_json(member)) - else: - msg = 'Members must be a list.' - raise InvalidConfigException(msg) + members = _update_members(json, nic_mapping, persist_mapping) options = json.get('options') if not options: @@ -778,17 +759,8 @@ class LinuxTeam(_BaseOpts): dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) bonding_options = json.get('bonding_options') - members = [] - # members - members_json = json.get('members') - if members_json: - if isinstance(members_json, list): - for member in members_json: - members.append(object_from_json(member)) - else: - msg = 'Members must be a list.' - raise InvalidConfigException(msg) + members = _update_members(json, nic_mapping, persist_mapping) return LinuxTeam(name, use_dhcp=use_dhcp, use_dhcpv6=use_dhcpv6, addresses=addresses, routes=routes, mtu=mtu, @@ -837,17 +809,8 @@ class LinuxBond(_BaseOpts): dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) bonding_options = json.get('bonding_options') - members = [] - # members - members_json = json.get('members') - if members_json: - if isinstance(members_json, list): - for member in members_json: - members.append(object_from_json(member)) - else: - msg = 'Members must be a list.' - raise InvalidConfigException(msg) + members = _update_members(json, nic_mapping, persist_mapping) return LinuxBond(name, use_dhcp=use_dhcp, use_dhcpv6=use_dhcpv6, addresses=addresses, routes=routes, mtu=mtu, @@ -902,17 +865,8 @@ class OvsBond(_BaseOpts): ovs_extra = json.get('ovs_extra', []) if not isinstance(ovs_extra, list): ovs_extra = [ovs_extra] - members = [] - # members - members_json = json.get('members') - if members_json: - if isinstance(members_json, list): - for member in members_json: - members.append(object_from_json(member)) - else: - msg = 'Members must be a list.' - raise InvalidConfigException(msg) + members = _update_members(json, nic_mapping, persist_mapping) return OvsBond(name, use_dhcp=use_dhcp, use_dhcpv6=use_dhcpv6, addresses=addresses, routes=routes, mtu=mtu, @@ -1025,7 +979,8 @@ class OvsDpdkPort(_BaseOpts): routes=None, mtu=None, primary=False, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, dns_servers=None, nm_controlled=False, members=None, - driver='vfio-pci', ovs_options=None, ovs_extra=None): + driver='vfio-pci', ovs_options=None, ovs_extra=None, + rx_queue=None): super(OvsDpdkPort, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, @@ -1036,11 +991,16 @@ class OvsDpdkPort(_BaseOpts): self.ovs_options = ovs_options or [] self.ovs_extra = format_ovs_extra(self, ovs_extra) self.driver = driver + self.rx_queue = rx_queue @staticmethod def from_json(json): name = _get_required_field(json, 'name', 'OvsDpdkPort') # driver name by default will be 'vfio-pci' if not specified + (use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, + persist_mapping, defroute, dhclient_args, + dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json(json) + driver = json.get('driver') if not driver: driver = 'vfio-pci' @@ -1051,7 +1011,11 @@ class OvsDpdkPort(_BaseOpts): if members_json: if isinstance(members_json, list): if len(members_json) == 1: - iface = object_from_json(members_json[0]) + member = members_json[0] + if not member.get('nic_mapping'): + member.update({'nic_mapping': nic_mapping}) + member.update({'persist_mapping': persist_mapping}) + iface = object_from_json(member) if isinstance(iface, Interface): # TODO(skramaja): Add checks for IP and route not to # be set in the interface part of DPDK Port @@ -1069,14 +1033,21 @@ class OvsDpdkPort(_BaseOpts): msg = 'DPDK Port should have one member as Interface' raise InvalidConfigException(msg) + rx_queue = json.get('rx_queue', None) ovs_options = json.get('ovs_options', []) ovs_options = ['options:%s' % opt for opt in ovs_options] ovs_extra = json.get('ovs_extra', []) if not isinstance(ovs_extra, list): ovs_extra = [ovs_extra] - opts = _BaseOpts.base_opts_from_json(json) - return OvsDpdkPort(name, *opts, members=members, driver=driver, - ovs_options=ovs_options, ovs_extra=ovs_extra) + return OvsDpdkPort(name, use_dhcp=use_dhcp, use_dhcpv6=use_dhcpv6, + addresses=addresses, routes=routes, mtu=mtu, + primary=primary, nic_mapping=nic_mapping, + persist_mapping=persist_mapping, defroute=defroute, + dhclient_args=dhclient_args, + dns_servers=dns_servers, + nm_controlled=nm_controlled, members=members, + driver=driver, ovs_options=ovs_options, + ovs_extra=ovs_extra, rx_queue=rx_queue) class OvsDpdkBond(_BaseOpts): @@ -1086,7 +1057,7 @@ class OvsDpdkBond(_BaseOpts): routes=None, mtu=None, primary=False, members=None, ovs_options=None, ovs_extra=None, nic_mapping=None, persist_mapping=False, defroute=True, dhclient_args=None, - dns_servers=None, nm_controlled=False): + dns_servers=None, nm_controlled=False, rx_queue=None): super(OvsDpdkBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping, persist_mapping, @@ -1095,6 +1066,7 @@ class OvsDpdkBond(_BaseOpts): self.members = members or [] self.ovs_options = ovs_options self.ovs_extra = format_ovs_extra(self, ovs_extra) + self.rx_queue = rx_queue for member in self.members: if member.primary: @@ -1117,6 +1089,7 @@ class OvsDpdkBond(_BaseOpts): persist_mapping, defroute, dhclient_args, dns_servers, nm_controlled) = _BaseOpts.base_opts_from_json( json, include_primary=False) + rx_queue = json.get('rx_queue', None) ovs_options = json.get('ovs_options') ovs_extra = json.get('ovs_extra', []) if not isinstance(ovs_extra, list): @@ -1128,6 +1101,9 @@ class OvsDpdkBond(_BaseOpts): if members_json: if isinstance(members_json, list): for member in members_json: + if not member.get('nic_mapping'): + member.update({'nic_mapping': nic_mapping}) + member.update({'persist_mapping': persist_mapping}) obj = object_from_json(member) if isinstance(obj, OvsDpdkPort): members.append(obj) @@ -1145,7 +1121,7 @@ class OvsDpdkBond(_BaseOpts): persist_mapping=persist_mapping, defroute=defroute, dhclient_args=dhclient_args, dns_servers=dns_servers, - nm_controlled=nm_controlled) + nm_controlled=nm_controlled, rx_queue=rx_queue) class VppInterface(_BaseOpts): |