diff options
| -rw-r--r-- | python/vyos/configdict.py | 6 | ||||
| -rw-r--r-- | python/vyos/configverify.py | 9 | ||||
| -rw-r--r-- | python/vyos/ifconfig/bond.py | 6 | ||||
| -rw-r--r-- | python/vyos/ifconfig/bridge.py | 9 | ||||
| -rw-r--r-- | python/vyos/ifconfig/ethernet.py | 12 | ||||
| -rw-r--r-- | python/vyos/ifconfig/interface.py | 33 | ||||
| -rw-r--r-- | python/vyos/util.py | 2 | 
7 files changed, 39 insertions, 38 deletions
| diff --git a/python/vyos/configdict.py b/python/vyos/configdict.py index c1e93955e..bd8624ced 100644 --- a/python/vyos/configdict.py +++ b/python/vyos/configdict.py @@ -17,7 +17,6 @@  A library for retrieving value dicts from VyOS configs in a declarative fashion.  """  import os -import jmespath  from enum import Enum  from copy import deepcopy @@ -226,8 +225,9 @@ def get_interface_dict(config, base, ifname=''):      Will return a dictionary with the necessary interface configuration      """ -    from vyos.xml import defaults +    from vyos.util import vyos_dict_search      from vyos.validate import is_member +    from vyos.xml import defaults      if not ifname:          # determine tagNode instance @@ -273,7 +273,7 @@ def get_interface_dict(config, base, ifname=''):          # XXX: T2636 workaround: convert string to a list with one element          if isinstance(eui64, str):              eui64 = [eui64] -        tmp = jmespath.search('ipv6.address', dict) +        tmp = vyos_dict_search('ipv6.address', dict)          if not tmp:              dict.update({'ipv6': {'address': {'eui64_old': eui64}}})          else: diff --git a/python/vyos/configverify.py b/python/vyos/configverify.py index 264dd1c30..7e1930878 100644 --- a/python/vyos/configverify.py +++ b/python/vyos/configverify.py @@ -93,17 +93,18 @@ def verify_dhcpv6(config):      """      if 'dhcpv6_options' in config:          from vyos.util import vyos_dict_search +          if {'parameters_only', 'temporary'} <= set(config['dhcpv6_options']):              raise ConfigError('DHCPv6 temporary and parameters-only options '                                'are mutually exclusive!')          # It is not allowed to have duplicate SLA-IDs as those identify an          # assigned IPv6 subnet from a delegated prefix -        for pd in vyos_dict_search(config, 'dhcpv6_options.pd'): +        for pd in vyos_dict_search('dhcpv6_options.pd', config):              sla_ids = [] -            for interface in vyos_dict_search(config, f'dhcpv6_options.pd.{pd}.interface'): -                sla_id = vyos_dict_search(config, -                        f'dhcpv6_options.pd.{pd}.interface.{interface}.sla_id') +            for interface in vyos_dict_search(f'dhcpv6_options.pd.{pd}.interface', config): +                sla_id = vyos_dict_search( +                    f'dhcpv6_options.pd.{pd}.interface.{interface}.sla_id', config)                  sla_ids.append(sla_id)              # Check for duplicates diff --git a/python/vyos/ifconfig/bond.py b/python/vyos/ifconfig/bond.py index 193cea321..64407401b 100644 --- a/python/vyos/ifconfig/bond.py +++ b/python/vyos/ifconfig/bond.py @@ -14,12 +14,12 @@  # License along with this library.  If not, see <http://www.gnu.org/licenses/>.  import os -import jmespath  from vyos.ifconfig.interface import Interface  from vyos.ifconfig.vlan import VLAN  from vyos.util import cmd +from vyos.util import vyos_dict_search  from vyos.validate import assert_list  from vyos.validate import assert_positive @@ -336,7 +336,7 @@ class BondIf(Interface):              self.set_arp_ip_target('-' + addr)          # Add configured ARP target addresses -        value = jmespath.search('arp_monitor.target', config) +        value = vyos_dict_search('arp_monitor.target', config)          if isinstance(value, str):              value = [value]          if value: @@ -359,7 +359,7 @@ class BondIf(Interface):              if value: self.set_mode(value)              # Add (enslave) interfaces to bond -            value = jmespath.search('member.interface', config) +            value = vyos_dict_search('member.interface', config)              if value:                  for interface in value:                      # if we've come here we already verified the interface diff --git a/python/vyos/ifconfig/bridge.py b/python/vyos/ifconfig/bridge.py index 466e6b682..4c76fe996 100644 --- a/python/vyos/ifconfig/bridge.py +++ b/python/vyos/ifconfig/bridge.py @@ -13,13 +13,12 @@  # You should have received a copy of the GNU Lesser General Public  # License along with this library.  If not, see <http://www.gnu.org/licenses/>. -import jmespath -  from vyos.ifconfig.interface import Interface  from vyos.ifconfig.stp import STP  from vyos.validate import assert_boolean  from vyos.validate import assert_positive  from vyos.util import cmd +from vyos.util import vyos_dict_search  @Interface.register  class BridgeIf(Interface): @@ -223,18 +222,18 @@ class BridgeIf(Interface):          self.set_stp(value)          # enable or disable IGMP querier -        tmp = jmespath.search('igmp.querier', config) +        tmp = vyos_dict_search('igmp.querier', config)          value = '1' if (tmp != None) else '0'          self.set_multicast_querier(value)          # remove interface from bridge -        tmp = jmespath.search('member.interface_remove', config) +        tmp = vyos_dict_search('member.interface_remove', config)          if tmp:              for member in tmp:                  self.del_port(member)          STPBridgeIf = STP.enable(BridgeIf) -        tmp = jmespath.search('member.interface', config) +        tmp = vyos_dict_search('member.interface', config)          if tmp:              for interface, interface_config in tmp.items():                  # if we've come here we already verified the interface diff --git a/python/vyos/ifconfig/ethernet.py b/python/vyos/ifconfig/ethernet.py index b2f701e00..17c1bd64d 100644 --- a/python/vyos/ifconfig/ethernet.py +++ b/python/vyos/ifconfig/ethernet.py @@ -15,12 +15,12 @@  import os  import re -import jmespath  from vyos.ifconfig.interface import Interface  from vyos.ifconfig.vlan import VLAN  from vyos.validate import assert_list  from vyos.util import run +from vyos.util import vyos_dict_search  @Interface.register  @VLAN.enable @@ -268,27 +268,27 @@ class EthernetIf(Interface):          self.set_flow_control(value)          # GRO (generic receive offload) -        tmp = jmespath.search('offload_options.generic_receive', config) +        tmp = vyos_dict_search('offload_options.generic_receive', config)          value = tmp if (tmp != None) else 'off'          self.set_gro(value)          # GSO (generic segmentation offload) -        tmp = jmespath.search('offload_options.generic_segmentation', config) +        tmp = vyos_dict_search('offload_options.generic_segmentation', config)          value = tmp if (tmp != None) else 'off'          self.set_gso(value)          # scatter-gather option -        tmp = jmespath.search('offload_options.scatter_gather', config) +        tmp = vyos_dict_search('offload_options.scatter_gather', config)          value = tmp if (tmp != None) else 'off'          self.set_sg(value)          # TSO (TCP segmentation offloading) -        tmp = jmespath.search('offload_options.udp_fragmentation', config) +        tmp = vyos_dict_search('offload_options.udp_fragmentation', config)          value = tmp if (tmp != None) else 'off'          self.set_tso(value)          # UDP fragmentation offloading -        tmp = jmespath.search('offload_options.udp_fragmentation', config) +        tmp = vyos_dict_search('offload_options.udp_fragmentation', config)          value = tmp if (tmp != None) else 'off'          self.set_ufo(value) diff --git a/python/vyos/ifconfig/interface.py b/python/vyos/ifconfig/interface.py index 537c4bc2d..67ba973c4 100644 --- a/python/vyos/ifconfig/interface.py +++ b/python/vyos/ifconfig/interface.py @@ -34,6 +34,7 @@ from vyos.configdict import list_diff  from vyos.configdict import dict_merge  from vyos.template import render  from vyos.util import mac2eui64 +from vyos.util import vyos_dict_search  from vyos.validate import is_ipv4  from vyos.validate import is_ipv6  from vyos.validate import is_intf_addr_assigned @@ -824,7 +825,7 @@ class Interface(Control):          lease_file = f'{config_base}_{ifname}.leases'          if enable and 'disable' not in self._config: -            if jmespath.search('dhcp_options.host_name', self._config) == None: +            if vyos_dict_search('dhcp_options.host_name', self._config) == None:                  # read configured system hostname.                  # maybe change to vyos hostd client ???                  hostname = 'vyos' @@ -907,7 +908,7 @@ class Interface(Control):          # always ensure DHCPv6 client is stopped (when not configured as client          # for IPv6 address or prefix delegation -        dhcpv6pd = jmespath.search('dhcpv6_options.pd', config) +        dhcpv6pd = vyos_dict_search('dhcpv6_options.pd', config)          if 'dhcpv6' not in new_addr or dhcpv6pd == None:              self.del_addr('dhcpv6') @@ -935,59 +936,59 @@ class Interface(Control):              self.set_vrf(config.get('vrf', ''))          # Configure ARP cache timeout in milliseconds - has default value -        tmp = jmespath.search('ip.arp_cache_timeout', config) +        tmp = vyos_dict_search('ip.arp_cache_timeout', config)          value = tmp if (tmp != None) else '30'          self.set_arp_cache_tmo(value)          # Configure ARP filter configuration -        tmp = jmespath.search('ip.disable_arp_filter', config) +        tmp = vyos_dict_search('ip.disable_arp_filter', config)          value = '0' if (tmp != None) else '1'          self.set_arp_filter(value)          # Configure ARP accept -        tmp = jmespath.search('ip.enable_arp_accept', config) +        tmp = vyos_dict_search('ip.enable_arp_accept', config)          value = '1' if (tmp != None) else '0'          self.set_arp_accept(value)          # Configure ARP announce -        tmp = jmespath.search('ip.enable_arp_announce', config) +        tmp = vyos_dict_search('ip.enable_arp_announce', config)          value = '1' if (tmp != None) else '0'          self.set_arp_announce(value)          # Configure ARP ignore -        tmp = jmespath.search('ip.enable_arp_ignore', config) +        tmp = vyos_dict_search('ip.enable_arp_ignore', config)          value = '1' if (tmp != None) else '0'          self.set_arp_ignore(value)          # Enable proxy-arp on this interface -        tmp = jmespath.search('ip.enable_proxy_arp', config) +        tmp = vyos_dict_search('ip.enable_proxy_arp', config)          value = '1' if (tmp != None) else '0'          self.set_proxy_arp(value)          # Enable private VLAN proxy ARP on this interface -        tmp = jmespath.search('ip.proxy_arp_pvlan', config) +        tmp = vyos_dict_search('ip.proxy_arp_pvlan', config)          value = '1' if (tmp != None) else '0'          self.set_proxy_arp_pvlan(value)          # IPv6 forwarding -        tmp = jmespath.search('ipv6.disable_forwarding', config) +        tmp = vyos_dict_search('ipv6.disable_forwarding', config)          value = '0' if (tmp != None) else '1'          self.set_ipv6_forwarding(value)          # IPv6 router advertisements -        tmp = jmespath.search('ipv6.address.autoconf', config) +        tmp = vyos_dict_search('ipv6.address.autoconf', config)          value = '2' if (tmp != None) else '1'          if 'dhcpv6' in new_addr:              value = '2'          self.set_ipv6_accept_ra(value)          # IPv6 address autoconfiguration -        tmp = jmespath.search('ipv6.address.autoconf', config) +        tmp = vyos_dict_search('ipv6.address.autoconf', config)          value = '1' if (tmp != None) else '0'          self.set_ipv6_autoconf(value)          # IPv6 Duplicate Address Detection (DAD) tries -        tmp = jmespath.search('ipv6.dup_addr_detect_transmits', config) +        tmp = vyos_dict_search('ipv6.dup_addr_detect_transmits', config)          value = tmp if (tmp != None) else '1'          self.set_ipv6_dad_messages(value) @@ -996,7 +997,7 @@ class Interface(Control):              self.set_mtu(config.get('mtu'))          # Delete old IPv6 EUI64 addresses before changing MAC -        tmp = jmespath.search('ipv6.address.eui64_old', config) +        tmp = vyos_dict_search('ipv6.address.eui64_old', config)          if tmp:              for addr in tmp:                  self.del_ipv6_eui64_address(addr) @@ -1011,7 +1012,7 @@ class Interface(Control):                  self.set_mac(mac)          # Manage IPv6 link-local addresses -        tmp = jmespath.search('ipv6.address.no_default_link_local', config) +        tmp = vyos_dict_search('ipv6.address.no_default_link_local', config)          # we must check explicitly for None type as if the key is set we will          # get an empty dict (<class 'dict'>)          if tmp is not None: @@ -1020,7 +1021,7 @@ class Interface(Control):              self.add_ipv6_eui64_address('fe80::/64')          # Add IPv6 EUI-based addresses -        tmp = jmespath.search('ipv6.address.eui64', config) +        tmp = vyos_dict_search('ipv6.address.eui64', config)          if tmp:              # XXX: T2636 workaround: convert string to a list with one element              if isinstance(tmp, str): diff --git a/python/vyos/util.py b/python/vyos/util.py index 4cc25764b..84aa16791 100644 --- a/python/vyos/util.py +++ b/python/vyos/util.py @@ -673,7 +673,7 @@ def find_device_file(device):      return None -def vyos_dict_search(dict, path): +def vyos_dict_search(path, dict):      """ Traverse Python dictionary (dict) delimited by dot (.).      Return value of key if found, None otherwise. | 
