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
| @@ -21,6 +21,12 @@ all_ssm_ranges: | |
| 21 21 | 
             
              multiple:
         | 
| 22 22 | 
             
              get_value : '/^<afi> pim ssm range (.*)$/'
         | 
| 23 23 |  | 
| 24 | 
            +
            bfd:
         | 
| 25 | 
            +
              kind: boolean
         | 
| 26 | 
            +
              get_value: '/^<afi> pim bfd$/'
         | 
| 27 | 
            +
              set_value: "<state> <afi> pim bfd"
         | 
| 28 | 
            +
              default_value: false
         | 
| 29 | 
            +
             | 
| 24 30 | 
             
            group_list:
         | 
| 25 31 | 
             
              default_value: ~
         | 
| 26 32 | 
             
              get_value: '/^<afi> pim rp-address (\S+) group-list (\S+)/'
         | 
| @@ -6,7 +6,7 @@ _template: | |
| 6 6 | 
             
              get_command: "show running all"
         | 
| 7 7 |  | 
| 8 8 | 
             
            asymmetric:
         | 
| 9 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 9 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 10 10 | 
             
              default_value: false
         | 
| 11 11 |  | 
| 12 12 | 
             
            bundle_hash:
         | 
| @@ -15,7 +15,7 @@ bundle_hash: | |
| 15 15 | 
             
              N5k: *bundle_hash_ip
         | 
| 16 16 | 
             
              N6k: *bundle_hash_ip
         | 
| 17 17 | 
             
              N7k: *bundle_hash_ip
         | 
| 18 | 
            -
               | 
| 18 | 
            +
              N9k-F: &bundle_hash_ip_l4port
         | 
| 19 19 | 
             
                default_value: 'ip-l4port'
         | 
| 20 20 | 
             
              N9k: *bundle_hash_ip_l4port
         | 
| 21 21 |  | 
| @@ -23,18 +23,18 @@ bundle_select: | |
| 23 23 | 
             
              default_value: 'src-dst'
         | 
| 24 24 |  | 
| 25 25 | 
             
            concatenation:
         | 
| 26 | 
            -
              _exclude: [N3k, N5k, N6k, N7k,  | 
| 26 | 
            +
              _exclude: [N3k, N5k, N6k, N7k, N9k-F]
         | 
| 27 27 | 
             
              default_value: false
         | 
| 28 28 |  | 
| 29 29 | 
             
            hash_distribution:
         | 
| 30 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 30 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 31 31 | 
             
              get_value: '/^port.channel hash.distribution (.*)$/'
         | 
| 32 32 | 
             
              set_context:  ['terminal dont-ask']
         | 
| 33 33 | 
             
              set_value: "port-channel hash-distribution %s"
         | 
| 34 34 | 
             
              default_value: 'adaptive'
         | 
| 35 35 |  | 
| 36 36 | 
             
            hash_poly:
         | 
| 37 | 
            -
              _exclude: [N3k, N7k,  | 
| 37 | 
            +
              _exclude: [N3k, N7k, N9k-F, N9k]
         | 
| 38 38 | 
             
              default_value: ~
         | 
| 39 39 |  | 
| 40 40 | 
             
            load_balance_type:
         | 
| @@ -46,13 +46,13 @@ load_balance_type: | |
| 46 46 | 
             
              N6k: *load_balance_type_ethernet
         | 
| 47 47 | 
             
              N7k: &load_balance_type_asymmetric
         | 
| 48 48 | 
             
                default_only: "asymmetric"
         | 
| 49 | 
            -
               | 
| 49 | 
            +
              N9k-F: &load_balance_type_no_hash
         | 
| 50 50 | 
             
                default_only: "no_hash"
         | 
| 51 51 | 
             
              N9k: &load_balance_type_symmetry
         | 
| 52 52 | 
             
                default_only: "symmetry"
         | 
| 53 53 |  | 
| 54 54 | 
             
            load_defer:
         | 
| 55 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 55 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 56 56 | 
             
              kind: int
         | 
| 57 57 | 
             
              get_value: '/^port.channel load.defer (\d+)$/'
         | 
| 58 58 | 
             
              set_value: "port-channel load-defer %s"
         | 
| @@ -64,7 +64,7 @@ port_channel_load_balance: | |
| 64 64 | 
             
              set_value: "port-channel load-balance %s %s %s %s %s %s"
         | 
| 65 65 |  | 
| 66 66 | 
             
            resilient:
         | 
| 67 | 
            -
              _exclude: [N5k, N6k, N7k,  | 
| 67 | 
            +
              _exclude: [N5k, N6k, N7k, N9k-F]
         | 
| 68 68 | 
             
              kind: boolean
         | 
| 69 69 | 
             
              get_value: '/^port-channel load-balance resilient$/'
         | 
| 70 70 | 
             
              set_value: "%s port-channel load-balance resilient"
         | 
| @@ -80,5 +80,5 @@ rotate: | |
| 80 80 | 
             
              default_value: 0
         | 
| 81 81 |  | 
| 82 82 | 
             
            symmetry:
         | 
| 83 | 
            -
              _exclude: [N5k, N6k, N7k,  | 
| 83 | 
            +
              _exclude: [N5k, N6k, N7k, N9k-F]
         | 
| 84 84 | 
             
              default_value: false
         | 
| @@ -7,7 +7,7 @@ _template: | |
| 7 7 | 
             
              get_command: "show running-config spanning-tree"
         | 
| 8 8 |  | 
| 9 9 | 
             
            bd_designated_priority:
         | 
| 10 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 10 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 11 11 | 
             
              multiple:
         | 
| 12 12 | 
             
              get_context: ['/^spanning-tree pseudo-information$/']
         | 
| 13 13 | 
             
              get_value: '/^bridge-domain (.*) designated priority (.*)$/'
         | 
| @@ -16,40 +16,40 @@ bd_designated_priority: | |
| 16 16 | 
             
              default_value: []
         | 
| 17 17 |  | 
| 18 18 | 
             
            bd_forward_time:
         | 
| 19 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 19 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 20 20 | 
             
              multiple:
         | 
| 21 21 | 
             
              get_value: '/^spanning-tree bridge-domain (.*) forward-time (.*)$/'
         | 
| 22 22 | 
             
              set_value: "<state> spanning-tree bridge-domain <range> forward-time <val>"
         | 
| 23 23 | 
             
              default_value: []
         | 
| 24 24 |  | 
| 25 25 | 
             
            bd_hello_time:
         | 
| 26 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 26 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 27 27 | 
             
              multiple:
         | 
| 28 28 | 
             
              get_value: '/^spanning-tree bridge-domain (.*) hello-time (.*)$/'
         | 
| 29 29 | 
             
              set_value: "<state> spanning-tree bridge-domain <range> hello-time <val>"
         | 
| 30 30 | 
             
              default_value: []
         | 
| 31 31 |  | 
| 32 32 | 
             
            bd_max_age:
         | 
| 33 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 33 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 34 34 | 
             
              multiple:
         | 
| 35 35 | 
             
              get_value: '/^spanning-tree bridge-domain (.*) max-age (.*)$/'
         | 
| 36 36 | 
             
              set_value: "<state> spanning-tree bridge-domain <range> max-age <val>"
         | 
| 37 37 | 
             
              default_value: []
         | 
| 38 38 |  | 
| 39 39 | 
             
            bd_priority:
         | 
| 40 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 40 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 41 41 | 
             
              multiple:
         | 
| 42 42 | 
             
              get_value: '/^spanning-tree bridge-domain (.*) priority (.*)$/'
         | 
| 43 43 | 
             
              set_value: "<state> spanning-tree bridge-domain <range> priority <val>"
         | 
| 44 44 | 
             
              default_value: []
         | 
| 45 45 |  | 
| 46 46 | 
             
            bd_range:
         | 
| 47 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 47 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 48 48 | 
             
              kind: string
         | 
| 49 49 | 
             
              default_only: "2-3967"
         | 
| 50 50 |  | 
| 51 51 | 
             
            bd_root_priority:
         | 
| 52 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 52 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 53 53 | 
             
              multiple:
         | 
| 54 54 | 
             
              get_context: ['/^spanning-tree pseudo-information$/']
         | 
| 55 55 | 
             
              get_value: '/^bridge-domain (.*) root priority (.*)$/'
         | 
| @@ -78,7 +78,7 @@ bridge_assurance: | |
| 78 78 | 
             
              default_value: true
         | 
| 79 79 |  | 
| 80 80 | 
             
            domain:
         | 
| 81 | 
            -
              _exclude: [N3k,  | 
| 81 | 
            +
              _exclude: [N3k, N9k-F, N9k]
         | 
| 82 82 | 
             
              kind: int
         | 
| 83 83 | 
             
              get_value: '/^spanning-tree domain (\d+)$/'
         | 
| 84 84 | 
             
              set_value: "<state> spanning-tree domain <domain>"
         | 
| @@ -3,7 +3,7 @@ | |
| 3 3 | 
             
            # The current simplified implementation assumes no admin-vdc and that the
         | 
| 4 4 | 
             
            # default vdc name uses id 1. Full multi-vdc support is TBD.
         | 
| 5 5 | 
             
            ---
         | 
| 6 | 
            -
            _exclude: [N3k, N5k, N6k,  | 
| 6 | 
            +
            _exclude: [N3k, N5k, N6k, N9k-F, N9k, ios_xr]
         | 
| 7 7 |  | 
| 8 8 | 
             
            _template:
         | 
| 9 9 | 
             
              get_command: 'show run vdc all'
         | 
| @@ -4,8 +4,10 @@ _exclude: [ios_xr] | |
| 4 4 |  | 
| 5 5 | 
             
            all_vlans:
         | 
| 6 6 | 
             
              multiple: true
         | 
| 7 | 
            +
              get_data_format: nxapi_structured
         | 
| 7 8 | 
             
              get_command: "show vlan brief"
         | 
| 8 | 
            -
               | 
| 9 | 
            +
              get_context: ["TABLE_vlanbriefxbrief", "ROW_vlanbriefxbrief"]
         | 
| 10 | 
            +
              get_value: "vlanshowbr-vlanid-utf"
         | 
| 9 11 |  | 
| 10 12 | 
             
            create:
         | 
| 11 13 | 
             
              set_value: "vlan %s"
         | 
| @@ -14,7 +16,7 @@ destroy: | |
| 14 16 | 
             
              set_value: "no vlan %s"
         | 
| 15 17 |  | 
| 16 18 | 
             
            fabric_control:
         | 
| 17 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 19 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 18 20 | 
             
              kind: boolean
         | 
| 19 21 | 
             
              get_command: "show running-config vlan"
         | 
| 20 22 | 
             
              get_context: ['/^vlan <vlan>/']
         | 
| @@ -27,7 +29,7 @@ mapped_vni: | |
| 27 29 | 
             
              _exclude: [N7k]
         | 
| 28 30 | 
             
              N3k: &mapped_vni_n3_8_9k
         | 
| 29 31 | 
             
                get_command: 'show running vlan'
         | 
| 30 | 
            -
               | 
| 32 | 
            +
              N9k-F: *mapped_vni_n3_8_9k
         | 
| 31 33 | 
             
              N9k: *mapped_vni_n3_8_9k
         | 
| 32 34 | 
             
              N5k: &mapped_vni_n5_6k
         | 
| 33 35 | 
             
                get_command: 'show running vlan 1-4094'
         | 
| @@ -48,7 +50,7 @@ mapped_vni_requires_nv_overlay: | |
| 48 50 | 
             
                default_only: false
         | 
| 49 51 |  | 
| 50 52 | 
             
            mode:
         | 
| 51 | 
            -
              _exclude: [N3k, N9k]
         | 
| 53 | 
            +
              _exclude: [N3k, N9k, N9k-F]
         | 
| 52 54 | 
             
              multiple: true
         | 
| 53 55 | 
             
              get_command: "show vlan"
         | 
| 54 56 | 
             
              # TBD: 'show vlan' is problematic and should be converted to use show run
         | 
| @@ -59,13 +61,16 @@ mode: | |
| 59 61 | 
             
              default_value: 'CE'
         | 
| 60 62 |  | 
| 61 63 | 
             
            name:
         | 
| 64 | 
            +
              kind: string
         | 
| 65 | 
            +
              get_data_format: nxapi_structured
         | 
| 62 66 | 
             
              get_command: "show vlan brief"
         | 
| 63 | 
            -
               | 
| 67 | 
            +
              get_context: ["TABLE_vlanbriefxbrief", "ROW_vlanbriefxbrief"]
         | 
| 68 | 
            +
              get_value: ["vlanshowbr-vlanid-utf <vlanid>", "vlanshowbr-vlanname"]
         | 
| 64 69 | 
             
              set_context: ["vlan %d"]
         | 
| 65 70 | 
             
              set_value: "%s name %s ; end"
         | 
| 66 71 |  | 
| 67 72 | 
             
            pvlan_association:
         | 
| 68 | 
            -
              _exclude: [ | 
| 73 | 
            +
              _exclude: [N9k-F]
         | 
| 69 74 | 
             
              multiple: true
         | 
| 70 75 | 
             
              get_command: "show vlan private-vlan"
         | 
| 71 76 | 
             
              get_value: '/^<id>\s+(\d+)/'
         | 
| @@ -74,7 +79,7 @@ pvlan_association: | |
| 74 79 | 
             
              default_value: []
         | 
| 75 80 |  | 
| 76 81 | 
             
            pvlan_type:
         | 
| 77 | 
            -
              _exclude: [ | 
| 82 | 
            +
              _exclude: [N9k-F]
         | 
| 78 83 | 
             
              kind: string
         | 
| 79 84 | 
             
              get_command: 'show vlan private-vlan type'
         | 
| 80 85 | 
             
              get_value: '/^<id>\s+(\S+)/'
         | 
| @@ -83,8 +88,11 @@ pvlan_type: | |
| 83 88 | 
             
              default_value: ""
         | 
| 84 89 |  | 
| 85 90 | 
             
            shutdown:
         | 
| 91 | 
            +
              kind: boolean
         | 
| 92 | 
            +
              get_data_format: nxapi_structured
         | 
| 86 93 | 
             
              get_command: "show vlan brief"
         | 
| 87 | 
            -
               | 
| 94 | 
            +
              get_context: ["TABLE_vlanbriefxbrief", "ROW_vlanbriefxbrief"]
         | 
| 95 | 
            +
              get_value: ["vlanshowbr-vlanid-utf <vlanid>", "vlanshowbr-shutstate", '/^shutdown$/']
         | 
| 88 96 | 
             
              set_context: ["vlan %d"]
         | 
| 89 97 | 
             
              set_value: "%s shutdown ; end"
         | 
| 90 98 | 
             
              default_value: false
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # vpc
         | 
| 2 2 | 
             
            ---
         | 
| 3 | 
            -
            _exclude: [ios_xr,  | 
| 3 | 
            +
            _exclude: [ios_xr, N9k-F]
         | 
| 4 4 |  | 
| 5 5 | 
             
            _template:
         | 
| 6 6 | 
             
              get_command:  'show running-config vpc all'
         | 
| @@ -58,7 +58,7 @@ dual_active_exclude_interface_vlan_bridge_domain: | |
| 58 58 | 
             
              default_value: 'none'
         | 
| 59 59 |  | 
| 60 60 | 
             
            fabricpath_emulated_switch_id:
         | 
| 61 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 61 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 62 62 | 
             
              kind: int
         | 
| 63 63 | 
             
              set_context:  ['terminal dont-ask', 'vpc domain <domain>']
         | 
| 64 64 | 
             
              get_value: '/^fabricpath switch-id\s+(\d+)$/'
         | 
| @@ -66,7 +66,7 @@ fabricpath_emulated_switch_id: | |
| 66 66 | 
             
              default_value: false
         | 
| 67 67 |  | 
| 68 68 | 
             
            fabricpath_multicast_load_balance:
         | 
| 69 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 69 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 70 70 | 
             
              kind: boolean
         | 
| 71 71 | 
             
              get_value: '/^fabricpath multicast load-balance$/'
         | 
| 72 72 | 
             
              set_value: "<state> fabricpath multicast load-balance"
         | 
| @@ -90,7 +90,7 @@ graceful_consistency_check: | |
| 90 90 |  | 
| 91 91 | 
             
            layer3_peer_routing:
         | 
| 92 92 | 
             
              kind: boolean
         | 
| 93 | 
            -
              _exclude: [N3k,  | 
| 93 | 
            +
              _exclude: [N3k, N9k-F, N9k]
         | 
| 94 94 | 
             
              get_value: '/^layer3 peer-router$/'
         | 
| 95 95 | 
             
              set_value: "<state> layer3 peer-router"
         | 
| 96 96 | 
             
              default_value: false
         | 
| @@ -105,14 +105,14 @@ peer_gateway: | |
| 105 105 | 
             
            # Exclude everyone for now till the BD command is fully supported
         | 
| 106 106 | 
             
            peer_gateway_exclude_bridge_domain:
         | 
| 107 107 | 
             
              kind: string
         | 
| 108 | 
            -
              _exclude: [N3k, N5k, N6k, N7k,  | 
| 108 | 
            +
              _exclude: [N3k, N5k, N6k, N7k, N9k-F, N9k]
         | 
| 109 109 | 
             
              set_context:  ['terminal dont-ask', 'vpc domain <domain>']
         | 
| 110 110 | 
             
              get_value: '/^peer-gateway exclude bridge-domain\s+(\S+)/'
         | 
| 111 111 | 
             
              set_value: "peer-gateway exclude-bridge-domain <range>"
         | 
| 112 112 | 
             
              default_value: ''
         | 
| 113 113 |  | 
| 114 114 | 
             
            peer_gateway_exclude_vlan:
         | 
| 115 | 
            -
              _exclude: [N3k,  | 
| 115 | 
            +
              _exclude: [N3k, N9k-F, N9k]
         | 
| 116 116 | 
             
              kind: string
         | 
| 117 117 | 
             
              set_context:  ['terminal dont-ask', 'vpc domain <domain>']
         | 
| 118 118 | 
             
              get_value: '/^peer-gateway exclude-vlan\s(\S+)/'
         | 
| @@ -161,11 +161,11 @@ peer_keepalive_vrf: | |
| 161 161 | 
             
              default_value: 'management'
         | 
| 162 162 |  | 
| 163 163 | 
             
            phy_port_vpc_module_pids:
         | 
| 164 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 164 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 165 165 | 
             
              default_only: 'N7[K7]-(?:F2|F3|F4|M3)'
         | 
| 166 166 |  | 
| 167 167 | 
             
            port_channel_limit:
         | 
| 168 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 168 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 169 169 | 
             
              auto_default: false
         | 
| 170 170 | 
             
              kind: boolean
         | 
| 171 171 | 
             
              get_value: '/^port-channel limit/'
         | 
| @@ -180,14 +180,14 @@ role_priority: | |
| 180 180 |  | 
| 181 181 | 
             
            self_isolation:
         | 
| 182 182 | 
             
              kind: boolean
         | 
| 183 | 
            -
              _exclude: [N3k, N5k, N6k,  | 
| 183 | 
            +
              _exclude: [N3k, N5k, N6k, N9k-F, N9k]
         | 
| 184 184 | 
             
              get_value: '/^self-isolation/'
         | 
| 185 185 | 
             
              set_value: "<state> self-isolation"
         | 
| 186 186 | 
             
              default_value: false
         | 
| 187 187 |  | 
| 188 188 | 
             
            shutdown:
         | 
| 189 189 | 
             
              kind: boolean
         | 
| 190 | 
            -
              _exclude: [N3k,  | 
| 190 | 
            +
              _exclude: [N3k, N9k-F, N9k]
         | 
| 191 191 | 
             
              get_value: '/^shutdown/'
         | 
| 192 192 | 
             
              set_value: "<state> shutdown"
         | 
| 193 193 | 
             
              default_value: false
         | 
| @@ -207,7 +207,7 @@ system_priority: | |
| 207 207 | 
             
            # Exclude everyone for now till the track command is fully supported
         | 
| 208 208 | 
             
            track:
         | 
| 209 209 | 
             
              kind: int
         | 
| 210 | 
            -
              _exclude: [N3k, N5k, N6k, N7k,  | 
| 210 | 
            +
              _exclude: [N3k, N5k, N6k, N7k, N9k-F, N9k]
         | 
| 211 211 | 
             
              get_value: '/^track\s+(\d+)/'
         | 
| 212 212 | 
             
              set_value: "<state> track <val>"
         | 
| 213 213 | 
             
              default_value: 0
         | 
| @@ -70,11 +70,12 @@ shutdown: | |
| 70 70 |  | 
| 71 71 | 
             
            vni: # TBD Should this move to the vni provider as vrf_vni?
         | 
| 72 72 | 
             
              # MT-lite only
         | 
| 73 | 
            -
              N9k:
         | 
| 73 | 
            +
              N9k: &vni9k
         | 
| 74 74 | 
             
                kind: int
         | 
| 75 75 | 
             
                get_value: '/^vni (\d+)$/'
         | 
| 76 76 | 
             
                set_value: '<state> vni <id>'
         | 
| 77 77 | 
             
                default_value: false
         | 
| 78 | 
            +
              N9k-F: *vni9k
         | 
| 78 79 |  | 
| 79 80 | 
             
            vpn_id:
         | 
| 80 81 | 
             
              _exclude: [nexus]
         | 
| @@ -434,13 +434,20 @@ module Cisco | |
| 434 434 | 
             
                  puts "DEBUG: #{text}" if @@debug
         | 
| 435 435 | 
             
                end
         | 
| 436 436 |  | 
| 437 | 
            -
                KNOWN_PLATFORMS = %w(C3064 C3132 C3172 N3k N5k N6k N7k  | 
| 437 | 
            +
                KNOWN_PLATFORMS = %w(C3064 C3132 C3172 N3k N5k N6k N7k N9k N9k-F XRv9k)
         | 
| 438 438 |  | 
| 439 439 | 
             
                def self.platform_to_filter(platform)
         | 
| 440 440 | 
             
                  if KNOWN_PLATFORMS.include?(platform)
         | 
| 441 441 | 
             
                    case platform
         | 
| 442 442 | 
             
                    when 'XRv9k'
         | 
| 443 443 | 
             
                      /XRV9/
         | 
| 444 | 
            +
                    when 'N9k'
         | 
| 445 | 
            +
                      # For non-fretta n9k platforms we need to
         | 
| 446 | 
            +
                      # match everything except the trailing -F
         | 
| 447 | 
            +
                      /^N9...(?!.*-F)/
         | 
| 448 | 
            +
                    when 'N9k-F'
         | 
| 449 | 
            +
                      # For fretta n9k we need to include the trailing -F
         | 
| 450 | 
            +
                      /^N9.*-F$/
         | 
| 444 451 | 
             
                    else
         | 
| 445 452 | 
             
                      Regexp.new platform.tr('k', '')
         | 
| 446 453 | 
             
                    end
         | 
| @@ -49,8 +49,23 @@ module Cisco | |
| 49 49 | 
             
                    config_set('dnsclient', 'domain_name',
         | 
| 50 50 | 
             
                               state: '', name: @name)
         | 
| 51 51 | 
             
                  else
         | 
| 52 | 
            -
                     | 
| 53 | 
            -
             | 
| 52 | 
            +
                    # On some platforms attempts to create a new domain results
         | 
| 53 | 
            +
                    # in the error. 'ERROR: Deletion of VRF test in progresswait
         | 
| 54 | 
            +
                    # for it to complete'.  We handle this by trying up to 10 times
         | 
| 55 | 
            +
                    # with a 1 second delay between attempts before giving up.
         | 
| 56 | 
            +
                    tries = 10
         | 
| 57 | 
            +
                    begin
         | 
| 58 | 
            +
                      config_set('dnsclient', 'domain_name_vrf',
         | 
| 59 | 
            +
                                 state: '', name: @name, vrf: @vrf)
         | 
| 60 | 
            +
                    rescue Cisco::CliError => e
         | 
| 61 | 
            +
                      if /ERROR: Deletion of VRF .* in progress/.match(e.to_s)
         | 
| 62 | 
            +
                        sleep 1
         | 
| 63 | 
            +
                        tries -= 1
         | 
| 64 | 
            +
                        # rubocop:disable Metrics/BlockNesting
         | 
| 65 | 
            +
                        retry if tries > 0
         | 
| 66 | 
            +
                        # rubocop:enable Metrics/BlockNesting
         | 
| 67 | 
            +
                      end
         | 
| 68 | 
            +
                    end
         | 
| 54 69 | 
             
                  end
         | 
| 55 70 | 
             
                end
         | 
| 56 71 |  |