cisco_node_utils 1.2.0 → 1.3.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/.gitignore +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +13 -0
- data/.travis.yml +4 -1
- data/CHANGELOG.md +81 -2
- data/CONTRIBUTING.md +2 -17
- data/Gemfile +5 -0
- data/README.md +92 -47
- data/Rakefile +23 -1
- data/bin/git/hooks/hook_lib +7 -0
- data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
- data/bin/git/hooks/pre-commit/rubocop +7 -2
- data/bin/git/hooks/pre-commit/validate-diffs +18 -4
- data/bin/git/hooks/pre-commit/validate-yaml +18 -0
- data/bin/git/update-hooks +64 -6
- data/cisco_node_utils.gemspec +9 -6
- data/docs/README-develop-best-practices.md +149 -50
- data/docs/README-develop-node-utils-APIs.md +92 -42
- data/docs/README-maintainers.md +7 -4
- data/docs/README-test-execution.md +57 -0
- data/docs/cisco_node_utils.yaml.example +30 -0
- data/docs/template-router.rb +4 -0
- data/ext/mkrf_conf.rb +63 -0
- data/lib/.rubocop.yml +2 -2
- data/lib/cisco_node_utils.rb +5 -0
- data/lib/cisco_node_utils/aaa_authentication_login.rb +5 -6
- data/lib/cisco_node_utils/aaa_authorization_service.rb +1 -1
- data/lib/cisco_node_utils/ace.rb +165 -12
- data/lib/cisco_node_utils/acl.rb +2 -1
- data/lib/cisco_node_utils/bgp.rb +184 -21
- data/lib/cisco_node_utils/bgp_af.rb +94 -249
- data/lib/cisco_node_utils/bgp_neighbor.rb +94 -14
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +75 -8
- data/lib/cisco_node_utils/bridge_domain.rb +183 -0
- data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +85 -2
- data/lib/cisco_node_utils/client.rb +35 -0
- data/lib/cisco_node_utils/client/client.rb +234 -0
- data/lib/cisco_node_utils/client/grpc.rb +33 -0
- data/lib/cisco_node_utils/client/grpc/client.rb +311 -0
- data/lib/cisco_node_utils/client/grpc/ems.proto +148 -0
- data/lib/cisco_node_utils/client/grpc/ems.rb +111 -0
- data/lib/cisco_node_utils/client/grpc/ems_services.rb +49 -0
- data/lib/cisco_node_utils/client/nxapi.rb +31 -0
- data/lib/cisco_node_utils/client/nxapi/client.rb +305 -0
- data/lib/cisco_node_utils/client/utils.rb +164 -0
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +222 -254
- data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +11 -8
- data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +22 -15
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +11 -8
- data/lib/cisco_node_utils/cmd_ref/acl.yaml +21 -16
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +239 -109
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +114 -55
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +76 -52
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +106 -62
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +71 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +35 -14
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +23 -17
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +94 -83
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +22 -17
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +76 -26
- data/lib/cisco_node_utils/cmd_ref/images.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +381 -153
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +21 -11
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +21 -21
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +30 -21
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +18 -13
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +26 -31
- data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +83 -0
- data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +119 -0
- data/lib/cisco_node_utils/cmd_ref/memory.yaml +17 -6
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +10 -3
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +17 -5
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +33 -29
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +12 -10
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +16 -19
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +40 -25
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +17 -12
- data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +71 -35
- data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +10 -5
- data/lib/cisco_node_utils/cmd_ref/show_system.yaml +6 -2
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +47 -43
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +13 -11
- data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +4 -2
- data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +23 -21
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +26 -22
- data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +19 -17
- data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +18 -6
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +234 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +24 -9
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +5 -3
- data/lib/cisco_node_utils/cmd_ref/system.yaml +4 -3
- data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +22 -20
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +27 -15
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +45 -16
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +21 -11
- data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +60 -32
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +118 -101
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +54 -58
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +118 -0
- data/lib/cisco_node_utils/cmd_ref/vtp.yaml +19 -25
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +28 -18
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +34 -17
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +6 -4
- data/lib/cisco_node_utils/command_reference.rb +261 -142
- data/lib/cisco_node_utils/constants.rb +33 -0
- data/lib/cisco_node_utils/encapsulation.rb +112 -0
- data/lib/cisco_node_utils/environment.rb +102 -0
- data/lib/cisco_node_utils/evpn_vni.rb +5 -3
- data/lib/cisco_node_utils/exceptions.rb +111 -0
- data/lib/cisco_node_utils/fabricpath_global.rb +52 -35
- data/lib/cisco_node_utils/fabricpath_topology.rb +44 -57
- data/lib/cisco_node_utils/feature.rb +165 -3
- data/lib/cisco_node_utils/interface.rb +1051 -260
- data/lib/cisco_node_utils/interface_channel_group.rb +11 -10
- data/lib/cisco_node_utils/interface_ospf.rb +1 -2
- data/lib/cisco_node_utils/interface_portchannel.rb +4 -12
- data/lib/cisco_node_utils/interface_service_vni.rb +7 -7
- data/lib/cisco_node_utils/itd_device_group.rb +248 -0
- data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
- data/lib/cisco_node_utils/itd_service.rb +523 -0
- data/lib/cisco_node_utils/logger.rb +75 -0
- data/lib/cisco_node_utils/node.rb +62 -192
- data/lib/cisco_node_utils/node_util.rb +56 -10
- data/lib/cisco_node_utils/overlay_global.rb +2 -2
- data/lib/cisco_node_utils/pim.rb +2 -13
- data/lib/cisco_node_utils/pim_group_list.rb +1 -1
- data/lib/cisco_node_utils/pim_rp_address.rb +1 -1
- data/lib/cisco_node_utils/platform.rb +52 -21
- data/lib/cisco_node_utils/portchannel_global.rb +89 -19
- data/lib/cisco_node_utils/radius_server.rb +168 -37
- data/lib/cisco_node_utils/router_ospf.rb +20 -35
- data/lib/cisco_node_utils/router_ospf_vrf.rb +4 -4
- data/lib/cisco_node_utils/snmpserver.rb +1 -6
- data/lib/cisco_node_utils/snmpuser.rb +6 -4
- data/lib/cisco_node_utils/stp_global.rb +676 -0
- data/lib/cisco_node_utils/syslog_server.rb +77 -18
- data/lib/cisco_node_utils/syslog_settings.rb +1 -1
- data/lib/cisco_node_utils/tacacs_server_group.rb +8 -4
- data/lib/cisco_node_utils/tacacs_server_host.rb +115 -25
- data/lib/cisco_node_utils/vdc.rb +12 -0
- data/lib/cisco_node_utils/version.rb +1 -1
- data/lib/cisco_node_utils/vlan.rb +147 -29
- data/lib/cisco_node_utils/vpc.rb +55 -3
- data/lib/cisco_node_utils/vrf.rb +72 -11
- data/lib/cisco_node_utils/vrf_af.rb +114 -29
- data/lib/cisco_node_utils/vtp.rb +34 -52
- data/lib/cisco_node_utils/vxlan_vtep.rb +34 -8
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +36 -4
- data/lib/minitest/environment_plugin.rb +31 -0
- data/lib/minitest/log_level_plugin.rb +41 -0
- data/spec/client_spec.rb +7 -0
- data/spec/environment_spec.rb +263 -0
- data/spec/grpc_client_spec.rb +23 -0
- data/spec/isolate/all_clients_spec.rb +9 -0
- data/spec/isolate/grpc_only_spec.rb +16 -0
- data/spec/isolate/no_clients_spec.rb +26 -0
- data/spec/isolate/nxapi_only_spec.rb +16 -0
- data/spec/nxapi_client_spec.rb +42 -0
- data/spec/schema.yaml +75 -0
- data/spec/shared_examples_for_clients.rb +14 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/whitespace_spec.rb +10 -0
- data/spec/yaml_spec.rb +42 -0
- data/tests/.rubocop.yml +2 -2
- data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
- data/tests/basetest.rb +96 -36
- data/tests/ciscotest.rb +220 -12
- data/tests/cmd_config.yaml +71 -49
- data/tests/cmd_config_invalid.yaml +1 -1
- data/tests/test_aaa_authentication_login.rb +1 -0
- data/tests/test_aaa_authentication_login_service.rb +9 -0
- data/tests/test_aaa_authorization_service.rb +173 -367
- data/tests/test_ace.rb +171 -100
- data/tests/test_acl.rb +10 -1
- data/tests/test_bgp_af.rb +395 -728
- data/tests/test_bgp_neighbor.rb +274 -115
- data/tests/test_bgp_neighbor_af.rb +178 -77
- data/tests/test_bridge_domain.rb +191 -0
- data/tests/test_bridge_domain_vni.rb +116 -0
- data/tests/test_client_utils.rb +111 -0
- data/tests/test_command_config.rb +9 -5
- data/tests/test_command_reference.rb +380 -102
- data/tests/test_dns_domain.rb +13 -3
- data/tests/test_domain_name.rb +13 -3
- data/tests/test_encapsulation.rb +77 -0
- data/tests/test_evpn_vni.rb +25 -7
- data/tests/test_fabricpath_global.rb +167 -163
- data/tests/test_fabricpath_topology.rb +12 -33
- data/tests/test_feature.rb +215 -0
- data/tests/test_grpc.rb +166 -0
- data/tests/test_interface.rb +585 -344
- data/tests/test_interface_bdi.rb +80 -0
- data/tests/test_interface_channel_group.rb +6 -3
- data/tests/test_interface_ospf.rb +26 -24
- data/tests/test_interface_portchannel.rb +1 -0
- data/tests/test_interface_private_vlan.rb +724 -0
- data/tests/test_interface_service_vni.rb +37 -66
- data/tests/test_interface_svi.rb +98 -101
- data/tests/test_interface_switchport.rb +419 -549
- data/tests/test_itd_device_group.rb +145 -0
- data/tests/test_itd_device_group_node.rb +199 -0
- data/tests/test_itd_service.rb +298 -0
- data/tests/test_logger.rb +43 -0
- data/tests/test_name_server.rb +11 -2
- data/tests/test_node.rb +16 -75
- data/tests/test_node_ext.rb +174 -163
- data/tests/test_node_util.rb +119 -0
- data/tests/test_ntp_config.rb +5 -1
- data/tests/test_ntp_server.rb +2 -2
- data/tests/test_nxapi.rb +221 -0
- data/tests/test_overlay_global.rb +47 -38
- data/tests/test_pim.rb +2 -0
- data/tests/test_pim_group_list.rb +2 -0
- data/tests/test_pim_rp_address.rb +2 -0
- data/tests/test_platform.rb +86 -39
- data/tests/test_portchannel_global.rb +211 -135
- data/tests/test_radius_global.rb +13 -5
- data/tests/test_radius_server.rb +256 -104
- data/tests/test_radius_server_group.rb +2 -0
- data/tests/test_router_bgp.rb +781 -485
- data/tests/test_router_ospf.rb +26 -103
- data/tests/test_router_ospf_vrf.rb +52 -57
- data/tests/test_snmp_notification_receiver.rb +2 -0
- data/tests/test_snmpcommunity.rb +2 -0
- data/tests/test_snmpgroup.rb +2 -0
- data/tests/test_snmpnotification.rb +40 -21
- data/tests/test_snmpserver.rb +2 -0
- data/tests/test_snmpuser.rb +2 -0
- data/tests/test_stp_global.rb +563 -0
- data/tests/test_syslog_server.rb +32 -8
- data/tests/test_syslog_settings.rb +22 -9
- data/tests/test_tacacs_server.rb +32 -27
- data/tests/test_tacacs_server_group.rb +100 -45
- data/tests/test_tacacs_server_host.rb +135 -43
- data/tests/test_vdc.rb +2 -16
- data/tests/test_vlan.rb +106 -54
- data/tests/test_vlan_mt_full.rb +11 -21
- data/tests/test_vlan_private.rb +669 -0
- data/tests/test_vpc.rb +312 -159
- data/tests/test_vrf.rb +122 -113
- data/tests/test_vrf_af.rb +238 -0
- data/tests/test_vtp.rb +58 -102
- data/tests/test_vxlan_vtep.rb +38 -17
- data/tests/test_vxlan_vtep_vni.rb +61 -9
- data/tests/test_yum.rb +49 -25
- metadata +122 -36
- data/lib/cisco_node_utils/cmd_ref/fex.yaml +0 -9
- data/lib/cisco_node_utils/cmd_ref/vni.yaml +0 -76
- data/lib/cisco_node_utils/vni.rb +0 -227
- data/tests/test_vni.rb +0 -106
|
@@ -117,7 +117,7 @@ module Cisco
|
|
|
117
117
|
# aaa authorization login <type> <name> /
|
|
118
118
|
# local | group <group1 [group2, ...]> [local]
|
|
119
119
|
def groups_method_set(grps, m)
|
|
120
|
-
|
|
120
|
+
grps = Array(grps) unless grps.is_a? Array
|
|
121
121
|
fail TypeError unless grps.all? { |x| x.is_a? String }
|
|
122
122
|
fail TypeError unless m.is_a? Symbol
|
|
123
123
|
# only the following are supported (unselected = blank)
|
data/lib/cisco_node_utils/ace.rb
CHANGED
|
@@ -17,7 +17,7 @@ require_relative 'node_util'
|
|
|
17
17
|
module Cisco
|
|
18
18
|
# Ace - node utility class for Ace Configuration
|
|
19
19
|
class Ace < NodeUtil
|
|
20
|
-
attr_reader :afi, :acl_name
|
|
20
|
+
attr_reader :afi, :acl_name
|
|
21
21
|
|
|
22
22
|
def initialize(afi, acl_name, seqno)
|
|
23
23
|
@afi = Acl.afi_cli(afi)
|
|
@@ -70,18 +70,27 @@ module Cisco
|
|
|
70
70
|
str = config_get('acl', 'ace', @get_args)
|
|
71
71
|
return nil if str.nil?
|
|
72
72
|
|
|
73
|
-
# remark is a description field, needs a separate regex
|
|
74
|
-
# Example: <MatchData "20 remark foo bar" seqno:"20" remark:"foo bar">
|
|
75
73
|
remark = Regexp.new('(?<seqno>\d+) remark (?<remark>.*)').match(str)
|
|
76
74
|
return remark unless remark.nil?
|
|
77
75
|
|
|
78
76
|
# rubocop:disable Metrics/LineLength
|
|
79
77
|
regexp = Regexp.new('(?<seqno>\d+) (?<action>\S+)'\
|
|
80
78
|
' *(?<proto>\d+|\S+)'\
|
|
81
|
-
' *(?<src_addr>any|host \S
|
|
82
|
-
' *(?<src_port>
|
|
83
|
-
' *(?<dst_addr>any|host \S
|
|
84
|
-
' *(?<dst_port>
|
|
79
|
+
' *(?<src_addr>any|host \S+|[:\.0-9a-fA-F]+ [:\.0-9a-fA-F]+|[:\.0-9a-fA-F]+\/\d+|addrgroup \S+)'\
|
|
80
|
+
' *(?<src_port>range \S+ \S+|(lt|eq|gt|neq|portgroup) \S+)?'\
|
|
81
|
+
' *(?<dst_addr>any|host \S+|[:\.0-9a-fA-F]+ [:\.0-9a-fA-F]+|[:\.0-9a-fA-F]+\/\d+|addrgroup \S+)'\
|
|
82
|
+
' *(?<dst_port>range \S+ \S+|(lt|eq|gt|neq|portgroup) \S+)?'\
|
|
83
|
+
' *(?<tcp_flags>(ack *|fin *|urg *|syn *|psh *|rst *)*)?'\
|
|
84
|
+
' *(?<established>established)?'\
|
|
85
|
+
' *(?<precedence>precedence \S+)?'\
|
|
86
|
+
' *(?<dscp>dscp \S+)?'\
|
|
87
|
+
' *(?<time_range>time-range \S+)?'\
|
|
88
|
+
' *(?<packet_length>packet-length (range \d+ \d+|(lt|eq|gt|neq) \d+))?'\
|
|
89
|
+
' *(?<ttl>ttl \d+)?'\
|
|
90
|
+
' *(?<http_method>http-method (\d+|connect|delete|get|head|post|put|trace))?'\
|
|
91
|
+
' *(?<tcp_option_length>tcp-option-length \d+)?'\
|
|
92
|
+
' *(?<redirect>redirect \S+)?'\
|
|
93
|
+
' *(?<log>log)?')
|
|
85
94
|
# rubocop:enable Metrics/LineLength
|
|
86
95
|
regexp.match(str)
|
|
87
96
|
end
|
|
@@ -99,22 +108,64 @@ module Cisco
|
|
|
99
108
|
|
|
100
109
|
if attrs[:remark]
|
|
101
110
|
cmd = 'ace_remark'
|
|
111
|
+
set_args_keys(attrs)
|
|
102
112
|
else
|
|
103
113
|
cmd = 'ace'
|
|
114
|
+
set_args_keys_default
|
|
115
|
+
set_args_keys(attrs)
|
|
104
116
|
[:action,
|
|
105
117
|
:proto,
|
|
106
118
|
:src_addr,
|
|
107
119
|
:src_port,
|
|
108
120
|
:dst_addr,
|
|
109
121
|
:dst_port,
|
|
122
|
+
:tcp_flags,
|
|
123
|
+
:established,
|
|
124
|
+
:precedence,
|
|
125
|
+
:dscp,
|
|
126
|
+
:time_range,
|
|
127
|
+
:packet_length,
|
|
128
|
+
:ttl,
|
|
129
|
+
:http_method,
|
|
130
|
+
:tcp_option_length,
|
|
131
|
+
:redirect,
|
|
132
|
+
:log,
|
|
110
133
|
].each do |p|
|
|
111
134
|
attrs[p] = '' if attrs[p].nil?
|
|
135
|
+
send(p.to_s + '=', attrs[p])
|
|
112
136
|
end
|
|
137
|
+
@get_args = @set_args
|
|
113
138
|
end
|
|
114
|
-
set_args_keys(attrs)
|
|
115
139
|
config_set('acl', cmd, @set_args)
|
|
116
140
|
end
|
|
117
141
|
|
|
142
|
+
# UTILITY FUNCTIONS
|
|
143
|
+
# -----------------
|
|
144
|
+
|
|
145
|
+
# extract value of property from ace
|
|
146
|
+
def extract_value(prop, prefix=nil)
|
|
147
|
+
prefix = prop if prefix.nil?
|
|
148
|
+
ace_match = ace_get
|
|
149
|
+
|
|
150
|
+
# matching ace not found
|
|
151
|
+
return nil if ace_match.nil? # no matching ace found
|
|
152
|
+
|
|
153
|
+
# property not defined for matching ace
|
|
154
|
+
return nil unless ace_match.names.include?(prop)
|
|
155
|
+
|
|
156
|
+
# extract and return value that follows prefix + <space>
|
|
157
|
+
regexp = Regexp.new("#{Regexp.escape(prefix)} (?<extracted>.*)")
|
|
158
|
+
value_match = regexp.match(ace_match[prop])
|
|
159
|
+
return nil if value_match.nil?
|
|
160
|
+
value_match[:extracted]
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# prepend property name prefix/keyword to value
|
|
164
|
+
def attach_prefix(val, prop, prefix=nil)
|
|
165
|
+
prefix = prop.to_s if prefix.nil?
|
|
166
|
+
@set_args[prop] = val.to_s.empty? ? val : "#{prefix} #{val}"
|
|
167
|
+
end
|
|
168
|
+
|
|
118
169
|
# PROPERTIES
|
|
119
170
|
# ----------
|
|
120
171
|
def seqno
|
|
@@ -155,8 +206,11 @@ module Cisco
|
|
|
155
206
|
|
|
156
207
|
def src_addr
|
|
157
208
|
match = ace_get
|
|
158
|
-
return nil if match.nil?
|
|
159
|
-
|
|
209
|
+
return nil if match.nil? || !match.names.include?('src_addr')
|
|
210
|
+
addr = match[:src_addr]
|
|
211
|
+
# Normalize addr. Some platforms zero_pad ipv6 addrs.
|
|
212
|
+
addr.gsub!(/^0*/, '').gsub!(/:0*/, ':')
|
|
213
|
+
addr
|
|
160
214
|
end
|
|
161
215
|
|
|
162
216
|
def src_addr=(src_addr)
|
|
@@ -175,8 +229,11 @@ module Cisco
|
|
|
175
229
|
|
|
176
230
|
def dst_addr
|
|
177
231
|
match = ace_get
|
|
178
|
-
return nil if match.nil?
|
|
179
|
-
|
|
232
|
+
return nil if match.nil? || !match.names.include?('dst_addr')
|
|
233
|
+
addr = match[:dst_addr]
|
|
234
|
+
# Normalize addr. Some platforms zero_pad ipv6 addrs.
|
|
235
|
+
addr.gsub!(/^0*/, '').gsub!(/:0*/, ':')
|
|
236
|
+
addr
|
|
180
237
|
end
|
|
181
238
|
|
|
182
239
|
def dst_addr=(dst_addr)
|
|
@@ -192,5 +249,101 @@ module Cisco
|
|
|
192
249
|
def dst_port=(src_port)
|
|
193
250
|
@set_args[:dst_port] = src_port
|
|
194
251
|
end
|
|
252
|
+
|
|
253
|
+
def tcp_flags
|
|
254
|
+
match = ace_get
|
|
255
|
+
return nil if match.nil?
|
|
256
|
+
match.names.include?('tcp_flags') ? match[:tcp_flags].strip : nil
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def tcp_flags=(tcp_flags)
|
|
260
|
+
@set_args[:tcp_flags] = tcp_flags.strip
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def established
|
|
264
|
+
match = ace_get
|
|
265
|
+
return false if match.nil?
|
|
266
|
+
return false unless match.names.include?('established')
|
|
267
|
+
match[:established] == 'established' ? true : false
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def established=(established)
|
|
271
|
+
@set_args[:established] = established.to_s == 'true' ? 'established' : ''
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def precedence
|
|
275
|
+
extract_value('precedence')
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def precedence=(precedence)
|
|
279
|
+
attach_prefix(precedence, :precedence)
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def dscp
|
|
283
|
+
extract_value('dscp')
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def dscp=(dscp)
|
|
287
|
+
attach_prefix(dscp, :dscp)
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def time_range
|
|
291
|
+
extract_value('time_range', 'time-range')
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
def time_range=(time_range)
|
|
295
|
+
attach_prefix(time_range, :time_range, 'time-range')
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
def packet_length
|
|
299
|
+
extract_value('packet_length', 'packet-length')
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def packet_length=(packet_length)
|
|
303
|
+
attach_prefix(packet_length, :packet_length, 'packet-length')
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def ttl
|
|
307
|
+
extract_value('ttl')
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def ttl=(ttl)
|
|
311
|
+
attach_prefix(ttl, :ttl)
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def http_method
|
|
315
|
+
extract_value('http_method', 'http-method')
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def http_method=(http_method)
|
|
319
|
+
attach_prefix(http_method, :http_method, 'http-method')
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
def tcp_option_length
|
|
323
|
+
extract_value('tcp_option_length', 'tcp-option-length')
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
def tcp_option_length=(tcp_option_length)
|
|
327
|
+
attach_prefix(tcp_option_length, :tcp_option_length, 'tcp-option-length')
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
def redirect
|
|
331
|
+
extract_value('redirect')
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
def redirect=(redirect)
|
|
335
|
+
attach_prefix(redirect, :redirect)
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def log
|
|
339
|
+
match = ace_get
|
|
340
|
+
return false if match.nil?
|
|
341
|
+
return false unless match.names.include?('log')
|
|
342
|
+
match[:log] == 'log' ? true : false
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
def log=(log)
|
|
346
|
+
@set_args[:log] = log.to_s == 'true' ? 'log' : ''
|
|
347
|
+
end
|
|
195
348
|
end
|
|
196
349
|
end
|
data/lib/cisco_node_utils/acl.rb
CHANGED
data/lib/cisco_node_utils/bgp.rb
CHANGED
|
@@ -14,9 +14,10 @@
|
|
|
14
14
|
# See the License for the specific language governing permissions and
|
|
15
15
|
# limitations under the License.
|
|
16
16
|
|
|
17
|
+
require_relative 'cisco_cmn_utils'
|
|
17
18
|
require_relative 'node_util'
|
|
18
19
|
require_relative 'feature'
|
|
19
|
-
require_relative '
|
|
20
|
+
require_relative 'logger'
|
|
20
21
|
|
|
21
22
|
module Cisco
|
|
22
23
|
# RouterBgp - node utility class for BGP general config management
|
|
@@ -32,6 +33,10 @@ module Cisco
|
|
|
32
33
|
create if instantiate
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
def to_s
|
|
37
|
+
"BGP #{asnum} VRF '#{vrf}'"
|
|
38
|
+
end
|
|
39
|
+
|
|
35
40
|
# Create a hash of all router bgp default and non-default
|
|
36
41
|
# vrf instances
|
|
37
42
|
def self.routers
|
|
@@ -80,8 +85,9 @@ module Cisco
|
|
|
80
85
|
|
|
81
86
|
# Create one router bgp instance
|
|
82
87
|
def create
|
|
83
|
-
Feature.bgp_enable
|
|
88
|
+
Feature.bgp_enable if platform == :nexus
|
|
84
89
|
router_bgp
|
|
90
|
+
wait_for_process_initialized
|
|
85
91
|
end
|
|
86
92
|
|
|
87
93
|
# Destroy router bgp instance
|
|
@@ -89,6 +95,24 @@ module Cisco
|
|
|
89
95
|
router_bgp('no')
|
|
90
96
|
end
|
|
91
97
|
|
|
98
|
+
def process_initialized?
|
|
99
|
+
config_get('bgp', 'process_initialized')
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def wait_for_process_initialized
|
|
103
|
+
return unless node.product_id[/N(5|6)/]
|
|
104
|
+
|
|
105
|
+
# Hack for slow-start platforms which will have setter failures if the
|
|
106
|
+
# bgp instance is still initializing. To see this problem in a sandbox
|
|
107
|
+
# do 'router bgp 1 ; router bgp 1 ; shutdown'.
|
|
108
|
+
4.times do
|
|
109
|
+
return if process_initialized?
|
|
110
|
+
sleep 1
|
|
111
|
+
node.cache_flush
|
|
112
|
+
end
|
|
113
|
+
fail 'BGP process is not initialized yet'
|
|
114
|
+
end
|
|
115
|
+
|
|
92
116
|
# Helper method to delete @set_args hash keys
|
|
93
117
|
def set_args_keys_default
|
|
94
118
|
@set_args = { asnum: @asnum }
|
|
@@ -98,6 +122,12 @@ module Cisco
|
|
|
98
122
|
|
|
99
123
|
# Attributes:
|
|
100
124
|
|
|
125
|
+
# nsr Getter
|
|
126
|
+
def nsr
|
|
127
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
128
|
+
config_get('bgp', 'nsr', @get_args)
|
|
129
|
+
end
|
|
130
|
+
|
|
101
131
|
# Bestpath Getters
|
|
102
132
|
def bestpath_always_compare_med
|
|
103
133
|
config_get('bgp', 'bestpath_always_compare_med', @get_args)
|
|
@@ -116,6 +146,7 @@ module Cisco
|
|
|
116
146
|
end
|
|
117
147
|
|
|
118
148
|
def bestpath_med_confed
|
|
149
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
119
150
|
config_get('bgp', 'bestpath_med_confed', @get_args)
|
|
120
151
|
end
|
|
121
152
|
|
|
@@ -127,6 +158,17 @@ module Cisco
|
|
|
127
158
|
config_get('bgp', 'bestpath_med_non_deterministic', @get_args)
|
|
128
159
|
end
|
|
129
160
|
|
|
161
|
+
# nsr Setter
|
|
162
|
+
def nsr=(enable)
|
|
163
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
164
|
+
fail Cisco::UnsupportedError.new('bgp', 'nsr', 'set', 'nsr is not ' \
|
|
165
|
+
'configurable on a per-VRF basis on ios_xr')
|
|
166
|
+
end
|
|
167
|
+
@set_args[:state] = (enable ? '' : 'no')
|
|
168
|
+
config_set('bgp', 'nsr', @set_args)
|
|
169
|
+
set_args_keys_default
|
|
170
|
+
end
|
|
171
|
+
|
|
130
172
|
# Bestpath Setters
|
|
131
173
|
def bestpath_always_compare_med=(enable)
|
|
132
174
|
@set_args[:state] = (enable ? '' : 'no')
|
|
@@ -153,6 +195,12 @@ module Cisco
|
|
|
153
195
|
end
|
|
154
196
|
|
|
155
197
|
def bestpath_med_confed=(enable)
|
|
198
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
199
|
+
fail Cisco::UnsupportedError.new('bgp', 'bestpath_med_confed', 'set',
|
|
200
|
+
'bestpath_med_confed is not ' \
|
|
201
|
+
'configurable on a per-VRF basis ' \
|
|
202
|
+
'on IOS XR')
|
|
203
|
+
end
|
|
156
204
|
@set_args[:state] = (enable ? '' : 'no')
|
|
157
205
|
config_set('bgp', 'bestpath_med_confed', @set_args)
|
|
158
206
|
set_args_keys_default
|
|
@@ -170,6 +218,12 @@ module Cisco
|
|
|
170
218
|
set_args_keys_default
|
|
171
219
|
end
|
|
172
220
|
|
|
221
|
+
# nsr Default
|
|
222
|
+
def default_nsr
|
|
223
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
224
|
+
config_get_default('bgp', 'nsr')
|
|
225
|
+
end
|
|
226
|
+
|
|
173
227
|
# Bestpath Defaults
|
|
174
228
|
def default_bestpath_always_compare_med
|
|
175
229
|
config_get_default('bgp', 'bestpath_always_compare_med')
|
|
@@ -188,6 +242,7 @@ module Cisco
|
|
|
188
242
|
end
|
|
189
243
|
|
|
190
244
|
def default_bestpath_med_confed
|
|
245
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
191
246
|
config_get_default('bgp', 'bestpath_med_confed')
|
|
192
247
|
end
|
|
193
248
|
|
|
@@ -201,6 +256,7 @@ module Cisco
|
|
|
201
256
|
|
|
202
257
|
# Cluster Id (Getter/Setter/Default)
|
|
203
258
|
def cluster_id
|
|
259
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
204
260
|
config_get('bgp', 'cluster_id', @get_args)
|
|
205
261
|
end
|
|
206
262
|
|
|
@@ -208,7 +264,11 @@ module Cisco
|
|
|
208
264
|
# In order to remove a bgp cluster_id you cannot simply issue
|
|
209
265
|
# 'no bgp cluster-id'. IMO this should be possible because you
|
|
210
266
|
# can only configure a single bgp cluster-id.
|
|
211
|
-
|
|
267
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
268
|
+
fail Cisco::UnsupportedError.new('bgp', 'cluster_id', 'set',
|
|
269
|
+
'cluster-id is not configurable ' \
|
|
270
|
+
'on a per-VRF basis on IOS XR')
|
|
271
|
+
end
|
|
212
272
|
# HACK: specify a dummy id when removing the property.
|
|
213
273
|
dummy_id = 1
|
|
214
274
|
if id == default_cluster_id
|
|
@@ -223,11 +283,13 @@ module Cisco
|
|
|
223
283
|
end
|
|
224
284
|
|
|
225
285
|
def default_cluster_id
|
|
286
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
226
287
|
config_get_default('bgp', 'cluster_id')
|
|
227
288
|
end
|
|
228
289
|
|
|
229
290
|
# Confederation Id (Getter/Setter/Default)
|
|
230
291
|
def confederation_id
|
|
292
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
231
293
|
config_get('bgp', 'confederation_id', @get_args)
|
|
232
294
|
end
|
|
233
295
|
|
|
@@ -235,7 +297,12 @@ module Cisco
|
|
|
235
297
|
# In order to remove a bgp confed id you cannot simply issue
|
|
236
298
|
# 'no bgp confederation id'. IMO this should be possible
|
|
237
299
|
# because you can only configure a single bgp confed id.
|
|
238
|
-
|
|
300
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
301
|
+
fail Cisco::UnsupportedError.new('bgp', 'confederation_id', 'set',
|
|
302
|
+
'confederation-id is not ' \
|
|
303
|
+
'configurable ' \
|
|
304
|
+
'on a per-VRF basis on IOS XR')
|
|
305
|
+
end
|
|
239
306
|
# HACK: specify a dummy id when removing the property.
|
|
240
307
|
dummy_id = 1
|
|
241
308
|
if id == default_confederation_id
|
|
@@ -250,6 +317,7 @@ module Cisco
|
|
|
250
317
|
end
|
|
251
318
|
|
|
252
319
|
def default_confederation_id
|
|
320
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
253
321
|
config_get_default('bgp', 'confederation_id')
|
|
254
322
|
end
|
|
255
323
|
|
|
@@ -324,6 +392,14 @@ module Cisco
|
|
|
324
392
|
end
|
|
325
393
|
|
|
326
394
|
def enforce_first_as=(enable)
|
|
395
|
+
# TODO: write a helper method for this repeated logic
|
|
396
|
+
# enforce_first_as is on by default (=>true)
|
|
397
|
+
# XR=>true = enable enforce_first_as = 'no bgp enforce-first-as disable'
|
|
398
|
+
# XR=>false = disable enforce_first_as = 'bgp enforce-first-as disable'
|
|
399
|
+
# Nexus nvgens the 'no' command.
|
|
400
|
+
# Nexus=>true = enable enforce_first_as = 'enforce-first-as'
|
|
401
|
+
# Nexus=>false = disable enforce_first_as = 'no enforce-first-as'
|
|
402
|
+
enable = !enable if platform == :ios_xr
|
|
327
403
|
@set_args[:state] = (enable ? '' : 'no')
|
|
328
404
|
config_set('bgp', 'enforce_first_as', @set_args)
|
|
329
405
|
set_args_keys_default
|
|
@@ -433,6 +509,14 @@ module Cisco
|
|
|
433
509
|
end
|
|
434
510
|
|
|
435
511
|
def fast_external_fallover=(enable)
|
|
512
|
+
# TODO: write a helper method for this repeated logic
|
|
513
|
+
# fast_external_fallover is on by default (=>true)
|
|
514
|
+
# XR=>true = 'no bgp fast-external-fallover disable'
|
|
515
|
+
# XR=>false = 'bgp fast-external-fallover disable'
|
|
516
|
+
# Nexus nvgens the 'no' command.
|
|
517
|
+
# Nexus=>true = 'fast-external-fallover'
|
|
518
|
+
# Nexus=>false = 'no fast-external-fallover'
|
|
519
|
+
enable = !enable if platform == :ios_xr
|
|
436
520
|
@set_args[:state] = (enable ? '' : 'no')
|
|
437
521
|
config_set('bgp', 'fast_external_fallover', @set_args)
|
|
438
522
|
set_args_keys_default
|
|
@@ -459,54 +543,92 @@ module Cisco
|
|
|
459
543
|
|
|
460
544
|
# Confederation Peers (Getter/Setter/Default)
|
|
461
545
|
def confederation_peers
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
546
|
+
# NX: confederation peers is retrieved as a string '1 2 3'
|
|
547
|
+
# XR: retrieved as an array.
|
|
548
|
+
# So make it an array in the NX case.
|
|
549
|
+
# Sort the end results to make it consistent across both platforms.
|
|
550
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
551
|
+
peers = config_get('bgp', 'confederation_peers', @get_args)
|
|
552
|
+
peers = peers.split(' ') if peers.is_a?(String)
|
|
553
|
+
peers.sort
|
|
554
|
+
end
|
|
555
|
+
|
|
556
|
+
def confederation_peers=(should)
|
|
557
|
+
# confederation peers are additive. So create a delta hash of entries
|
|
558
|
+
# and only apply the changes
|
|
559
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
560
|
+
fail Cisco::UnsupportedError.new('bgp', 'confederation_peers', 'set',
|
|
561
|
+
'confederation-peers is not ' \
|
|
562
|
+
'configurable ' \
|
|
563
|
+
'on a per-VRF basis on IOS XR')
|
|
472
564
|
end
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
565
|
+
should = should.flatten
|
|
566
|
+
is = confederation_peers
|
|
567
|
+
|
|
568
|
+
delta_hash = Utils.delta_add_remove(should, is)
|
|
569
|
+
return if delta_hash.values.flatten.empty?
|
|
570
|
+
[:add, :remove].each do |action|
|
|
571
|
+
Cisco::Logger.debug('confederation_peers delta ' \
|
|
572
|
+
"#{@get_args}\n #{action}: " \
|
|
573
|
+
"#{delta_hash[action]}")
|
|
574
|
+
delta_hash[action].each do |peer|
|
|
575
|
+
state = (action == :add) ? '' : 'no'
|
|
576
|
+
@set_args[:state] = state
|
|
577
|
+
@set_args[:peer] = peer
|
|
578
|
+
|
|
579
|
+
config_set('bgp', 'confederation_peers', @set_args)
|
|
580
|
+
end
|
|
477
581
|
end
|
|
478
|
-
set_args_keys_default
|
|
479
582
|
end
|
|
480
583
|
|
|
481
584
|
def default_confederation_peers
|
|
585
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
482
586
|
config_get_default('bgp', 'confederation_peers')
|
|
483
587
|
end
|
|
484
588
|
|
|
485
589
|
# Graceful Restart Getters
|
|
486
590
|
def graceful_restart
|
|
591
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
487
592
|
config_get('bgp', 'graceful_restart', @get_args)
|
|
488
593
|
end
|
|
489
594
|
|
|
490
595
|
def graceful_restart_timers_restart
|
|
596
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
491
597
|
config_get('bgp', 'graceful_restart_timers_restart', @get_args)
|
|
492
598
|
end
|
|
493
599
|
|
|
494
600
|
def graceful_restart_timers_stalepath_time
|
|
601
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
495
602
|
config_get('bgp', 'graceful_restart_timers_stalepath_time', @get_args)
|
|
496
603
|
end
|
|
497
604
|
|
|
498
605
|
def graceful_restart_helper
|
|
606
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
499
607
|
config_get('bgp', 'graceful_restart_helper', @get_args)
|
|
500
608
|
end
|
|
501
609
|
|
|
502
610
|
# Graceful Restart Setters
|
|
503
611
|
def graceful_restart=(enable)
|
|
612
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
613
|
+
fail Cisco::UnsupportedError.new('bgp', 'graceful_restart', 'set',
|
|
614
|
+
'graceful_restart is not ' \
|
|
615
|
+
'configurable ' \
|
|
616
|
+
'on a per-VRF basis on IOS XR')
|
|
617
|
+
end
|
|
504
618
|
@set_args[:state] = (enable ? '' : 'no')
|
|
505
619
|
config_set('bgp', 'graceful_restart', @set_args)
|
|
506
620
|
set_args_keys_default
|
|
507
621
|
end
|
|
508
622
|
|
|
509
623
|
def graceful_restart_timers_restart=(seconds)
|
|
624
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
625
|
+
fail Cisco::UnsupportedError.new('bgp',
|
|
626
|
+
'graceful_restart_timers_restart',
|
|
627
|
+
'set',
|
|
628
|
+
'graceful_restart_timers_restart is ' \
|
|
629
|
+
'not configurable ' \
|
|
630
|
+
'on a per-VRF basis on IOS XR')
|
|
631
|
+
end
|
|
510
632
|
if seconds == default_graceful_restart_timers_restart
|
|
511
633
|
@set_args[:state] = 'no'
|
|
512
634
|
@set_args[:seconds] = ''
|
|
@@ -519,6 +641,14 @@ module Cisco
|
|
|
519
641
|
end
|
|
520
642
|
|
|
521
643
|
def graceful_restart_timers_stalepath_time=(seconds)
|
|
644
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
645
|
+
fail Cisco::UnsupportedError.new('bgp',
|
|
646
|
+
'graceful_restart_timers_' \
|
|
647
|
+
'stalepath_time', 'set',
|
|
648
|
+
'graceful_restart_timers_' \
|
|
649
|
+
'stalepath_time is not configurable ' \
|
|
650
|
+
'on a per-VRF basis on IOS XR')
|
|
651
|
+
end
|
|
522
652
|
if seconds == default_graceful_restart_timers_stalepath_time
|
|
523
653
|
@set_args[:state] = 'no'
|
|
524
654
|
@set_args[:seconds] = ''
|
|
@@ -531,6 +661,13 @@ module Cisco
|
|
|
531
661
|
end
|
|
532
662
|
|
|
533
663
|
def graceful_restart_helper=(enable)
|
|
664
|
+
if platform == :ios_xr && @vrf != 'default'
|
|
665
|
+
fail Cisco::UnsupportedError.new('bgp',
|
|
666
|
+
'graceful_restart_helper', 'set',
|
|
667
|
+
'graceful_restart_helper ' \
|
|
668
|
+
'is not configurable ' \
|
|
669
|
+
'on a per-VRF basis on IOS XR')
|
|
670
|
+
end
|
|
534
671
|
@set_args[:state] = (enable ? '' : 'no')
|
|
535
672
|
config_set('bgp', 'graceful_restart_helper', @set_args)
|
|
536
673
|
set_args_keys_default
|
|
@@ -538,18 +675,22 @@ module Cisco
|
|
|
538
675
|
|
|
539
676
|
# Graceful Restart Defaults
|
|
540
677
|
def default_graceful_restart
|
|
678
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
541
679
|
config_get_default('bgp', 'graceful_restart')
|
|
542
680
|
end
|
|
543
681
|
|
|
544
682
|
def default_graceful_restart_timers_restart
|
|
683
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
545
684
|
config_get_default('bgp', 'graceful_restart_timers_restart')
|
|
546
685
|
end
|
|
547
686
|
|
|
548
687
|
def default_graceful_restart_timers_stalepath_time
|
|
688
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
549
689
|
config_get_default('bgp', 'graceful_restart_timers_stalepath_time')
|
|
550
690
|
end
|
|
551
691
|
|
|
552
692
|
def default_graceful_restart_helper
|
|
693
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
553
694
|
config_get_default('bgp', 'graceful_restart_helper')
|
|
554
695
|
end
|
|
555
696
|
|
|
@@ -595,6 +736,13 @@ module Cisco
|
|
|
595
736
|
end
|
|
596
737
|
|
|
597
738
|
def log_neighbor_changes=(enable)
|
|
739
|
+
# XR logging is on by default (=>true)
|
|
740
|
+
# XR=>true = enable logging = 'no bgp log neighbor changes disable'
|
|
741
|
+
# XR=>false = disable logging = 'bgp log neighbor changes disable'
|
|
742
|
+
# Nexus logging is off by default (=>false)
|
|
743
|
+
# Nexus=>true = enable logging = 'log-neighbor-changes'
|
|
744
|
+
# Nexus=>false = disable logging = 'no log-neighbor-changes'
|
|
745
|
+
enable = !enable if platform == :ios_xr
|
|
598
746
|
@set_args[:state] = (enable ? '' : 'no')
|
|
599
747
|
config_set('bgp', 'log_neighbor_changes', @set_args)
|
|
600
748
|
set_args_keys_default
|
|
@@ -643,14 +791,26 @@ module Cisco
|
|
|
643
791
|
# route_distinguisher
|
|
644
792
|
# Note that this property is supported by both bgp and vrf providers.
|
|
645
793
|
def route_distinguisher
|
|
794
|
+
return nil if @vrf.nil? || @vrf == 'default'
|
|
646
795
|
config_get('bgp', 'route_distinguisher', @get_args)
|
|
647
796
|
end
|
|
648
797
|
|
|
649
798
|
def route_distinguisher=(rd)
|
|
650
|
-
|
|
799
|
+
if @vrf.nil? || @vrf == 'default'
|
|
800
|
+
fail Cisco::UnsupportedError.new('bgp', 'route_distinguisher', 'set',
|
|
801
|
+
'route_distinguisher is not ' \
|
|
802
|
+
'configurable on a default VRF')
|
|
803
|
+
end
|
|
804
|
+
|
|
805
|
+
# N3k I2 images require 'nv overlay evpn' for rd and also require
|
|
806
|
+
# explicit values when removing the rd command. These restrictions are
|
|
807
|
+
# not not needed in I3 and newer images.
|
|
808
|
+
Feature.nv_overlay_evpn_enable if Utils.nexus_i2_image
|
|
809
|
+
|
|
651
810
|
if rd == default_route_distinguisher
|
|
811
|
+
return if route_distinguisher.empty?
|
|
652
812
|
@set_args[:state] = 'no'
|
|
653
|
-
@set_args[:rd] =
|
|
813
|
+
@set_args[:rd] = route_distinguisher
|
|
654
814
|
else
|
|
655
815
|
@set_args[:state] = ''
|
|
656
816
|
@set_args[:rd] = rd
|
|
@@ -660,6 +820,7 @@ module Cisco
|
|
|
660
820
|
end
|
|
661
821
|
|
|
662
822
|
def default_route_distinguisher
|
|
823
|
+
return nil if @vrf.nil? || @vrf == 'default'
|
|
663
824
|
config_get_default('bgp', 'route_distinguisher')
|
|
664
825
|
end
|
|
665
826
|
|
|
@@ -792,10 +953,12 @@ module Cisco
|
|
|
792
953
|
end
|
|
793
954
|
|
|
794
955
|
def default_timer_bestpath_limit
|
|
956
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
795
957
|
config_get_default('bgp', 'timer_bestpath_limit')
|
|
796
958
|
end
|
|
797
959
|
|
|
798
960
|
def default_timer_bestpath_limit_always
|
|
961
|
+
return nil if platform == :ios_xr && @vrf != 'default'
|
|
799
962
|
config_get_default('bgp', 'timer_bestpath_limit_always')
|
|
800
963
|
end
|
|
801
964
|
end
|