Class: Cisco::EvpnVni

Inherits:
NodeUtil show all
Defined in:
lib/cisco_node_utils/evpn_vni.rb

Overview

node_utils class for evpn_vni

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from NodeUtil

config_get, #config_get, config_get_default, #config_get_default, #config_set, config_set, #node, node, #show

Constructor Details

#initialize(vni, instantiate = true) ⇒ EvpnVni

Returns a new instance of EvpnVni.



26
27
28
29
30
31
32
33
34
# File 'lib/cisco_node_utils/evpn_vni.rb', line 26

def initialize(vni, instantiate=true)
  err_msg = "vni must be either a 'String' or an" \
            " 'Integer' object"
  fail ArgumentError, err_msg unless vni.is_a?(Integer) ||
                                     vni.is_a?(String)
  @vni = vni.to_i
  @get_args = @set_args = { vni: @vni }
  create if instantiate
end

Instance Attribute Details

#vni ⇒ Object (readonly)

Returns the value of attribute vni.



24
25
26
# File 'lib/cisco_node_utils/evpn_vni.rb', line 24

def vni
  @vni
end

Class Method Details

.enable ⇒ Object

enable feature bgp and nv overlay evpn



65
66
67
68
# File 'lib/cisco_node_utils/evpn_vni.rb', line 65

def self.enable
  Feature.bgp_enable
  Feature.nv_overlay_evpn_enable
end

.enabled ⇒ Object



70
71
72
# File 'lib/cisco_node_utils/evpn_vni.rb', line 70

def self.enabled
  Feature.bgp_enabled? && Feature.nv_overlay_evpn_enabled?
end

.vnis ⇒ Object

Creat a hash of all vni instance



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/cisco_node_utils/evpn_vni.rb', line 37

def self.vnis
  hash = {}
  return hash unless Feature.bgp_enabled?
  vni_list = config_get('evpn_vni', 'vni')
  return hash if vni_list.nil?

  vni_list.each do |vni_id|
    hash[vni_id] = EvpnVni.new(vni_id, false)
  end
  hash
end

Instance Method Details

#create ⇒ Object



49
50
51
52
53
# File 'lib/cisco_node_utils/evpn_vni.rb', line 49

def create
  EvpnVni.enable unless EvpnVni.enabled
  @set_args[:state] = ''
  config_set('evpn_vni', 'vni', @set_args)
end

#default_route_distinguisher ⇒ Object



96
97
98
# File 'lib/cisco_node_utils/evpn_vni.rb', line 96

def default_route_distinguisher
  config_get_default('evpn_vni', 'route_distinguisher')
end

#default_route_target_both ⇒ Object



110
111
112
# File 'lib/cisco_node_utils/evpn_vni.rb', line 110

def default_route_target_both
  config_get_default('evpn_vni', 'route_target_both')
end

#default_route_target_export ⇒ Object



124
125
126
# File 'lib/cisco_node_utils/evpn_vni.rb', line 124

def default_route_target_export
  config_get_default('evpn_vni', 'route_target_export')
end

#default_route_target_import ⇒ Object



138
139
140
# File 'lib/cisco_node_utils/evpn_vni.rb', line 138

def default_route_target_import
  config_get_default('evpn_vni', 'route_target_import')
end

#destroy ⇒ Object



55
56
57
58
59
60
61
62
# File 'lib/cisco_node_utils/evpn_vni.rb', line 55

def destroy
  @set_args[:state] = 'no'
  config_set('evpn_vni', 'vni', @set_args)

  # no evpn if no vni left
  vni_list = config_get('evpn_vni', 'vni')
  config_set('evpn_vni', 'evpn', @set_args) if vni_list.nil?
end

#route_distinguisher ⇒ Object

Attributes: Route Distinguisher (Getter/Setter/Default)



80
81
82
# File 'lib/cisco_node_utils/evpn_vni.rb', line 80

def route_distinguisher
  config_get('evpn_vni', 'route_distinguisher', @get_args)
end

#route_distinguisher=(rd) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/cisco_node_utils/evpn_vni.rb', line 84

def route_distinguisher=(rd)
  if rd == default_route_distinguisher
    @set_args[:state] = 'no'
    @set_args[:rd] = ''
  else
    @set_args[:state] = ''
    @set_args[:rd] = rd
  end
  config_set('evpn_vni', 'route_distinguisher', @set_args)
  set_args_keys_default
end

#route_target_both ⇒ Object

route target both



101
102
103
104
# File 'lib/cisco_node_utils/evpn_vni.rb', line 101

def route_target_both
  cmds = config_get('evpn_vni', 'route_target_both', @get_args)
  cmds.sort
end

#route_target_both=(should) ⇒ Object



106
107
108
# File 'lib/cisco_node_utils/evpn_vni.rb', line 106

def route_target_both=(should)
  route_target_delta(should, route_target_both, 'route_target_both')
end

#route_target_delta(should, is, prop) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/cisco_node_utils/evpn_vni.rb', line 142

def route_target_delta(should, is, prop)
  delta_hash = Utils.delta_add_remove(should, is)
  return if delta_hash.values.flatten.empty?
  [:add, :remove].each do |action|
    CiscoLogger.debug("#{prop}" \
      "#{@get_args}\n #{action}: #{delta_hash[action]}")
    delta_hash[action].each do |community|
      state = (action == :add) ? '' : 'no'
      @set_args[:state] = state
      @set_args[:community] = community
      config_set('evpn_vni', prop, @set_args)
    end
  end
end

#route_target_export ⇒ Object

route target export



115
116
117
118
# File 'lib/cisco_node_utils/evpn_vni.rb', line 115

def route_target_export
  cmds = config_get('evpn_vni', 'route_target_export', @get_args)
  cmds.sort
end

#route_target_export=(should) ⇒ Object



120
121
122
# File 'lib/cisco_node_utils/evpn_vni.rb', line 120

def route_target_export=(should)
  route_target_delta(should, route_target_export, 'route_target_export')
end

#route_target_import ⇒ Object

route target import



129
130
131
132
# File 'lib/cisco_node_utils/evpn_vni.rb', line 129

def route_target_import
  cmds = config_get('evpn_vni', 'route_target_import', @get_args)
  cmds.sort
end

#route_target_import=(should) ⇒ Object



134
135
136
# File 'lib/cisco_node_utils/evpn_vni.rb', line 134

def route_target_import=(should)
  route_target_delta(should, route_target_import, 'route_target_import')
end

#set_args_keys_default ⇒ Object



74
75
76
# File 'lib/cisco_node_utils/evpn_vni.rb', line 74

def set_args_keys_default
  @set_args = { vni: @vni }
end