cisco_node_utils 1.8.0 → 1.9.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 +43 -1
- data/README.md +4 -4
- data/docs/README-maintainers.md +1 -0
- data/lib/cisco_node_utils/bgp_neighbor.rb +20 -0
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +20 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multicast.yaml +12 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multisite.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_stormcontrol.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/interface_evpn_multisite.yaml +17 -0
- data/lib/cisco_node_utils/cmd_ref/ip_multicast.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +21 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +6 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +7 -0
- data/lib/cisco_node_utils/evpn_multicast.rb +66 -0
- data/lib/cisco_node_utils/evpn_multisite.rb +96 -0
- data/lib/cisco_node_utils/evpn_stormcontrol.rb +84 -0
- data/lib/cisco_node_utils/feature.rb +19 -0
- data/lib/cisco_node_utils/interface.rb +2 -1
- data/lib/cisco_node_utils/interface_evpn_multisite.rb +63 -0
- data/lib/cisco_node_utils/ip_multicast.rb +86 -0
- data/lib/cisco_node_utils/version.rb +2 -2
- data/lib/cisco_node_utils/vrf_af.rb +56 -5
- data/lib/cisco_node_utils/vxlan_vtep.rb +24 -0
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +21 -0
- data/tests/ciscotest.rb +36 -3
- data/tests/tacacs_server.yaml.example +1 -1
- data/tests/test_bgp_af.rb +1 -1
- data/tests/test_bgp_neighbor.rb +15 -0
- data/tests/test_bgp_neighbor_af.rb +27 -0
- data/tests/test_evpn_multicast.rb +65 -0
- data/tests/test_evpn_multisite.rb +70 -0
- data/tests/test_evpn_stormcontrol.rb +56 -0
- data/tests/test_feature.rb +6 -1
- data/tests/test_interface_evpn_multisite.rb +59 -0
- data/tests/test_ip_multicast.rb +69 -0
- data/tests/test_node_ext.rb +3 -2
- data/tests/test_radius_global.rb +7 -5
- data/tests/test_router_ospf_vrf.rb +2 -0
- data/tests/test_stp_global.rb +7 -0
- data/tests/test_tacacs_global.rb +10 -7
- data/tests/test_vrf_af.rb +52 -1
- data/tests/test_vxlan_vtep.rb +23 -0
- data/tests/test_vxlan_vtep_vni.rb +31 -0
- data/tests/yum_package.yaml +10 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f41913654bc402d2a30d3c2345e0ac1fbd587ffe
|
4
|
+
data.tar.gz: a20bebaeb60c419708f83b078c8f5e61464788ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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(
|
46
|
-
Cisco Nexus N3k | NX-OS | 7.0(3)I2(
|
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(
|
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-
|
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.
|
data/docs/README-maintainers.md
CHANGED
@@ -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
|