cisco_node_utils 1.8.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +43 -1
  3. data/README.md +4 -4
  4. data/docs/README-maintainers.md +1 -0
  5. data/lib/cisco_node_utils/bgp_neighbor.rb +20 -0
  6. data/lib/cisco_node_utils/bgp_neighbor_af.rb +20 -0
  7. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +7 -0
  8. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +7 -0
  9. data/lib/cisco_node_utils/cmd_ref/evpn_multicast.yaml +12 -0
  10. data/lib/cisco_node_utils/cmd_ref/evpn_multisite.yaml +18 -0
  11. data/lib/cisco_node_utils/cmd_ref/evpn_stormcontrol.yaml +18 -0
  12. data/lib/cisco_node_utils/cmd_ref/feature.yaml +7 -0
  13. data/lib/cisco_node_utils/cmd_ref/interface_evpn_multisite.yaml +17 -0
  14. data/lib/cisco_node_utils/cmd_ref/ip_multicast.yaml +18 -0
  15. data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +21 -0
  16. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +6 -0
  17. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +7 -0
  18. data/lib/cisco_node_utils/evpn_multicast.rb +66 -0
  19. data/lib/cisco_node_utils/evpn_multisite.rb +96 -0
  20. data/lib/cisco_node_utils/evpn_stormcontrol.rb +84 -0
  21. data/lib/cisco_node_utils/feature.rb +19 -0
  22. data/lib/cisco_node_utils/interface.rb +2 -1
  23. data/lib/cisco_node_utils/interface_evpn_multisite.rb +63 -0
  24. data/lib/cisco_node_utils/ip_multicast.rb +86 -0
  25. data/lib/cisco_node_utils/version.rb +2 -2
  26. data/lib/cisco_node_utils/vrf_af.rb +56 -5
  27. data/lib/cisco_node_utils/vxlan_vtep.rb +24 -0
  28. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +21 -0
  29. data/tests/ciscotest.rb +36 -3
  30. data/tests/tacacs_server.yaml.example +1 -1
  31. data/tests/test_bgp_af.rb +1 -1
  32. data/tests/test_bgp_neighbor.rb +15 -0
  33. data/tests/test_bgp_neighbor_af.rb +27 -0
  34. data/tests/test_evpn_multicast.rb +65 -0
  35. data/tests/test_evpn_multisite.rb +70 -0
  36. data/tests/test_evpn_stormcontrol.rb +56 -0
  37. data/tests/test_feature.rb +6 -1
  38. data/tests/test_interface_evpn_multisite.rb +59 -0
  39. data/tests/test_ip_multicast.rb +69 -0
  40. data/tests/test_node_ext.rb +3 -2
  41. data/tests/test_radius_global.rb +7 -5
  42. data/tests/test_router_ospf_vrf.rb +2 -0
  43. data/tests/test_stp_global.rb +7 -0
  44. data/tests/test_tacacs_global.rb +10 -7
  45. data/tests/test_vrf_af.rb +52 -1
  46. data/tests/test_vxlan_vtep.rb +23 -0
  47. data/tests/test_vxlan_vtep_vni.rb +31 -0
  48. data/tests/yum_package.yaml +10 -0
  49. metadata +18 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 860be08b4fe2ad44a4d30cdb948b67eb57c1c169
4
- data.tar.gz: a3ba4f0c7e0a365cb084ce05ad9d904d8c2f32d9
3
+ metadata.gz: f41913654bc402d2a30d3c2345e0ac1fbd587ffe
4
+ data.tar.gz: a20bebaeb60c419708f83b078c8f5e61464788ec
5
5
  SHA512:
6
- metadata.gz: f83cde3f3b6b2d45059cf3f164d908b4a35b08897589e7a171b31d072907e9b34b0667be9888bacc625ff533b2c4abb0b77c294c6b9802aa53ef6505e71933c5
7
- data.tar.gz: 104ad9a0af48d17a0bef176f49d8e1c16d86d0f6e902fb98885a9678f8fc917889a6de18f5519a1b3cc834b5872323250ed30bafd57d5e588fef6e663347c653
6
+ metadata.gz: daed7260c5c3b320216186f6c10ed0468bf78a6c5038b8bd6a0d5521e61dc606088ba505feda784318e6cf9800b7dfb8414824db66e8950193df8a877f76db22
7
+ data.tar.gz: fbab02d4e41a802249bc5b30b1b87392392f5f4cba319c554e825d8bed79ae3bf26a5186d640219b7d0e2da5472b50a2c18f850f31e232e15ee3c15db04f39bb
data/CHANGELOG.md CHANGED
@@ -1,9 +1,50 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ ## [v1.9.0]
5
+
6
+ ### New Cisco Resources
7
+ * EVPN Multisite
8
+ * evpn_multisite (@rahushen)
9
+ * evpn_stormcontrol (@rahushen)
10
+ * interface_evpn_multisite (@rahushen)
11
+
12
+ * TRM
13
+ * evpn_multicast (@rahushen)
14
+ * ip_multicast (@rahushen)
15
+
16
+ ### Added
17
+ * Extend vxlan_vtep with attributes:
18
+ * `multisite_border_gateway_interface`
19
+
20
+ * Extend vxlan_vtep_vni with attributes:
21
+ * `multisite_ingress_replication`
22
+
23
+ * Extend bgp_neighbor with attributes:
24
+ * `peer_type`
25
+
26
+ * Extend bgp_neighbor_af with attributes:
27
+ * `rewrite_evpn_rt_asn`
28
+
29
+ * Extend vrf_af with attributes:
30
+ * `route_target_both_auto_mvpn`
31
+ * `route_target_export_mvpn`
32
+ * `route_target_import_mvpn`
33
+
34
+ * Extend feature with attributes:
35
+ * `ngmvpn_enable`
36
+ * `ngmvpn_disable`
37
+ * `ngmvpn_enabled?`
38
+
39
+ ### Changed
40
+
41
+ ### Removed
42
+
43
+ ### Issues Addressed
44
+
4
45
  ## [v1.8.0]
5
46
 
6
- #### Cisco Resources
47
+ ### New Cisco Resources
7
48
  * ObjectGroup
8
49
  * object_group (@saichint)
9
50
  * object_group_entry (@saichint)
@@ -513,6 +554,7 @@ Changelog
513
554
  [git-flow]: https://github.com/petervanderdoes/gitflow-avh
514
555
  [SimpleCov]: https://github.com/colszowka/simplecov
515
556
 
557
+ [v1.9.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.8.0...v1.9.0
516
558
  [v1.8.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.7.0...v1.8.0
517
559
  [v1.7.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.6.0...v1.7.0
518
560
  [v1.6.0]: https://github.com/cisco/cisco-network-node-utils/compare/v1.5.0...v1.6.0
data/README.md CHANGED
@@ -42,8 +42,8 @@ This CiscoNodeUtils gem release supports the following:
42
42
 
43
43
  Platform | OS | OS Version |
44
44
  ------------------|--------|----------------------|
45
- Cisco Nexus N9k | NX-OS | 7.0(3)I2(1) and later
46
- Cisco Nexus N3k | NX-OS | 7.0(3)I2(1) and later
45
+ Cisco Nexus N9k | NX-OS | 7.0(3)I2(5) and later
46
+ Cisco Nexus N3k | NX-OS | 7.0(3)I2(5) and later
47
47
  Cisco Nexus N3K-F | NX-OS | 7.0(3)F3(2) and later
48
48
  Cisco Nexus N5k | NX-OS | 7.3(0)N1(1) and later
49
49
  Cisco Nexus N6k | NX-OS | 7.3(0)N1(1) and later
@@ -91,7 +91,7 @@ An example configuration file (illustrating each of the above scenarios) is prov
91
91
 
92
92
  The `Client` class provides a low-level interface for communicating with the Cisco network node. It provides the base APIs `create`, `get`, and `set`.
93
93
 
94
- * `Cisco::Client::NXAPI` - client for communicating with NX-OS 7.0(3)I2(1) and later, using NX-API.
94
+ * `Cisco::Client::NXAPI` - client for communicating with NX-OS 7.0(3)I2(5) and later, using NX-API.
95
95
 
96
96
  For a greater level of abstraction, the `Node` class is generally used, but the `Client` classes can be invoked directly if desired.
97
97
 
@@ -217,7 +217,7 @@ See [CHANGELOG](CHANGELOG.md) for a list of changes.
217
217
  ## <a name="license_info">License Information</a>
218
218
 
219
219
 
220
- Copyright (c) 2013-2017 Cisco and/or its affiliates.
220
+ Copyright (c) 2013-2018 Cisco and/or its affiliates.
221
221
 
222
222
  Licensed under the Apache License, Version 2.0 (the "License");
223
223
  you may not use this file except in compliance with the License.
@@ -25,6 +25,7 @@ When we are considering publishing a new release, all of the following steps mus
25
25
  1. Run full minitest regression on [supported platforms.](https://github.com/cisco/cisco-network-node-utils#overview)
26
26
  * Fix All Bugs.
27
27
  * Make sure proper test case skips are in place for unsupported platforms.
28
+ * Make sure [yum_package.yaml](../tests/yum_package.yaml) is updated with all versions that need to be tested.
28
29
 
29
30
  1. Build gem and test it in combination with the latest released Puppet module (using Beaker and demo manifests) to make sure no backward compatibility issues have been introduced.
30
31
 
@@ -503,5 +503,25 @@ module Cisco
503
503
  fail KeyError
504
504
  end
505
505
  end
506
+
507
+ def default_peer_type
508
+ config_get_default('bgp_neighbor', 'peer_type')
509
+ end
510
+
511
+ def peer_type=(val)
512
+ if val == default_peer_type
513
+ @set_args[:state] = 'no'
514
+ @set_args[:peer_type] = ''
515
+ else
516
+ Feature.nv_overlay_evpn_enable
517
+ @set_args[:peer_type] = val
518
+ @set_args[:state] = ''
519
+ end
520
+ config_set('bgp_neighbor', 'peer_type', @set_args)
521
+ end
522
+
523
+ def peer_type
524
+ config_get('bgp_neighbor', 'peer_type', @get_args)
525
+ end
506
526
  end # class
507
527
  end # module
@@ -756,5 +756,25 @@ module Cisco
756
756
  def default_weight
757
757
  config_get_default('bgp_neighbor_af', 'weight')
758
758
  end
759
+
760
+ def rewrite_evpn_rt_asn
761
+ config_get('bgp_neighbor_af', 'rewrite_evpn_rt_asn', @get_args)
762
+ end
763
+
764
+ def rewrite_evpn_rt_asn=(state)
765
+ Feature.nv_overlay_evpn_enable if state
766
+ set_args_keys(state: (state ? '' : 'no'))
767
+ if @set_args[:state] == 'no'
768
+ unless rewrite_evpn_rt_asn == default_rewrite_evpn_rt_asn
769
+ config_set('bgp_neighbor_af', 'rewrite_evpn_rt_asn', @set_args)
770
+ end
771
+ else
772
+ config_set('bgp_neighbor_af', 'rewrite_evpn_rt_asn', @set_args)
773
+ end
774
+ end
775
+
776
+ def default_rewrite_evpn_rt_asn
777
+ config_get_default('bgp_neighbor_af', 'rewrite_evpn_rt_asn')
778
+ end
759
779
  end
760
780
  end
@@ -114,6 +114,13 @@ password_type:
114
114
  get_value: '/^password (\d+)/'
115
115
  default_value: 0
116
116
 
117
+ peer_type:
118
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
119
+ kind: string
120
+ get_value: '/^peer-type (\S+)$/'
121
+ set_value: '<state> peer-type <peer_type>'
122
+ default_value: ""
123
+
117
124
  remote_as:
118
125
  get_value: '/^remote-as (\d*?.?\d+?)$/'
119
126
  set_value: '<state> remote-as <remote_as>'
@@ -146,6 +146,13 @@ prefix_list_out:
146
146
  set_value: '<state> prefix-list <str> out'
147
147
  default_value: ''
148
148
 
149
+ rewrite_evpn_rt_asn:
150
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
151
+ kind: boolean
152
+ get_value: '/^rewrite-evpn-rt-asn$/'
153
+ set_value: '<state> rewrite-evpn-rt-asn'
154
+ default_value: false
155
+
149
156
  route_map_in:
150
157
  kind: string
151
158
  default_value: ''
@@ -0,0 +1,12 @@
1
+ # evpn_multicast.yaml
2
+ ---
3
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
4
+
5
+ _template:
6
+ get_command: "show running-config | section advertise"
7
+
8
+ multicast:
9
+ context: ~
10
+ get_value: '^advertise evpn multicast$'
11
+ set_value: "<state> advertise evpn multicast"
12
+ default_value: ''
@@ -0,0 +1,18 @@
1
+ # evpn_multisite.yaml
2
+ ---
3
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
4
+
5
+ _template:
6
+ get_command: "show running-config | section multisite"
7
+
8
+ delay_restore:
9
+ default_value: ""
10
+ get_context: ['/^evpn multisite border-gateway <multisiteid>$/']
11
+ get_value: '/^delay-restore\s+time\s+(\d+)$/'
12
+ set_context: ['evpn multisite border-gateway <multisiteid>']
13
+ set_value: "<state> delay-restore time <time>"
14
+
15
+ multisite:
16
+ context: ~
17
+ get_value: 'evpn multisite border-gateway ([\d.]+)'
18
+ set_value: "<state> evpn multisite border-gateway <multisiteid>"
@@ -0,0 +1,18 @@
1
+ # evpn_stormcontrol.yaml
2
+ ---
3
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
4
+
5
+ _template:
6
+ get_command: "show running-config | section storm-control"
7
+
8
+ broadcast:
9
+ get_value: 'evpn storm-control broadcast level ([\d.]+)'
10
+ set_value: "<state> evpn storm-control broadcast level <level>"
11
+
12
+ multicast:
13
+ get_value: 'evpn storm-control multicast level ([\d.]+)'
14
+ set_value: "<state> evpn storm-control multicast level <level>"
15
+
16
+ unicast:
17
+ get_value: 'evpn storm-control unicast level ([\d.]+)'
18
+ set_value: "<state> evpn storm-control unicast level <level>"
@@ -52,6 +52,13 @@ lacp:
52
52
  get_value: '/^feature lacp$/'
53
53
  set_value: "feature lacp"
54
54
 
55
+ ngmvpn:
56
+ _exclude: [N3k, N3k-F, N5k, N6k, N7k, N9k-F]
57
+ os_version: 'N9k:7.0.3.I7.1'
58
+ kind: boolean
59
+ get_value: '/^feature ngmvpn$/'
60
+ set_value: "<state> feature ngmvpn"
61
+
55
62
  nv_overlay:
56
63
  # N3k - native vxlan support in a future release
57
64
  _exclude: [N3k]
@@ -0,0 +1,17 @@
1
+ # interface_evpn_multisite
2
+ ---
3
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
4
+
5
+ _template:
6
+ get_command: "show running interface all"
7
+ context:
8
+ - "interface <interface>"
9
+
10
+ all_interfaces:
11
+ multiple:
12
+ get_context: ~
13
+ get_value: '/^interface (.*)/'
14
+
15
+ evpn_multisite:
16
+ get_value: '/^evpn multisite (\S+)$/'
17
+ set_value: "<state> evpn multisite <tracking>"
@@ -0,0 +1,18 @@
1
+ # ip_multicast.yaml
2
+ ---
3
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
4
+
5
+ _template:
6
+ get_command: "show running-config | section 'ip multicast'"
7
+
8
+ overlay_distributed_dr:
9
+ context: ~
10
+ get_value: '^ip multicast overlay-distributed-dr$'
11
+ set_value: "<state> ip multicast overlay-distributed-dr"
12
+ default_value: false
13
+
14
+ overlay_spt_only:
15
+ context: ~
16
+ get_value: '^ip multicast overlay-spt-only$'
17
+ set_value: "<state> ip multicast overlay-spt-only"
18
+ default_value: false
@@ -52,6 +52,13 @@ route_target_both_auto_evpn:
52
52
  set_value: '<state> route-target both auto evpn'
53
53
  default_value: false
54
54
 
55
+ route_target_both_auto_mvpn:
56
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
57
+ kind: boolean
58
+ get_value: '/^route-target both auto mvpn$/'
59
+ set_value: '<state> route-target both auto mvpn'
60
+ default_value: false
61
+
55
62
  route_target_export:
56
63
  multiple: true
57
64
  default_value: []
@@ -73,6 +80,13 @@ route_target_export_evpn:
73
80
  set_value: '<state> route-target export <community> evpn'
74
81
  default_value: []
75
82
 
83
+ route_target_export_mvpn:
84
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
85
+ multiple: true
86
+ get_value: '/^route-target export (\S+) mvpn$/'
87
+ set_value: '<state> route-target export <community> mvpn'
88
+ default_value: []
89
+
76
90
  route_target_export_stitching:
77
91
  _exclude: [nexus]
78
92
  multiple: true
@@ -105,6 +119,13 @@ route_target_import_evpn:
105
119
  set_value: '<state> route-target import <community> evpn'
106
120
  default_value: []
107
121
 
122
+ route_target_import_mvpn:
123
+ _exclude: [ios_xr, N3k, N3k-F, N5k, N6k, N7k, N9k-F]
124
+ multiple: true
125
+ get_value: '/^route-target import (\S+) mvpn$/'
126
+ set_value: '<state> route-target import <community> mvpn'
127
+ default_value: []
128
+
108
129
  route_target_import_stitching:
109
130
  _exclude: [nexus]
110
131
  multiple: true
@@ -39,6 +39,12 @@ mt_lite_support:
39
39
  # this feature is always off on these platforms and cannot be changed
40
40
  default_only: false
41
41
 
42
+ multisite_bg_intf:
43
+ _exclude: [N3k-F, N5k, N6k, N7k, N9k-F]
44
+ get_value: '/^multisite border\-gateway interface (\S+)$/'
45
+ set_value: '<state> multisite border-gateway interface <lpbk_intf>'
46
+ default_value: ''
47
+
42
48
  shutdown:
43
49
  kind: boolean
44
50
  get_value: '/^no shutdown$/'
@@ -27,6 +27,13 @@ multicast_group:
27
27
  set_value: '<state> mcast-group <ip_start> <ip_end>'
28
28
  default_value: ''
29
29
 
30
+ multisite_ingress_replication:
31
+ _exclude: [N3k-F, N5k, N6k, N7k, N9k-F]
32
+ kind: boolean
33
+ get_value: '/^multisite ingress-replication$/'
34
+ set_value: '<state> multisite ingress-replication'
35
+ default_value: false
36
+
30
37
  peer_list:
31
38
  _exclude: [N5k, N6k, N7k]
32
39
  multiple:
@@ -0,0 +1,66 @@
1
+ # January 2018, Rahul Shenoy
2
+ #
3
+ # Copyright (c) 2018 Cisco and/or its affiliates.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require_relative 'cisco_cmn_utils'
18
+ require_relative 'node_util'
19
+ require_relative 'feature'
20
+
21
+ module Cisco
22
+ # node_utils class for evpn_multisite
23
+ class EvpnMulticast < NodeUtil
24
+ def initialize
25
+ @get_args = @set_args = {}
26
+ create
27
+ end
28
+
29
+ def create
30
+ return unless multicast == default_multicast
31
+ Feature.ngmvpn_enable
32
+ config_set('feature', 'nv_overlay', state: '')
33
+ @set_args[:state] = ''
34
+ config_set('evpn_multicast', 'multicast', @set_args)
35
+ end
36
+
37
+ def destroy
38
+ @set_args[:state] = 'no'
39
+ config_set('evpn_multicast', 'multicast', @set_args)
40
+ end
41
+
42
+ def self.multicast
43
+ config_get('evpn_multicast', 'multicast')
44
+ end
45
+
46
+ def multicast
47
+ config_get('evpn_multicast', 'multicast')
48
+ end
49
+
50
+ def multicast=(bool)
51
+ fail TypeError unless [true, false].include?(bool)
52
+ @set_args[:state] = bool ? '' : 'no'
53
+ if @set_args[:state] == 'no'
54
+ unless multicast == default_multicast
55
+ config_set('evpn_multicast', 'multicast', @set_args)
56
+ end
57
+ else
58
+ config_set('evpn_multicast', 'multicast', @set_args)
59
+ end
60
+ end
61
+
62
+ def default_multicast
63
+ config_get_default('evpn_multicast', 'multicast')
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,96 @@
1
+ # October 2017, Rahul Shenoy
2
+ #
3
+ # Copyright (c) 2017 Cisco and/or its affiliates.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require_relative 'cisco_cmn_utils'
18
+ require_relative 'node_util'
19
+ require_relative 'feature'
20
+
21
+ module Cisco
22
+ # node_utils class for evpn_multisite
23
+ class EvpnMultisite < NodeUtil
24
+ attr_reader :multisiteid, :time
25
+
26
+ def initialize(multisiteid, instantiate=true)
27
+ err_msg = "multisiteid must be either a 'String' or an" \
28
+ " 'Integer' object"
29
+ fail ArgumentError, err_msg unless multisiteid.is_a?(Integer) ||
30
+ multisiteid.is_a?(String)
31
+ @multisiteid = multisiteid.to_i
32
+ @get_args = @set_args = { multisiteid: @multisiteid }
33
+ create if instantiate
34
+ end
35
+
36
+ def create
37
+ # There is an issue with EX platform using
38
+ # Feature.nv_overlay_enable generating error code '400'
39
+ # Using config_set for enabling nv overlay
40
+ config_set('feature', 'nv_overlay', state: '')
41
+ sleep 1
42
+ @set_args[:state] = ''
43
+ config_set('evpn_multisite', 'multisite', @set_args)
44
+ end
45
+
46
+ def destroy
47
+ @set_args[:state] = 'no'
48
+ # HACK: set time to a dummy value
49
+ @set_args[:time] = 30
50
+ config_set('evpn_multisite', 'delay_restore', @set_args)
51
+ config_set('evpn_multisite', 'multisite', @set_args)
52
+ end
53
+
54
+ def self.multisite
55
+ nu_obj = nil
56
+ ms_id = config_get('evpn_multisite', 'multisite')
57
+ nu_obj = EvpnMultisite.new(ms_id, false) if ms_id
58
+ nu_obj
59
+ end
60
+
61
+ def multisite
62
+ config_get('evpn_multisite', 'multisite')
63
+ end
64
+
65
+ def multisite=(multisiteid)
66
+ err_msg = "multisiteid must be either a 'String' or an" \
67
+ " 'Integer' object"
68
+ fail ArgumentError, err_msg unless multisiteid.is_a?(Integer) ||
69
+ multisiteid.is_a?(String)
70
+ @multisiteid = multisiteid.to_i
71
+ @set_args[:multisiteid] = @multisiteid
72
+ config_set('evpn_multisite', 'multisite', @set_args)
73
+ end
74
+
75
+ def delay_restore
76
+ config_get('evpn_multisite', 'delay_restore', @get_args)
77
+ end
78
+
79
+ def delay_restore=(time)
80
+ # HACK: set a dummy time value when removing the property
81
+ dummy_time = 30
82
+ if time == default_delay_restore
83
+ @set_args[:state] = 'no'
84
+ @set_args[:time] = dummy_time
85
+ else
86
+ @set_args[:time] = time
87
+ @set_args[:state] = '' unless @set_args[:state]
88
+ end
89
+ config_set('evpn_multisite', 'delay_restore', @set_args)
90
+ end
91
+
92
+ def default_delay_restore
93
+ config_get_default('evpn_multisite', 'delay_restore')
94
+ end
95
+ end
96
+ end