cisco_node_utils 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/README.md +8 -7
- data/docs/README-maintainers.md +0 -1
- data/lib/cisco_node_utils/aaa_authentication_login_service.rb +2 -2
- data/lib/cisco_node_utils/bgp.rb +2 -2
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +16 -0
- data/lib/cisco_node_utils/client/utils.rb +7 -1
- data/lib/cisco_node_utils/cmd_ref/DEPRECATED.yaml +12 -12
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +35 -7
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +4 -4
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +5 -5
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +5 -5
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +8 -3
- data/lib/cisco_node_utils/cmd_ref/hsrp_global.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +65 -14
- data/lib/cisco_node_utils/cmd_ref/interface_hsrp_group.yaml +117 -0
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +4 -8
- data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +6 -0
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +9 -9
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +8 -8
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +16 -8
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +11 -11
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +2 -1
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +1 -1
- data/lib/cisco_node_utils/command_reference.rb +8 -1
- data/lib/cisco_node_utils/domain_name.rb +17 -2
- data/lib/cisco_node_utils/feature.rb +14 -0
- data/lib/cisco_node_utils/hsrp_global.rb +97 -0
- data/lib/cisco_node_utils/interface.rb +146 -0
- data/lib/cisco_node_utils/interface_hsrp_group.rb +544 -0
- data/lib/cisco_node_utils/node.rb +93 -4
- data/lib/cisco_node_utils/pim.rb +17 -0
- data/lib/cisco_node_utils/portchannel_global.rb +2 -2
- data/lib/cisco_node_utils/version.rb +1 -1
- data/lib/cisco_node_utils/vlan.rb +2 -5
- data/lib/cisco_node_utils/yum.rb +11 -6
- data/spec/schema.yaml +3 -3
- data/tests/ciscotest.rb +25 -4
- data/tests/cmd_config.yaml +0 -2
- data/tests/test_bgp_af.rb +13 -2
- data/tests/test_feature.rb +5 -0
- data/tests/test_hsrp_global.rb +79 -0
- data/tests/test_interface.rb +23 -0
- data/tests/test_interface_hsrp.rb +134 -0
- data/tests/test_interface_hsrp_group.rb +582 -0
- data/tests/test_node_ext.rb +7 -1
- data/tests/test_pim.rb +27 -3
- data/tests/test_platform.rb +1 -1
- data/tests/test_radius_global.rb +4 -5
- data/tests/test_radius_server.rb +16 -11
- data/tests/test_router_bgp.rb +11 -6
- data/tests/test_router_ospf_area.rb +6 -6
- data/tests/test_tacacs_server.rb +2 -2
- data/tests/test_tacacs_server_host.rb +2 -2
- data/tests/test_vlan.rb +14 -0
- data/tests/test_yum.rb +2 -2
- data/tests/yum_package.yaml +4 -0
- metadata +10 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a52015dedc4b7c5bf4c0124dced507351aecfbe1
         | 
| 4 | 
            +
              data.tar.gz: 68b52a70c7478034e0a8ce9913e181bda17896bf
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 408c48ce5a0bf93fbcf5f5c10d24717561e475a03b8d6ca4fad6a49c4d237b6a20be6bfbdd4143deecec8a210a1916a7910efd29442ba13a9e67dde219f9070e
         | 
| 7 | 
            +
              data.tar.gz: 4a436ce2bba7bdd3ecf5104a812605b0c3c7c557357c903574c48f018fcc938a8623c580732952b088689186ce77e26a8e4301c3399d970b84a00636a7b5fccd
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,6 +1,34 @@ | |
| 1 1 | 
             
            Changelog
         | 
| 2 2 | 
             
            =========
         | 
| 3 3 |  | 
| 4 | 
            +
            ## [v1.5.0]
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ### New feature support
         | 
| 7 | 
            +
            * Drill down capability into structured table output using command reference yaml (@mikewiebe)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            #### Cisco Resources
         | 
| 10 | 
            +
            * Hot Standby Router Protocol
         | 
| 11 | 
            +
              * hsrp_global (@saichint)
         | 
| 12 | 
            +
              * interface_hsrp_group (@saichint)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            ### Added
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            * Extend interface with attributes:
         | 
| 17 | 
            +
               * `hsrp_bfd`
         | 
| 18 | 
            +
               * `hsrp_delay_minimum`
         | 
| 19 | 
            +
               * `hsrp_delay_reload`
         | 
| 20 | 
            +
               * `hsrp_mac_refresh`
         | 
| 21 | 
            +
               * `hsrp_use_bia`
         | 
| 22 | 
            +
               * `hsrp_version`
         | 
| 23 | 
            +
               * `pim_bfd`
         | 
| 24 | 
            +
            * Extend pim with attributes:
         | 
| 25 | 
            +
               * `bfd`
         | 
| 26 | 
            +
            * Added support for Cisco NX-OS software releases `7.3(0)F1(1)` and `8.0(1)`
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            ### Changed
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            ### Removed
         | 
| 31 | 
            +
             | 
| 4 32 | 
             
            ## [v1.4.1]
         | 
| 5 33 |  | 
| 6 34 | 
             
            ### Added
         | 
| @@ -51,6 +79,7 @@ Changelog | |
| 51 79 | 
             
               * `bfd`
         | 
| 52 80 | 
             
            * Extend bgp_neighbor with attributes:
         | 
| 53 81 | 
             
               * `bfd`
         | 
| 82 | 
            +
            * Cisco Nexus 8xxx platform support added to existing classes
         | 
| 54 83 |  | 
| 55 84 | 
             
            ### Changed
         | 
| 56 85 | 
             
            * Deprecated `vlan` private-vlan properties and replaced with new methods. New file `vlan_DEPRECATED.rb` has been created to store the deprecated methods. The old -> new properties are:
         | 
| @@ -368,6 +397,7 @@ Changelog | |
| 368 397 | 
             
            [git-flow]: https://github.com/petervanderdoes/gitflow-avh
         | 
| 369 398 | 
             
            [SimpleCov]: https://github.com/colszowka/simplecov
         | 
| 370 399 |  | 
| 400 | 
            +
            [v1.5.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.4.1...v1.5.0
         | 
| 371 401 | 
             
            [v1.4.1]: https://github.com/cisco/cisco-network-node-utils/compare/v1.4.0...v1.4.1
         | 
| 372 402 | 
             
            [v1.4.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.3.0...v1.4.0
         | 
| 373 403 | 
             
            [v1.3.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.2.0...v1.3.0
         | 
    
        data/README.md
    CHANGED
    
    | @@ -40,13 +40,14 @@ open source management tools. | |
| 40 40 |  | 
| 41 41 | 
             
            This CiscoNodeUtils gem release supports the following:
         | 
| 42 42 |  | 
| 43 | 
            -
            Platform | 
| 44 | 
            -
             | 
| 45 | 
            -
            Cisco Nexus N9k | 
| 46 | 
            -
            Cisco Nexus N3k | 
| 47 | 
            -
            Cisco Nexus N5k | 
| 48 | 
            -
            Cisco Nexus N6k | 
| 49 | 
            -
            Cisco Nexus N7k | 
| 43 | 
            +
            Platform          | OS     | OS Version           |
         | 
| 44 | 
            +
            ------------------|--------|----------------------|
         | 
| 45 | 
            +
            Cisco Nexus N9k   | NX-OS  | 7.0(3)I2(1) and later
         | 
| 46 | 
            +
            Cisco Nexus N3k   | NX-OS  | 7.0(3)I2(1) and later
         | 
| 47 | 
            +
            Cisco Nexus N5k   | NX-OS  | 7.3(0)N1(1) and later
         | 
| 48 | 
            +
            Cisco Nexus N6k   | NX-OS  | 7.3(0)N1(1) and later
         | 
| 49 | 
            +
            Cisco Nexus N7k   | NX-OS  | 7.3(0)D1(1) and later
         | 
| 50 | 
            +
            Cisco Nexus N9K-F | NX-OS  | 7.0(3)F1(1) and later
         | 
| 50 51 |  | 
| 51 52 | 
             
            Please note: For Cisco Nexus 3k and 9k platforms, a virtual Nexus N9000/N3000 may be helpful for development and testing. Users with a valid [cisco.com](http://cisco.com) user ID can obtain a copy of a virtual Nexus N9000/N3000 by sending their [cisco.com](http://cisco.com) user ID in an email to <get-n9kv@cisco.com>. If you do not have a [cisco.com](http://cisco.com) user ID please register for one at [https://tools.cisco.com/IDREG/guestRegistration](https://tools.cisco.com/IDREG/guestRegistration)
         | 
| 52 53 |  | 
    
        data/docs/README-maintainers.md
    CHANGED
    
    
| @@ -58,8 +58,8 @@ module Cisco | |
| 58 58 | 
             
                  if g_str.empty?
         | 
| 59 59 | 
             
                    # cannot remove default local, so do nothing in this case
         | 
| 60 60 | 
             
                    unless m == :local
         | 
| 61 | 
            -
                      unless node.product_id[/ | 
| 62 | 
            -
                        # TBD: These 'no' commands currently error on  | 
| 61 | 
            +
                      unless node.product_id[/N9K-F/]
         | 
| 62 | 
            +
                        # TBD: These 'no' commands currently error on N9K-F
         | 
| 63 63 | 
             
                        #   no aaa authentication login console local
         | 
| 64 64 | 
             
                        #   no aaa authentication login console none
         | 
| 65 65 | 
             
                        config_set('aaa_auth_login_service', 'method',
         | 
    
        data/lib/cisco_node_utils/bgp.rb
    CHANGED
    
    | @@ -513,7 +513,7 @@ module Cisco | |
| 513 513 |  | 
| 514 514 | 
             
                def default_event_history_events
         | 
| 515 515 | 
             
                  if Utils.image_version?(/7.0.3.I2|I3|I4/) ||
         | 
| 516 | 
            -
                      | 
| 516 | 
            +
                     node.product_id[/(N5|N6|N7|N9.*-F)/]
         | 
| 517 517 | 
             
                    config_get_default('bgp', 'event_history_events')
         | 
| 518 518 | 
             
                  else
         | 
| 519 519 | 
             
                    config_get('bgp', 'event_history_events_bytes', @get_args)
         | 
| @@ -574,7 +574,7 @@ module Cisco | |
| 574 574 |  | 
| 575 575 | 
             
                def default_event_history_periodic
         | 
| 576 576 | 
             
                  if Utils.image_version?(/7.0.3.I2|I3|I4/) ||
         | 
| 577 | 
            -
                      | 
| 577 | 
            +
                     node.product_id[/(N5|N6|N7|N9.*-F)/]
         | 
| 578 578 | 
             
                    config_get_default('bgp', 'event_history_periodic')
         | 
| 579 579 | 
             
                  else
         | 
| 580 580 | 
             
                    config_get('bgp', 'event_history_periodic_bytes', @get_args)
         | 
| @@ -360,5 +360,21 @@ module Cisco | |
| 360 360 | 
             
                  end
         | 
| 361 361 | 
             
                  merged
         | 
| 362 362 | 
             
                end # merge_range
         | 
| 363 | 
            +
             | 
| 364 | 
            +
                # Add double quotes to string.
         | 
| 365 | 
            +
                #
         | 
| 366 | 
            +
                # Helper method to add a double quote to the beginning
         | 
| 367 | 
            +
                # and end of a string.
         | 
| 368 | 
            +
                #
         | 
| 369 | 
            +
                # Nxapi adds an escape character to config lines that
         | 
| 370 | 
            +
                # nvgen in this way in some but not all nxos releases.
         | 
| 371 | 
            +
                #
         | 
| 372 | 
            +
                # Input: String (Example 'foo')
         | 
| 373 | 
            +
                # Returns: String with double quotes: (Example: '"foo"'
         | 
| 374 | 
            +
                #
         | 
| 375 | 
            +
                def self.add_quotes(string)
         | 
| 376 | 
            +
                  string = "\"#{string}\"" if image_version?(/8.0/)
         | 
| 377 | 
            +
                  string
         | 
| 378 | 
            +
                end
         | 
| 363 379 | 
             
              end # class Utils
         | 
| 364 380 | 
             
            end   # module Cisco
         | 
| @@ -144,7 +144,13 @@ class Cisco::Client | |
| 144 144 | 
             
                    fail "No match found for #{filter}" if data.length == 0
         | 
| 145 145 | 
             
                    data = data[0]
         | 
| 146 146 | 
             
                  else # data is array or hash
         | 
| 147 | 
            -
                     | 
| 147 | 
            +
                    if data.is_a? Array
         | 
| 148 | 
            +
                      final = []
         | 
| 149 | 
            +
                      data.each do |row|
         | 
| 150 | 
            +
                        final << row[filter]
         | 
| 151 | 
            +
                      end
         | 
| 152 | 
            +
                      return final
         | 
| 153 | 
            +
                    end
         | 
| 148 154 | 
             
                    fail "No key \"#{filter}\" in #{data}" if data[filter].nil?
         | 
| 149 155 | 
             
                    data = data[filter]
         | 
| 150 156 | 
             
                  end
         | 
| @@ -17,7 +17,7 @@ private_vlan_any: | |
| 17 17 |  | 
| 18 18 | 
             
            private_vlan_association:
         | 
| 19 19 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'pvlan_association'
         | 
| 20 | 
            -
              _exclude: [ | 
| 20 | 
            +
              _exclude: [N9k-F]
         | 
| 21 21 | 
             
              multiple: true
         | 
| 22 22 | 
             
              get_command: "show vlan private-vlan"
         | 
| 23 23 | 
             
              get_context: ~
         | 
| @@ -28,7 +28,7 @@ private_vlan_association: | |
| 28 28 |  | 
| 29 29 | 
             
            private_vlan_mapping:
         | 
| 30 30 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'pvlan_mapping'
         | 
| 31 | 
            -
              _exclude: [ios_xr,  | 
| 31 | 
            +
              _exclude: [ios_xr, N9k-F]
         | 
| 32 32 | 
             
              multiple: true
         | 
| 33 33 | 
             
              get_value: '/^private-vlan mapping (.*)$/'
         | 
| 34 34 | 
             
              set_value: "<state> private-vlan mapping <vlans>"
         | 
| @@ -36,7 +36,7 @@ private_vlan_mapping: | |
| 36 36 |  | 
| 37 37 | 
             
            private_vlan_type:
         | 
| 38 38 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'pvlan_type'
         | 
| 39 | 
            -
              _exclude: [ | 
| 39 | 
            +
              _exclude: [N9k-F]
         | 
| 40 40 | 
             
              kind: string
         | 
| 41 41 | 
             
              get_command: 'show vlan private-vlan type'
         | 
| 42 42 | 
             
              get_context: ~
         | 
| @@ -47,14 +47,14 @@ private_vlan_type: | |
| 47 47 |  | 
| 48 48 | 
             
            switchport_mode_private_vlan_host:
         | 
| 49 49 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_host'
         | 
| 50 | 
            -
              _exclude: [ios_xr,  | 
| 50 | 
            +
              _exclude: [ios_xr, N9k-F]
         | 
| 51 51 | 
             
              get_value: '/^switchport mode private-vlan (.*)$/'
         | 
| 52 52 | 
             
              set_value: "<state> switchport mode private-vlan <mode>"
         | 
| 53 53 | 
             
              default_value: :disabled
         | 
| 54 54 |  | 
| 55 55 | 
             
            switchport_mode_private_vlan_host_association:
         | 
| 56 56 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_host_association'
         | 
| 57 | 
            -
              _exclude: [ios_xr,  | 
| 57 | 
            +
              _exclude: [ios_xr, N9k-F]
         | 
| 58 58 | 
             
              multiple: true
         | 
| 59 59 | 
             
              get_value: '/^switchport private-vlan host-association (.*)$/'
         | 
| 60 60 | 
             
              set_value: "<state> switchport private-vlan host-association <vlan_pr> <vlan_sec>"
         | 
| @@ -62,7 +62,7 @@ switchport_mode_private_vlan_host_association: | |
| 62 62 |  | 
| 63 63 | 
             
            switchport_mode_private_vlan_host_promiscous:
         | 
| 64 64 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_promiscuous'
         | 
| 65 | 
            -
              _exclude: [ios_xr,  | 
| 65 | 
            +
              _exclude: [ios_xr, N9k-F]
         | 
| 66 66 | 
             
              multiple: true
         | 
| 67 67 | 
             
              get_value: '/^switchport private-vlan mapping (\d+.*)$/'
         | 
| 68 68 | 
             
              set_value: "<state> switchport private-vlan mapping <vlan_pr> <vlans>"
         | 
| @@ -70,7 +70,7 @@ switchport_mode_private_vlan_host_promiscous: | |
| 70 70 |  | 
| 71 71 | 
             
            switchport_mode_private_vlan_trunk_promiscuous:
         | 
| 72 72 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_trunk_promiscuous'
         | 
| 73 | 
            -
              _exclude: [ios_xr, N3k,  | 
| 73 | 
            +
              _exclude: [ios_xr, N3k, N9k-F]
         | 
| 74 74 | 
             
              kind: boolean
         | 
| 75 75 | 
             
              get_value: '/^switchport mode private-vlan trunk promiscuous$/'
         | 
| 76 76 | 
             
              set_value: "<state> switchport mode private-vlan trunk promiscuous"
         | 
| @@ -78,7 +78,7 @@ switchport_mode_private_vlan_trunk_promiscuous: | |
| 78 78 |  | 
| 79 79 | 
             
            switchport_mode_private_vlan_trunk_secondary:
         | 
| 80 80 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_trunk_secondary'
         | 
| 81 | 
            -
              _exclude: [ios_xr, N3k,  | 
| 81 | 
            +
              _exclude: [ios_xr, N3k, N9k-F]
         | 
| 82 82 | 
             
              kind: boolean
         | 
| 83 83 | 
             
              get_value: '/^switchport mode private-vlan trunk secondary$/'
         | 
| 84 84 | 
             
              set_value: "<state> switchport mode private-vlan trunk secondary"
         | 
| @@ -86,7 +86,7 @@ switchport_mode_private_vlan_trunk_secondary: | |
| 86 86 |  | 
| 87 87 | 
             
            switchport_private_vlan_association_trunk:
         | 
| 88 88 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_trunk_association'
         | 
| 89 | 
            -
              _exclude: [ios_xr, N3k,  | 
| 89 | 
            +
              _exclude: [ios_xr, N3k, N9k-F]
         | 
| 90 90 | 
             
              multiple: true
         | 
| 91 91 | 
             
              #get_value: '/^switchport private-vlan association trunk (.*) (.*)$/'
         | 
| 92 92 | 
             
              get_value: '/^switchport private-vlan association trunk (.*)$/'
         | 
| @@ -95,7 +95,7 @@ switchport_private_vlan_association_trunk: | |
| 95 95 |  | 
| 96 96 | 
             
            switchport_private_vlan_mapping_trunk:
         | 
| 97 97 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_mapping_trunk'
         | 
| 98 | 
            -
              _exclude: [ios_xr, N3k,  | 
| 98 | 
            +
              _exclude: [ios_xr, N3k, N9k-F]
         | 
| 99 99 | 
             
              multiple: true
         | 
| 100 100 | 
             
              get_value: '/^switchport private-vlan mapping trunk (.*)$/'
         | 
| 101 101 | 
             
              set_value: "<state> switchport private-vlan mapping trunk <vlan_pr> <vlans>"
         | 
| @@ -103,7 +103,7 @@ switchport_private_vlan_mapping_trunk: | |
| 103 103 |  | 
| 104 104 | 
             
            switchport_private_vlan_trunk_allowed_vlan:
         | 
| 105 105 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_trunk_allowed_vlan'
         | 
| 106 | 
            -
              _exclude: [ios_xr,  | 
| 106 | 
            +
              _exclude: [ios_xr, N9k-F]
         | 
| 107 107 | 
             
              multiple: true
         | 
| 108 108 | 
             
              get_value: '/^switchport private-vlan trunk allowed vlan (.*)$/'
         | 
| 109 109 | 
             
              set_value: "<state> switchport private-vlan trunk allowed vlan <oper> <vlans>"
         | 
| @@ -111,7 +111,7 @@ switchport_private_vlan_trunk_allowed_vlan: | |
| 111 111 |  | 
| 112 112 | 
             
            switchport_private_vlan_trunk_native_vlan:
         | 
| 113 113 | 
             
              # DEPRECATED (REMOVING WITH RELEASE 2.0.0). USE 'switchport_pvlan_trunk_native_vlan'
         | 
| 114 | 
            -
              _exclude: [ios_xr,  | 
| 114 | 
            +
              _exclude: [ios_xr, N9k-F]
         | 
| 115 115 | 
             
              kind: int
         | 
| 116 116 | 
             
              get_value: '/^switchport private-vlan trunk native vlan (.*)$/'
         | 
| 117 117 | 
             
              set_value: "<state> switchport private-vlan trunk native vlan <vlan>"
         | 
| @@ -329,8 +329,8 @@ productid: | |
| 329 329 | 
             
              ios_xr:
         | 
| 330 330 | 
             
                get_value: '/PID: ([^ ,]+)/'
         | 
| 331 331 | 
             
              nexus:
         | 
| 332 | 
            -
                get_context: ["TABLE_inv", "ROW_inv" | 
| 333 | 
            -
                get_value: "productid"
         | 
| 332 | 
            +
                get_context: ["TABLE_inv", "ROW_inv"]
         | 
| 333 | 
            +
                get_value: ["name Chassis", "productid"]
         | 
| 334 334 | 
             
            ```
         | 
| 335 335 |  | 
| 336 336 | 
             
            Using platform variants and product variants together:
         | 
| @@ -361,7 +361,7 @@ productid: | |
| 361 361 | 
             
              get_command: 'show inventory'
         | 
| 362 362 | 
             
              nexus:
         | 
| 363 363 | 
             
                get_data_format: nxapi_structured
         | 
| 364 | 
            -
                get_context: ['TABLE_inv', 'ROW_inv' | 
| 364 | 
            +
                get_context: ['TABLE_inv', 'ROW_inv']
         | 
| 365 365 | 
             
            ```
         | 
| 366 366 |  | 
| 367 367 | 
             
            ### `get_command`
         | 
| @@ -378,7 +378,7 @@ area: | |
| 378 378 |  | 
| 379 379 | 
             
            ### `get_context`
         | 
| 380 380 |  | 
| 381 | 
            -
            `get_context` is an optional sequence of tokens used to filter the output from the `get_command` down to the desired context where the `get_value` can be found. For CLI properties, these tokens are implicitly Regexps used to filter down through the hierarchical CLI output, while for `nxapi_structured` properties, the tokens are used as string keys.
         | 
| 381 | 
            +
            `get_context` is an optional sequence of tokens used to filter the output from the `get_command` down to the desired context where the `get_value` can be found. For CLI properties, these tokens are implicitly Regexps used to filter down through the hierarchical CLI output, while for `nxapi_structured` properties, the tokens are used as string keys. For `nxapi_structured` properties, both `get_context` and `get_value` can specify a sequence of tokens used to filter the output from the `get_command` down to the desired `get_value`.  This feature can be used to retrieve data from `TABLE` data the contains multiple `ROWS`.
         | 
| 382 382 |  | 
| 383 383 |  | 
| 384 384 | 
             
            ```yaml
         | 
| @@ -387,10 +387,38 @@ productid: | |
| 387 387 | 
             
              get_command: 'show inventory'
         | 
| 388 388 | 
             
              nexus:
         | 
| 389 389 | 
             
                get_data_format: nxapi_structured
         | 
| 390 | 
            -
                get_context: ['TABLE_inv', 'ROW_inv' | 
| 391 | 
            -
                get_value:  | 
| 390 | 
            +
                get_context: ['TABLE_inv', 'ROW_inv']
         | 
| 391 | 
            +
                get_value: ["name Chassis", "productid"]
         | 
| 392 392 | 
             
                # config_get('inventory', 'productid') returns
         | 
| 393 | 
            -
                #  | 
| 393 | 
            +
                # 'productid' for the row that contains 'name Chassis'
         | 
| 394 | 
            +
            ```
         | 
| 395 | 
            +
             | 
| 396 | 
            +
            ```yaml
         | 
| 397 | 
            +
            # vlan.yaml
         | 
| 398 | 
            +
            name:
         | 
| 399 | 
            +
              get_command: "show vlan brief"
         | 
| 400 | 
            +
              nexus:
         | 
| 401 | 
            +
                kind: string
         | 
| 402 | 
            +
                get_data_format: nxapi_structured
         | 
| 403 | 
            +
                get_context: ["TABLE_vlanbriefxbrief", "ROW_vlanbriefxbrief"]
         | 
| 404 | 
            +
                get_value: ["vlanshowbr-vlanid-utf <vlanid>", "vlanshowbr-vlanname"]
         | 
| 405 | 
            +
                # config_get('vlan', 'name', @vlan_id) returns
         | 
| 406 | 
            +
                # 'vlanshowbr-vlanname' for @vlan_id.
         | 
| 407 | 
            +
                # NOTE: `<vlanid>` in the `get_value` is replaced by `@vlan_id` prior to lookup.
         | 
| 408 | 
            +
            ```
         | 
| 409 | 
            +
             | 
| 410 | 
            +
            ```yaml
         | 
| 411 | 
            +
            # vlan.yaml
         | 
| 412 | 
            +
            shutdown:
         | 
| 413 | 
            +
              get_command: "show vlan brief"
         | 
| 414 | 
            +
              nexus:
         | 
| 415 | 
            +
                kind: boolean
         | 
| 416 | 
            +
                get_data_format: nxapi_structured
         | 
| 417 | 
            +
                get_context: ["TABLE_vlanbriefxbrief", "ROW_vlanbriefxbrief"]
         | 
| 418 | 
            +
                get_value: ["vlanshowbr-vlanid-utf <vlanid>", "vlanshowbr-shutstate", '/^shutdown$/']
         | 
| 419 | 
            +
                # config_get('vlan', 'shutdown', @vlan_id) returns
         | 
| 420 | 
            +
                # true if data in 'vlanshowbr-shutstate' matches regex '/^shutdown$/' else false.
         | 
| 421 | 
            +
                # NOTE: `<vlanid>` in the `get_value` is replaced by `@vlan_id` prior to lookup.
         | 
| 394 422 | 
             
            ```
         | 
| 395 423 |  | 
| 396 424 | 
             
            ```yaml
         | 
| @@ -23,27 +23,27 @@ echo_rx_interval: | |
| 23 23 | 
             
                default_value: 50
         | 
| 24 24 |  | 
| 25 25 | 
             
            fabricpath_interval:
         | 
| 26 | 
            -
              _exclude: [N3k,  | 
| 26 | 
            +
              _exclude: [N3k, N9k-F, N9k]
         | 
| 27 27 | 
             
              get_value: '/^bfd fabricpath interval (\d+) min_rx (\d+) multiplier (\d+)$/'
         | 
| 28 28 | 
             
              set_value: '<state> bfd fabricpath interval <interval> min_rx <min_rx> multiplier <multiplier>'
         | 
| 29 29 | 
             
              default_value: ['50', '50', '3']
         | 
| 30 30 |  | 
| 31 31 | 
             
            fabricpath_slow_timer:
         | 
| 32 | 
            -
              _exclude: [N3k,  | 
| 32 | 
            +
              _exclude: [N3k, N9k-F, N9k]
         | 
| 33 33 | 
             
              kind: int
         | 
| 34 34 | 
             
              get_value: '/^bfd fabricpath slow-timer (\d+)$/'
         | 
| 35 35 | 
             
              set_value: '<state> bfd fabricpath slow-timer <timer>'
         | 
| 36 36 | 
             
              default_value: 2000
         | 
| 37 37 |  | 
| 38 38 | 
             
            fabricpath_vlan:
         | 
| 39 | 
            -
              _exclude: [N3k,  | 
| 39 | 
            +
              _exclude: [N3k, N9k-F, N9k]
         | 
| 40 40 | 
             
              kind: int
         | 
| 41 41 | 
             
              get_value: '/^bfd fabricpath vlan (\d+)$/'
         | 
| 42 42 | 
             
              set_value: '<state> bfd fabricpath vlan <vlan>'
         | 
| 43 43 | 
             
              default_value: 1
         | 
| 44 44 |  | 
| 45 45 | 
             
            interval:
         | 
| 46 | 
            -
              _exclude: [ | 
| 46 | 
            +
              _exclude: [N9k-F, N9k] # TBD: bug on n9k-f, n9k this is not working now
         | 
| 47 47 | 
             
              get_value: '/^bfd interval (\d+) min_rx (\d+) multiplier (\d+)$/'
         | 
| 48 48 | 
             
              set_value: '<state> bfd interval <interval> min_rx <min_rx> multiplier <multiplier>'
         | 
| 49 49 | 
             
              N3k:
         | 
| @@ -11,7 +11,7 @@ _template: | |
| 11 11 | 
             
                get_command: 'show running-config router bgp'
         | 
| 12 12 |  | 
| 13 13 | 
             
            additional_paths_install:
         | 
| 14 | 
            -
              _exclude: [ios_xr, N3k,  | 
| 14 | 
            +
              _exclude: [ios_xr, N3k, N9k-F, N9k]
         | 
| 15 15 | 
             
              kind: boolean
         | 
| 16 16 | 
             
              get_value: '/^additional-paths install backup$/'
         | 
| 17 17 | 
             
              set_value: '<state> additional-paths install backup'
         | 
| @@ -189,7 +189,7 @@ soft_reconfiguration_in: | |
| 189 189 | 
             
                get_value: '/^soft-reconfiguration inbound(?: always)?/'
         | 
| 190 190 | 
             
                set_value: '<state> soft-reconfiguration inbound <always>'
         | 
| 191 191 | 
             
              N3k: *soft_recon_always
         | 
| 192 | 
            -
               | 
| 192 | 
            +
              N9k-F: *soft_recon_always
         | 
| 193 193 | 
             
              N9k: *soft_recon_always
         | 
| 194 194 | 
             
              else:
         | 
| 195 195 | 
             
                get_value: '/^soft-reconfiguration inbound/'
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            # bridge_domain
         | 
| 2 2 | 
             
            # bridge_domain feature is available only on n7k
         | 
| 3 3 | 
             
            ---
         | 
| 4 | 
            -
            _exclude: [N3k, N5k, N6k,  | 
| 4 | 
            +
            _exclude: [N3k, N5k, N6k, N9k-F, N9k, ios_xr]
         | 
| 5 5 |  | 
| 6 6 | 
             
            # For the below name, shutdown commands we are going to use show running-config
         | 
| 7 7 | 
             
            # bridge-domain cli which displays as below
         | 
| @@ -47,7 +47,7 @@ ipv4_relay: | |
| 47 47 | 
             
                default_value: false
         | 
| 48 48 | 
             
              N6k: *relay_default_false
         | 
| 49 49 | 
             
              N7k: *relay_default_true
         | 
| 50 | 
            -
               | 
| 50 | 
            +
              N9k-F: *relay_default_true
         | 
| 51 51 | 
             
              N9k: *relay_default_true
         | 
| 52 52 |  | 
| 53 53 | 
             
            ipv4_smart_relay:
         | 
| @@ -57,7 +57,7 @@ ipv4_smart_relay: | |
| 57 57 | 
             
              default_value: false
         | 
| 58 58 |  | 
| 59 59 | 
             
            ipv4_src_addr_hsrp:
         | 
| 60 | 
            -
              _exclude: [N3k,  | 
| 60 | 
            +
              _exclude: [N3k, N9k-F, N9k]
         | 
| 61 61 | 
             
              kind: boolean
         | 
| 62 62 | 
             
              get_value: '/^ip dhcp relay source-address hsrp$/'
         | 
| 63 63 | 
             
              set_value: "<state> ip dhcp relay source-address hsrp"
         | 
| @@ -69,14 +69,14 @@ ipv4_src_intf: | |
| 69 69 | 
             
              default_value: false
         | 
| 70 70 |  | 
| 71 71 | 
             
            ipv4_sub_option_circuit_id_custom:
         | 
| 72 | 
            -
              _exclude: [N7k,  | 
| 72 | 
            +
              _exclude: [N7k, N9k-F]
         | 
| 73 73 | 
             
              kind: boolean
         | 
| 74 74 | 
             
              get_value: '/^ip dhcp relay sub-option circuit-id customized$/'
         | 
| 75 75 | 
             
              set_value: "<state> ip dhcp relay sub-option circuit-id customized"
         | 
| 76 76 | 
             
              default_value: false
         | 
| 77 77 |  | 
| 78 78 | 
             
            ipv4_sub_option_circuit_id_string:
         | 
| 79 | 
            -
              _exclude: [N5k, N6k, N7k,  | 
| 79 | 
            +
              _exclude: [N5k, N6k, N7k, N9k-F, N9k]
         | 
| 80 80 | 
             
              get_value: '/^ip dhcp relay sub-option circuit-id format-type string format (.*)$/'
         | 
| 81 81 | 
             
              set_value: "<state> ip dhcp relay sub-option circuit-id format-type string <format> <word>"
         | 
| 82 82 | 
             
              default_value: false
         | 
| @@ -116,7 +116,7 @@ ipv6_relay: | |
| 116 116 | 
             
                default_value: false
         | 
| 117 117 | 
             
              N6k: *v6_relay_default_false
         | 
| 118 118 | 
             
              N7k: *v6_relay_default_true
         | 
| 119 | 
            -
               | 
| 119 | 
            +
              N9k-F: *v6_relay_default_true
         | 
| 120 120 | 
             
              N9k: *v6_relay_default_true
         | 
| 121 121 |  | 
| 122 122 | 
             
            ipv6_src_intf:
         |