cisco_node_utils 1.1.0 → 1.2.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.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/CHANGELOG.md +126 -1
  4. data/README.md +19 -12
  5. data/Rakefile +1 -0
  6. data/bin/git/hooks/commit-msg/enforce_style +8 -0
  7. data/cisco_node_utils.gemspec +4 -3
  8. data/docs/README-develop-best-practices.md +127 -109
  9. data/docs/README-develop-node-utils-APIs.md +47 -39
  10. data/docs/template-router.rb +3 -7
  11. data/lib/.rubocop.yml +4 -4
  12. data/lib/cisco_node_utils.rb +1 -1
  13. data/lib/cisco_node_utils/aaa_authentication_login.rb +96 -0
  14. data/lib/cisco_node_utils/aaa_authentication_login_service.rb +133 -0
  15. data/lib/cisco_node_utils/aaa_authorization_service.rb +150 -0
  16. data/lib/cisco_node_utils/ace.rb +196 -0
  17. data/lib/cisco_node_utils/acl.rb +100 -0
  18. data/lib/cisco_node_utils/bgp.rb +301 -163
  19. data/lib/cisco_node_utils/bgp_af.rb +187 -19
  20. data/lib/cisco_node_utils/bgp_neighbor.rb +18 -33
  21. data/lib/cisco_node_utils/bgp_neighbor_af.rb +25 -48
  22. data/lib/cisco_node_utils/cisco_cmn_utils.rb +23 -4
  23. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +593 -0
  24. data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +22 -0
  25. data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +31 -0
  26. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +22 -0
  27. data/lib/cisco_node_utils/cmd_ref/acl.yaml +43 -0
  28. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +242 -0
  29. data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +164 -0
  30. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +131 -0
  31. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +179 -0
  32. data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +34 -0
  33. data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +42 -0
  34. data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +172 -0
  35. data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +35 -0
  36. data/lib/cisco_node_utils/cmd_ref/feature.yaml +42 -0
  37. data/lib/cisco_node_utils/cmd_ref/fex.yaml +9 -0
  38. data/lib/cisco_node_utils/cmd_ref/images.yaml +7 -0
  39. data/lib/cisco_node_utils/cmd_ref/interface.yaml +339 -0
  40. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +28 -0
  41. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +61 -0
  42. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +54 -0
  43. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +32 -0
  44. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
  45. data/lib/cisco_node_utils/cmd_ref/memory.yaml +13 -0
  46. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +7 -0
  47. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +14 -0
  48. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +74 -0
  49. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +33 -0
  50. data/lib/cisco_node_utils/cmd_ref/pim.yaml +40 -0
  51. data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +69 -0
  52. data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +25 -0
  53. data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +64 -0
  54. data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +14 -0
  55. data/lib/cisco_node_utils/cmd_ref/show_system.yaml +5 -0
  56. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +72 -0
  57. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +23 -0
  58. data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +7 -0
  59. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +50 -0
  60. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +51 -0
  61. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +55 -0
  62. data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +11 -0
  63. data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +18 -0
  64. data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +7 -0
  65. data/lib/cisco_node_utils/cmd_ref/system.yaml +6 -0
  66. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +49 -0
  67. data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +33 -0
  68. data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +35 -0
  69. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +38 -0
  70. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +6 -0
  71. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +56 -0
  72. data/lib/cisco_node_utils/cmd_ref/vni.yaml +76 -0
  73. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +197 -0
  74. data/lib/cisco_node_utils/cmd_ref/vrf.yaml +88 -0
  75. data/lib/cisco_node_utils/cmd_ref/vtp.yaml +38 -0
  76. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +60 -0
  77. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +39 -0
  78. data/lib/cisco_node_utils/cmd_ref/yum.yaml +13 -0
  79. data/lib/cisco_node_utils/command_reference.rb +359 -187
  80. data/lib/cisco_node_utils/configparser_lib.rb +1 -1
  81. data/lib/cisco_node_utils/dns_domain.rb +19 -5
  82. data/lib/cisco_node_utils/domain_name.rb +4 -8
  83. data/lib/cisco_node_utils/evpn_vni.rb +157 -0
  84. data/lib/cisco_node_utils/fabricpath_global.rb +388 -0
  85. data/lib/cisco_node_utils/fabricpath_topology.rb +150 -0
  86. data/lib/cisco_node_utils/feature.rb +111 -0
  87. data/lib/cisco_node_utils/interface.rb +390 -97
  88. data/lib/cisco_node_utils/interface_channel_group.rb +124 -0
  89. data/lib/cisco_node_utils/interface_ospf.rb +11 -34
  90. data/lib/cisco_node_utils/interface_portchannel.rb +157 -0
  91. data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
  92. data/lib/cisco_node_utils/name_server.rb +1 -1
  93. data/lib/cisco_node_utils/node.rb +55 -249
  94. data/lib/cisco_node_utils/node_util.rb +5 -1
  95. data/lib/cisco_node_utils/ntp_config.rb +2 -2
  96. data/lib/cisco_node_utils/ntp_server.rb +14 -5
  97. data/lib/cisco_node_utils/overlay_global.rb +153 -0
  98. data/lib/cisco_node_utils/pim.rb +124 -0
  99. data/lib/cisco_node_utils/pim_group_list.rb +108 -0
  100. data/lib/cisco_node_utils/pim_rp_address.rb +102 -0
  101. data/lib/cisco_node_utils/platform.rb +8 -9
  102. data/lib/cisco_node_utils/portchannel_global.rb +277 -0
  103. data/lib/cisco_node_utils/radius_global.rb +9 -19
  104. data/lib/cisco_node_utils/radius_server.rb +31 -41
  105. data/lib/cisco_node_utils/radius_server_group.rb +117 -0
  106. data/lib/cisco_node_utils/router_ospf.rb +1 -1
  107. data/lib/cisco_node_utils/router_ospf_vrf.rb +14 -19
  108. data/lib/cisco_node_utils/snmp_notification_receiver.rb +158 -0
  109. data/lib/cisco_node_utils/snmpcommunity.rb +3 -5
  110. data/lib/cisco_node_utils/snmpgroup.rb +1 -1
  111. data/lib/cisco_node_utils/snmpnotification.rb +57 -0
  112. data/lib/cisco_node_utils/snmpserver.rb +8 -17
  113. data/lib/cisco_node_utils/snmpuser.rb +67 -28
  114. data/lib/cisco_node_utils/syslog_server.rb +3 -9
  115. data/lib/cisco_node_utils/syslog_settings.rb +2 -10
  116. data/lib/cisco_node_utils/tacacs_server.rb +9 -14
  117. data/lib/cisco_node_utils/tacacs_server_group.rb +145 -0
  118. data/lib/cisco_node_utils/tacacs_server_host.rb +5 -9
  119. data/lib/cisco_node_utils/vdc.rb +88 -0
  120. data/lib/cisco_node_utils/version.rb +5 -2
  121. data/lib/cisco_node_utils/vlan.rb +71 -8
  122. data/lib/cisco_node_utils/vni.rb +227 -0
  123. data/lib/cisco_node_utils/vpc.rb +377 -0
  124. data/lib/cisco_node_utils/vrf.rb +60 -9
  125. data/lib/cisco_node_utils/vrf_af.rb +191 -0
  126. data/lib/cisco_node_utils/vtp.rb +8 -6
  127. data/lib/cisco_node_utils/vxlan_vtep.rb +151 -0
  128. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +234 -0
  129. data/lib/cisco_node_utils/yum.rb +1 -1
  130. data/tests/.rubocop.yml +1 -1
  131. data/tests/basetest.rb +16 -7
  132. data/tests/ciscotest.rb +55 -13
  133. data/tests/cmd_config.yaml +2 -2
  134. data/tests/platform_info.rb +3 -2
  135. data/tests/test_aaa_authentication_login.rb +219 -0
  136. data/tests/test_aaa_authentication_login_service.rb +759 -0
  137. data/tests/test_aaa_authorization_service.rb +1041 -0
  138. data/tests/test_ace.rb +160 -0
  139. data/tests/test_acl.rb +176 -0
  140. data/tests/test_bgp_af.rb +269 -13
  141. data/tests/test_bgp_neighbor.rb +38 -40
  142. data/tests/test_bgp_neighbor_af.rb +92 -32
  143. data/tests/test_command_config.rb +5 -5
  144. data/tests/test_command_reference.rb +284 -101
  145. data/tests/test_dns_domain.rb +1 -1
  146. data/tests/test_domain_name.rb +1 -1
  147. data/tests/test_evpn_vni.rb +106 -0
  148. data/tests/test_fabricpath_global.rb +243 -0
  149. data/tests/test_fabricpath_topology.rb +98 -0
  150. data/tests/test_interface.rb +292 -74
  151. data/tests/test_interface_channel_group.rb +74 -0
  152. data/tests/test_interface_ospf.rb +9 -4
  153. data/tests/test_interface_portchannel.rb +105 -0
  154. data/tests/test_interface_service_vni.rb +232 -0
  155. data/tests/test_interface_svi.rb +77 -62
  156. data/tests/test_interface_switchport.rb +17 -5
  157. data/tests/test_name_server.rb +1 -1
  158. data/tests/test_node.rb +1 -1
  159. data/tests/test_node_ext.rb +10 -20
  160. data/tests/test_ntp_config.rb +1 -1
  161. data/tests/test_ntp_server.rb +18 -6
  162. data/tests/test_overlay_global.rb +102 -0
  163. data/tests/test_pim.rb +177 -0
  164. data/tests/test_pim_group_list.rb +181 -0
  165. data/tests/test_pim_rp_address.rb +153 -0
  166. data/tests/test_platform.rb +3 -3
  167. data/tests/test_portchannel_global.rb +202 -0
  168. data/tests/test_radius_global.rb +1 -1
  169. data/tests/test_radius_server.rb +92 -57
  170. data/tests/test_radius_server_group.rb +149 -0
  171. data/tests/test_router_bgp.rb +283 -112
  172. data/tests/test_router_ospf.rb +2 -2
  173. data/tests/test_router_ospf_vrf.rb +4 -4
  174. data/tests/test_snmp_notification_receiver.rb +167 -0
  175. data/tests/test_snmpcommunity.rb +1 -1
  176. data/tests/test_snmpgroup.rb +1 -1
  177. data/tests/test_snmpnotification.rb +72 -0
  178. data/tests/test_snmpserver.rb +29 -105
  179. data/tests/test_snmpuser.rb +32 -30
  180. data/tests/test_syslog_server.rb +36 -10
  181. data/tests/test_syslog_settings.rb +1 -1
  182. data/tests/test_tacacs_server.rb +1 -1
  183. data/tests/test_tacacs_server_group.rb +405 -0
  184. data/tests/test_tacacs_server_host.rb +1 -1
  185. data/tests/test_vdc.rb +78 -0
  186. data/tests/test_vlan.rb +74 -19
  187. data/tests/test_vlan_mt_full.rb +95 -0
  188. data/tests/test_vni.rb +106 -0
  189. data/tests/test_vpc.rb +361 -0
  190. data/tests/test_vrf.rb +172 -29
  191. data/tests/test_vtp.rb +1 -1
  192. data/tests/test_vxlan_vtep.rb +214 -0
  193. data/tests/test_vxlan_vtep_vni.rb +201 -0
  194. data/tests/test_yum.rb +1 -1
  195. metadata +120 -11
  196. data/lib/cisco_node_utils/README_YAML.md +0 -325
  197. data/lib/cisco_node_utils/command_reference_common.yaml +0 -1051
  198. data/lib/cisco_node_utils/command_reference_common_bgp.yaml +0 -535
  199. data/lib/cisco_node_utils/command_reference_n3064.yaml +0 -13
  200. data/lib/cisco_node_utils/command_reference_n7k.yaml +0 -52
  201. data/lib/cisco_node_utils/command_reference_n9k.yaml +0 -26
  202. data/tests/platform_info.yaml +0 -10
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # August 2015, Richard Wellum
3
3
  #
4
- # Copyright (c) 2015 Cisco and/or its affiliates.
4
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
17
17
 
18
18
  require_relative 'cisco_cmn_utils'
19
19
  require_relative 'node_util'
20
+ require_relative 'feature'
20
21
  require_relative 'bgp'
21
22
 
22
23
  module Cisco
@@ -27,7 +28,7 @@ module Cisco
27
28
  err_msg = '"af" argument must be an array of two string values ' \
28
29
  'containing an afi + safi tuple'
29
30
  fail ArgumentError, err_msg unless af.is_a?(Array) || af.length == 2
30
- @asn = RouterBgp.process_asnum(asn)
31
+ @asn = RouterBgp.validate_asnum(asn)
31
32
  @vrf = vrf
32
33
  @afi, @safi = af
33
34
  set_args_keys_default
@@ -40,7 +41,7 @@ module Cisco
40
41
  af_hash[asn] = {}
41
42
  vrfs.keys.each do |vrf_name|
42
43
  get_args = { asnum: asn }
43
- get_args[:vrf] = vrf_name unless (vrf_name == 'default')
44
+ get_args[:vrf] = vrf_name unless vrf_name == 'default'
44
45
  # Call yaml and search for address-family statements
45
46
  af_list = config_get('bgp_af', 'all_afs', get_args)
46
47
 
@@ -57,6 +58,7 @@ module Cisco
57
58
  end
58
59
 
59
60
  def create
61
+ Feature.bgp_enable
60
62
  set_args_keys(state: '')
61
63
  config_set('bgp', 'address_family', @set_args)
62
64
  end
@@ -124,9 +126,7 @@ module Cisco
124
126
  # Next Hop route map (Getter/Setter/Default)
125
127
  #
126
128
  def next_hop_route_map
127
- route_map = config_get('bgp_af', 'next_hop_route_map', @get_args)
128
- return '' if route_map.nil?
129
- route_map.shift.strip
129
+ config_get('bgp_af', 'next_hop_route_map', @get_args)
130
130
  end
131
131
 
132
132
  def next_hop_route_map=(route_map)
@@ -202,9 +202,7 @@ module Cisco
202
202
 
203
203
  # additional_paths_selection
204
204
  def additional_paths_selection
205
- route_map = config_get('bgp_af', 'additional_paths_selection', @get_args)
206
- return '' if route_map.nil?
207
- route_map.shift.strip
205
+ config_get('bgp_af', 'additional_paths_selection', @get_args)
208
206
  end
209
207
 
210
208
  def additional_paths_selection=(route_map)
@@ -226,14 +224,33 @@ module Cisco
226
224
  config_get_default('bgp_af', 'additional_paths_selection')
227
225
  end
228
226
 
227
+ # advertise_l2vpn_evpn
228
+ def advertise_l2vpn_evpn
229
+ config_get('bgp_af', 'advertise_l2vpn_evpn', @get_args)
230
+ end
231
+
232
+ def advertise_l2vpn_evpn=(state)
233
+ Feature.nv_overlay_evpn_enable
234
+ set_args_keys(state: (state ? '' : 'no'))
235
+ config_set('bgp_af', 'advertise_l2vpn_evpn', @set_args)
236
+ end
237
+
238
+ def default_advertise_l2vpn_evpn
239
+ config_get_default('bgp_af', 'advertise_l2vpn_evpn')
240
+ end
241
+
229
242
  #
230
243
  # dampen_igp_metric (Getter/Setter/Default)
231
244
  #
232
245
 
233
246
  # dampen_igp_metric
234
247
  def dampen_igp_metric
235
- result = config_get('bgp_af', 'dampen_igp_metric', @get_args)
236
- result ? result.first.to_i : nil
248
+ match = config_get('bgp_af', 'dampen_igp_metric', @get_args)
249
+ if match.is_a?(Array)
250
+ return nil if match[0] == 'no '
251
+ return match[1].to_i if match[1]
252
+ end
253
+ default_dampen_igp_metric
237
254
  end
238
255
 
239
256
  def dampen_igp_metric=(val)
@@ -422,14 +439,112 @@ module Cisco
422
439
  config_get_default('bgp_af', 'dampening_suppress_time')
423
440
  end
424
441
 
442
+ #
443
+ # Distance (Getter/Setter/Default)
444
+ #
445
+ def distance_set(ebgp, ibgp, local)
446
+ set_args_keys(state: '', ebgp: ebgp, ibgp: ibgp, local: local)
447
+ config_set('bgp_af', 'distance', @set_args)
448
+ end
449
+
450
+ def distance_ebgp
451
+ ebgp, _ibgp, _local = distance
452
+ return default_distance_ebgp if ebgp.nil?
453
+ ebgp.to_i
454
+ end
455
+
456
+ def distance_ibgp
457
+ _ebgp, ibgp, _local = distance
458
+ return default_distance_ibgp if ibgp.nil?
459
+ ibgp.to_i
460
+ end
461
+
462
+ def distance_local
463
+ _ebgp, _ibgp, local = distance
464
+ return default_distance_local if local.nil?
465
+ local.to_i
466
+ end
467
+
468
+ def distance
469
+ match = config_get('bgp_af', 'distance', @get_args)
470
+ match.nil? ? default_distance : match
471
+ end
472
+
473
+ def default_distance_ebgp
474
+ config_get_default('bgp_af', 'distance_ebgp')
475
+ end
476
+
477
+ def default_distance_ibgp
478
+ config_get_default('bgp_af', 'distance_ibgp')
479
+ end
480
+
481
+ def default_distance_local
482
+ config_get_default('bgp_af', 'distance_local')
483
+ end
484
+
485
+ def default_distance
486
+ ["#{default_distance_ebgp}", "#{default_distance_ibgp}",
487
+ "#{default_distance_local}"]
488
+ end
489
+
490
+ #
491
+ # default_metric (Getter/Setter/Default)
492
+ #
493
+
494
+ # default_metric
495
+ def default_metric
496
+ config_get('bgp_af', 'default_metric', @get_args)
497
+ end
498
+
499
+ def default_metric=(val)
500
+ # To remove the default_metric you can not use 'no default_metric'
501
+ # dummy metric to work around this
502
+ dummy_metric = 1
503
+ set_args_keys(state: (val == default_default_metric) ? 'no' : '',
504
+ num: (val == default_default_metric) ? dummy_metric : val)
505
+ config_set('bgp_af', 'default_metric', @set_args)
506
+ end
507
+
508
+ def default_default_metric
509
+ config_get_default('bgp_af', 'default_metric')
510
+ end
511
+
512
+ #
513
+ # inject_map (Getter/Setter/Default)
514
+ #
515
+
516
+ def inject_map
517
+ cmds = config_get('bgp_af', 'inject_map', @get_args).each(&:compact!)
518
+ cmds.sort
519
+ end
520
+
521
+ def inject_map=(should_list)
522
+ delta_hash = Utils.delta_add_remove(should_list, inject_map)
523
+ return if delta_hash.values.flatten.empty?
524
+ [:add, :remove].each do |action|
525
+ CiscoLogger.debug("inject_map delta #{@get_args}\n #{action}: " \
526
+ "#{delta_hash[action]}")
527
+ delta_hash[action].each do |inject, exist, copy|
528
+ # inject & exist are mandatory, copy is optional
529
+ state = (action == :add) ? '' : 'no'
530
+ copy = 'copy-attributes' unless copy.nil?
531
+ set_args_keys(state: state, inject: inject, exist: exist, copy: copy)
532
+ config_set('bgp_af', 'inject_map', @set_args)
533
+ end
534
+ end
535
+ end
536
+
537
+ def default_inject_map
538
+ config_get_default('bgp_af', 'inject_map')
539
+ end
540
+
425
541
  #
426
542
  # maximum_paths (Getter/Setter/Default)
427
543
  #
428
544
 
429
545
  # maximum_paths
430
546
  def maximum_paths
431
- result = config_get('bgp_af', 'maximum_paths', @get_args)
432
- result.nil? ? default_maximum_paths : result.first.to_i
547
+ config_get('bgp_af', 'maximum_paths', @get_args)
433
548
  end
434
549
 
435
550
  def maximum_paths=(val)
@@ -448,8 +563,7 @@ module Cisco
448
563
 
449
564
  # maximum_paths_ibgp
450
565
  def maximum_paths_ibgp
451
- result = config_get('bgp_af', 'maximum_paths_ibgp', @get_args)
452
- result.nil? ? default_maximum_paths_ibgp : result.first.to_i
566
+ config_get('bgp_af', 'maximum_paths_ibgp', @get_args)
453
567
  end
454
568
 
455
569
  def maximum_paths_ibgp=(val)
@@ -468,8 +582,7 @@ module Cisco
468
582
 
469
583
  # Build an array of all network commands currently on the device
470
584
  def networks
471
- cmds = config_get('bgp_af', 'network', @get_args)
472
- cmds.nil? ? default_networks : cmds.each(&:compact!)
585
+ config_get('bgp_af', 'network', @get_args).each(&:compact!)
473
586
  end
474
587
 
475
588
  # networks setter.
@@ -500,8 +613,7 @@ module Cisco
500
613
 
501
614
  # Build an array of all redistribute commands currently on the device
502
615
  def redistribute
503
- cmds = config_get('bgp_af', 'redistribute', @get_args)
504
- cmds.nil? ? default_redistribute : cmds.each(&:compact!)
616
+ config_get('bgp_af', 'redistribute', @get_args).each(&:compact!)
505
617
  end
506
618
 
507
619
  # redistribute setter.
@@ -526,5 +638,61 @@ module Cisco
526
638
  def default_redistribute
527
639
  config_get_default('bgp_af', 'redistribute')
528
640
  end
641
+
642
+ #
643
+ # Suppress Inactive (Getter/Setter/Default)
644
+ #
645
+ def suppress_inactive
646
+ config_get('bgp_af', 'suppress_inactive', @get_args)
647
+ end
648
+
649
+ def suppress_inactive=(state)
650
+ set_args_keys(state: state ? '' : 'no')
651
+ config_set('bgp_af', 'suppress_inactive', @set_args)
652
+ end
653
+
654
+ def default_suppress_inactive
655
+ config_get_default('bgp_af', 'suppress_inactive')
656
+ end
657
+
658
+ #
659
+ # Table Map (Getter/Setter/Default)
660
+ #
661
+
662
+ def table_map
663
+ config_get('bgp_af', 'table_map', @get_args)
664
+ end
665
+
666
+ def table_map_filter
667
+ config_get('bgp_af', 'table_map_filter', @get_args)
668
+ end
669
+
670
+ def table_map_set(map, filter=false)
671
+ # To remove table map we can not use 'no table-map'
672
+ # Dummy-map specified to work around this
673
+ if filter
674
+ attr = 'table_map_filter'
675
+ else
676
+ attr = 'table_map'
677
+ end
678
+ dummy_map = 'dummy'
679
+ if map == default_table_map
680
+ @set_args[:state] = 'no'
681
+ @set_args[:map] = dummy_map
682
+ else
683
+ @set_args[:state] = ''
684
+ @set_args[:map] = map
685
+ end
686
+ config_set('bgp_af', attr, @set_args)
687
+ set_args_keys_default
688
+ end
689
+
690
+ def default_table_map
691
+ config_get_default('bgp_af', 'table_map')
692
+ end
693
+
694
+ def default_table_map_filter
695
+ config_get_default('bgp_af', 'table_map_filter')
696
+ end
529
697
  end
530
698
  end
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # August 2015, Jie Yang
4
4
  #
5
- # Copyright (c) 2015 Cisco and/or its affiliates.
5
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
8
8
  # you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
19
19
  require 'ipaddr'
20
20
  require_relative 'cisco_cmn_utils'
21
21
  require_relative 'node_util'
22
+ require_relative 'feature'
22
23
  require_relative 'bgp'
23
24
 
24
25
  module Cisco
@@ -32,7 +33,7 @@ module Cisco
32
33
  # we need to mask the address using prefix length, so that it becomes
33
34
  # something like "1.1.1.0/24" or "2000:123:38::/64"
34
35
  @nbr = Utils.process_network_mask(nbr)
35
- @asn = asn
36
+ @asn = RouterBgp.validate_asnum(asn)
36
37
  @vrf = vrf
37
38
  @get_args = @set_args = { asnum: @asn, nbr: @nbr }
38
39
  @get_args[:vrf] = @set_args[:vrf] = vrf if vrf != 'default'
@@ -66,6 +67,7 @@ module Cisco
66
67
  end
67
68
 
68
69
  def create
70
+ Feature.bgp_enable
69
71
  set_args_keys(state: '')
70
72
  config_set('bgp', 'create_destroy_neighbor', @set_args)
71
73
  end
@@ -95,9 +97,7 @@ module Cisco
95
97
  end
96
98
 
97
99
  def description
98
- desc = config_get('bgp_neighbor', 'description', @get_args)
99
- return '' if desc.nil?
100
- desc.shift.strip
100
+ config_get('bgp_neighbor', 'description', @get_args)
101
101
  end
102
102
 
103
103
  def default_description
@@ -158,7 +158,7 @@ module Cisco
158
158
 
159
159
  def ebgp_multihop
160
160
  result = config_get('bgp_neighbor', 'ebgp_multihop', @get_args)
161
- result.nil? ? default_ebgp_multihop : result.first.to_i
161
+ result.nil? ? default_ebgp_multihop : result.to_i
162
162
  end
163
163
 
164
164
  def default_ebgp_multihop
@@ -166,8 +166,7 @@ module Cisco
166
166
  end
167
167
 
168
168
  def local_as=(val)
169
- asnum = RouterBgp.process_asnum(val)
170
- if asnum == default_local_as
169
+ if val == default_local_as
171
170
  set_args_keys(state: 'no', local_as: '')
172
171
  else
173
172
  set_args_keys(state: '', local_as: val)
@@ -176,14 +175,11 @@ module Cisco
176
175
  end
177
176
 
178
177
  def local_as
179
- result = config_get('bgp_neighbor', 'local_as', @get_args)
180
- return default_local_as if result.nil?
181
- return result.first.to_i unless /\d+\.\d+$/.match(result.first)
182
- result.first
178
+ config_get('bgp_neighbor', 'local_as', @get_args).to_s
183
179
  end
184
180
 
185
181
  def default_local_as
186
- config_get_default('bgp_neighbor', 'local_as')
182
+ config_get_default('bgp_neighbor', 'local_as').to_s
187
183
  end
188
184
 
189
185
  def log_neighbor_changes=(val)
@@ -206,7 +202,7 @@ module Cisco
206
202
 
207
203
  def default_log_neighbor_changes
208
204
  result = config_get_default('bgp_neighbor', 'log_neighbor_changes')
209
- result.to_sym
205
+ result.to_sym unless result.nil?
210
206
  end
211
207
 
212
208
  def low_memory_exempt=(val)
@@ -230,8 +226,7 @@ module Cisco
230
226
  end
231
227
 
232
228
  def maximum_peers
233
- result = config_get('bgp_neighbor', 'maximum_peers', @get_args)
234
- result.nil? ? default_maximum_peers : result.first.to_i
229
+ config_get('bgp_neighbor', 'maximum_peers', @get_args)
235
230
  end
236
231
 
237
232
  def default_maximum_peers
@@ -255,8 +250,7 @@ module Cisco
255
250
  end
256
251
 
257
252
  def password
258
- result = config_get('bgp_neighbor', 'password', @get_args)
259
- result.nil? ? '' : result.first.to_s
253
+ config_get('bgp_neighbor', 'password', @get_args)
260
254
  end
261
255
 
262
256
  def default_password
@@ -265,11 +259,7 @@ module Cisco
265
259
 
266
260
  def password_type
267
261
  result = config_get('bgp_neighbor', 'password_type', @get_args)
268
- if result.nil?
269
- default_password_type
270
- else
271
- Encryption.cli_to_symbol(result.first.to_i)
272
- end
262
+ Encryption.cli_to_symbol(result.to_i)
273
263
  end
274
264
 
275
265
  def default_password_type
@@ -278,8 +268,7 @@ module Cisco
278
268
  end
279
269
 
280
270
  def remote_as=(val)
281
- asnum = RouterBgp.process_asnum(val)
282
- if asnum == default_remote_as
271
+ if val == default_remote_as
283
272
  set_args_keys(state: 'no', remote_as: '')
284
273
  else
285
274
  set_args_keys(state: '', remote_as: val)
@@ -288,14 +277,11 @@ module Cisco
288
277
  end
289
278
 
290
279
  def remote_as
291
- result = config_get('bgp_neighbor', 'remote_as', @get_args)
292
- return default_remote_as if result.nil?
293
- return result.first.to_i unless /\d+\.\d+$/.match(result.first)
294
- result.first
280
+ config_get('bgp_neighbor', 'remote_as', @get_args).to_s
295
281
  end
296
282
 
297
283
  def default_remote_as
298
- config_get_default('bgp_neighbor', 'remote_as')
284
+ config_get_default('bgp_neighbor', 'remote_as').to_s
299
285
  end
300
286
 
301
287
  def remove_private_as=(val)
@@ -362,7 +348,7 @@ module Cisco
362
348
 
363
349
  def timers_keepalive_hold
364
350
  match = config_get('bgp_neighbor', 'timers_keepalive_hold', @get_args)
365
- match.nil? ? default_timers_keepalive_hold : match.first
351
+ match.nil? ? default_timers_keepalive_hold : match
366
352
  end
367
353
 
368
354
  def timers_keepalive
@@ -414,8 +400,7 @@ module Cisco
414
400
 
415
401
  def update_source
416
402
  result = config_get('bgp_neighbor', 'update_source', @get_args)
417
- return default_update_source if result.nil? || result.first.nil?
418
- result.first.downcase.strip
403
+ result.downcase.strip
419
404
  end
420
405
 
421
406
  def default_update_source