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.
- 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
|