vxlan 0.2.0 → 0.2.2
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 +21 -0
- data/README-zh.md +9 -1
- data/README.md +9 -1
- data/docs/architecture-zh.md +1 -1
- data/lib/vxlan/bgp_neighbors.rb +4 -1
- data/lib/vxlan/cisco_nxos/configuration.rb +3 -77
- data/lib/vxlan/cisco_nxos/configuration_state.rb +87 -0
- data/lib/vxlan/cisco_nxos/document.rb +1 -1
- data/lib/vxlan/cisco_nxos/evpn_l2route.rb +31 -22
- data/lib/vxlan/cisco_nxos/parser.rb +7 -7
- data/lib/vxlan/cisco_nxos/parsers/show_bgp_l2vpn_evpn_summary.rb +5 -5
- data/lib/vxlan/cisco_nxos/parsers/show_cdp_neighbors_detail.rb +7 -7
- data/lib/vxlan/cisco_nxos/parsers/show_interface_brief.rb +8 -8
- data/lib/vxlan/cisco_nxos/parsers/show_ip_ospf_neighbors.rb +4 -4
- data/lib/vxlan/cisco_nxos/parsers/show_mac_address_table.rb +4 -4
- data/lib/vxlan/cisco_nxos/parsers/show_nve_peers.rb +2 -2
- data/lib/vxlan/cisco_nxos/parsers/show_nve_vni.rb +3 -3
- data/lib/vxlan/cisco_nxos/parsers/show_port_channel_summary.rb +7 -7
- data/lib/vxlan/cisco_nxos/parsers/show_running_config.rb +46 -35
- data/lib/vxlan/cisco_nxos/parsers/show_vpc_brief.rb +9 -9
- data/lib/vxlan/cisco_nxos/syntax/interfaces.rb +3 -3
- data/lib/vxlan/cisco_nxos/syntax/policies.rb +35 -13
- data/lib/vxlan/cisco_nxos/syntax/routing.rb +45 -6
- data/lib/vxlan/cisco_nxos/terminal.rb +3 -1
- data/lib/vxlan/collector.rb +4 -4
- data/lib/vxlan/configuration_review.rb +13 -2
- data/lib/vxlan/prefix_list_references.rb +3 -3
- data/lib/vxlan/version.rb +1 -1
- metadata +10 -9
|
@@ -15,6 +15,7 @@ module Vxlan
|
|
|
15
15
|
|
|
16
16
|
nve_members_by_vni = @configuration.fetch(:nve).fetch(:members, {})
|
|
17
17
|
vlan_mappings_by_vni = @configuration.fetch(:vlan_vnis).group_by { |_vlan, vni| vni }
|
|
18
|
+
vrf_vnis = @configuration.fetch(:vrfs).values.filter_map { |settings| settings[:vni] }.to_set
|
|
18
19
|
evpn_vnis = @configuration.fetch(:evpn)
|
|
19
20
|
findings = []
|
|
20
21
|
vlan_mappings_by_vni.each do |vni, entries|
|
|
@@ -23,14 +24,24 @@ module Vxlan
|
|
|
23
24
|
findings << { code: :vlan_vni_without_nve, vni: vni, vlan_ids: entries.map(&:first).sort }
|
|
24
25
|
end
|
|
25
26
|
nve_members_by_vni.each do |vni, settings|
|
|
26
|
-
|
|
27
|
+
if settings[:associate_vrf]
|
|
28
|
+
findings << { code: :nve_l3_without_vrf, vni: vni } unless vrf_vnis.include?(vni)
|
|
29
|
+
next
|
|
30
|
+
end
|
|
27
31
|
|
|
28
32
|
findings << { code: :nve_l2_without_vlan, vni: vni } unless vlan_mappings_by_vni.key?(vni)
|
|
29
33
|
if @configuration[:nv_overlay_evpn] && !evpn_vnis.key?(vni)
|
|
30
34
|
findings << { code: :nve_l2_without_evpn, vni: vni }
|
|
31
35
|
end
|
|
32
36
|
end
|
|
33
|
-
evpn_vnis.
|
|
37
|
+
evpn_vnis.each do |vni, settings|
|
|
38
|
+
member = nve_members_by_vni[vni]
|
|
39
|
+
if !member
|
|
40
|
+
findings << { code: :evpn_vni_without_nve, vni: vni }
|
|
41
|
+
elsif (settings[:type] == "l3") != member[:associate_vrf]
|
|
42
|
+
findings << { code: :vni_layer_conflict, vni: vni, evpn_type: settings[:type] }
|
|
43
|
+
end
|
|
44
|
+
end
|
|
34
45
|
@configuration.fetch(:vrfs).each do |name, settings|
|
|
35
46
|
next unless settings[:vni]
|
|
36
47
|
member = nve_members_by_vni[settings[:vni]]
|
|
@@ -14,7 +14,7 @@ module Vxlan
|
|
|
14
14
|
def call(address_family: "ipv4")
|
|
15
15
|
raise ArgumentError, "Unsupported address family" unless %w[ipv4 ipv6].include?(address_family)
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
consumers_by_route_map = route_map_consumers.transform_values(&:uniq)
|
|
18
18
|
references = @configuration.fetch(:route_maps).each_with_object({}) do |(name, entries), result|
|
|
19
19
|
entries.sort_by { |entry| entry.fetch(:sequence) }.each do |entry|
|
|
20
20
|
matches = entry.fetch(:prefix_list_matches) do
|
|
@@ -22,7 +22,7 @@ module Vxlan
|
|
|
22
22
|
end
|
|
23
23
|
matches.select { |match| match[:address_family] == address_family }.each do |match|
|
|
24
24
|
route_map_reference = { type: "route_map", name: name, sequence: entry.fetch(:sequence), action: entry.fetch(:action),
|
|
25
|
-
bindings:
|
|
25
|
+
bindings: consumers_by_route_map.fetch(name, []).dup }
|
|
26
26
|
route_map_reference[:selector] = match[:selector] unless match[:selector] == "address"
|
|
27
27
|
match.fetch(:names).uniq.each do |prefix_list|
|
|
28
28
|
(result[prefix_list] ||= []) << route_map_reference
|
|
@@ -37,7 +37,7 @@ module Vxlan
|
|
|
37
37
|
private
|
|
38
38
|
|
|
39
39
|
# 关联关系保留协议、VRF、地址族及对等体,避免共享策略被混用。
|
|
40
|
-
def
|
|
40
|
+
def route_map_consumers
|
|
41
41
|
result = Hash.new { |hash, key| hash[key] = [] }
|
|
42
42
|
bgp = @configuration.fetch(:bgp)
|
|
43
43
|
{ "default" => bgp }.merge(bgp.fetch(:vrfs, {})).each do |vrf, settings|
|
data/lib/vxlan/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vxlan
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gatework contributors
|
|
@@ -13,30 +13,30 @@ dependencies:
|
|
|
13
13
|
name: ctx_parser
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version:
|
|
18
|
+
version: 0.2.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
|
-
- - "
|
|
23
|
+
- - "~>"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version:
|
|
25
|
+
version: 0.2.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: ctx_driver
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
29
29
|
requirements:
|
|
30
|
-
- - "
|
|
30
|
+
- - "~>"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version:
|
|
32
|
+
version: 0.2.0
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
|
-
- - "
|
|
37
|
+
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version:
|
|
39
|
+
version: 0.2.0
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: digest
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -81,6 +81,7 @@ files:
|
|
|
81
81
|
- lib/vxlan.rb
|
|
82
82
|
- lib/vxlan/bgp_neighbors.rb
|
|
83
83
|
- lib/vxlan/cisco_nxos/configuration.rb
|
|
84
|
+
- lib/vxlan/cisco_nxos/configuration_state.rb
|
|
84
85
|
- lib/vxlan/cisco_nxos/document.rb
|
|
85
86
|
- lib/vxlan/cisco_nxos/evpn_l2route.rb
|
|
86
87
|
- lib/vxlan/cisco_nxos/parser.rb
|