Class: Rbeapi::Api::PortchannelInterface

Inherits:
BaseInterface show all
Defined in:
lib/rbeapi/api/interfaces.rb

Overview

The PortchannelInterface class manages all port channel interfaces on an EOS node.

Constant Summary collapse

DEFAULT_LACP_FALLBACK =
'disabled'
DEFAULT_LACP_MODE =
'on'
'0'

Constants inherited from BaseInterface

BaseInterface::DEFAULT_INTF_DESCRIPTION

Instance Attribute Summary

Attributes inherited from Entity

#config, #error, #node

Instance Method Summary collapse

Methods inherited from BaseInterface

#create, #default, #delete, #set_description, #set_shutdown

Methods inherited from Entity

#command_builder, #configure, #configure_interface, #get_block, #initialize, instance

Constructor Details

This class inherits a constructor from Rbeapi::Api::Entity

Instance Method Details

#add_member(name, member) ⇒ Boolean

add_member adds the interface specified in member to the port-channel interface specified by name in the nodes running-configuration. If the port-channel interface does not already exist, it will be created.

Parameters:

  • :name (String)

    The name of the port-channel interface to apply the configuration to.

  • :member (String)

    The name of the physical Ethernet interface to add to the logical port-channel interface.

Returns:

  • (Boolean)

    returns true if the command completed successfully



810
811
812
813
814
# File 'lib/rbeapi/api/interfaces.rb', line 810

def add_member(name, member)
  lacp = parse_lacp_mode(name)[:lacp_mode]
  grpid = /(\d+)/.match(name)[0]
  configure_interface(member, "channel-group #{grpid} mode #{lacp}")
end

#get(name) ⇒ nil, Hash<Symbol, Object>

get returns the specified port-channel interface configuration from the nodes running configuration as a resource hash. The resource hash returned extends the BaseInterface resource hash, sets the type value to portchannel and adds the portchannel specific attributes

Examples:

{
  type: 'portchannel'
  description: <string>
  shutdown: [true, false]
  members: array[<strings>]
  lacp_mode: [active, passive, on]
  minimum_links: <string>
  lacp_timeout: <string>
  lacp_fallback: [static, individual, disabled]
}

Parameters:

  • :name (String)

    The name of the portchannel interface to return a resource hash for. The name must be the full interface name of the desired interface.

Returns:

  • (nil, Hash<Symbol, Object>)

    returns the interface resource as a hash object. If the specified interface does not exist in the running configuration, a nil object is returned

See Also:



614
615
616
617
618
619
620
621
622
623
624
625
# File 'lib/rbeapi/api/interfaces.rb', line 614

def get(name)
  config = get_block("^interface #{name}")
  return nil unless config
  response = super(name)
  response[:type] = 'portchannel'
  response.merge!(parse_members(name))
  response.merge!(parse_lacp_mode(name))
  response.merge!(parse_minimum_links(config))
  response.merge!(parse_lacp_fallback(config))
  response.merge!(parse_lacp_timeout(config))
  response
end

#remove_member(name, member) ⇒ Boolean

remove_member removes the interface specified in member from the port-channel interface specified by name in the nodes running-configuration.

Parameters:

  • :name (String)

    The name of the port-channel interface to apply the configuration to.

  • :member (String)

    The name of the physical Ethernet interface to remove from the logical port-channel interface.

Returns:

  • (Boolean)

    returns true if the command completed successfully



830
831
832
833
# File 'lib/rbeapi/api/interfaces.rb', line 830

def remove_member(name, member)
  grpid = /(\d+)/.match(name)[0]
  configure_interface(member, "no channel-group #{grpid}")
end

#set_lacp_fallback(name, opts = {}) ⇒ Boolean

set_lacp_fallback configures the lacp fallback mode for the port-channel interface. If the enable keyword is false, lacp fallback is configured using the no keyword argument. If the default option is specified and set to true, the lacp fallback value is configured using the default keyword. The default keyword takes precedence over the enable keyword if both options are provided.

Parameters:

  • :name (String)

    The interface name to apply the configuration values to. The name must be the full interface identifier.

  • :opts (Hash)

    optional keyword arguments

Returns:

  • (Boolean)

    returns true if the command completed successfully



893
894
895
896
# File 'lib/rbeapi/api/interfaces.rb', line 893

def set_lacp_fallback(name, opts = {})
  commands = command_builder('port-channel lacp fallback', opts)
  configure_interface(name, commands)
end

#set_lacp_mode(name, mode) ⇒ Boolean

set_lacp_mode configures the lacp mode on the port-channel interface by configuring the lacp mode value for each member interface. This method will find all member interfaces for a port-channel and reconfigure them using the mode argument.

Parameters:

  • :name (String)

    The interface name to apply the configuration values to. The name must be the full interface identifier.

  • :mode (String)

    The lacp mode to configure on the member interfaces for the port-channel. Valid values include active, passive or on

Returns:

  • (Boolean)

    returns true if the command completed successfully



851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
# File 'lib/rbeapi/api/interfaces.rb', line 851

def set_lacp_mode(name, mode)
  return false unless %w(on passive active).include?(mode)
  grpid = /(\d+)/.match(name)[0]

  remove_commands = []
  add_commands = []

  parse_members(name)[:members].each do |member|
    remove_commands << "interface #{member}"
    remove_commands << "no channel-group #{grpid}"
    add_commands << "interface #{member}"
    add_commands << "channel-group #{grpid} mode #{mode}"
  end
  configure remove_commands + add_commands
end

#set_lacp_timeout(name, opts = {}) ⇒ Boolean

set_lacp_timeout configures the lacp fallback timeout for the port-channel interface. If the enable keyword is false, lacp fallback timeout is configured using the no keyword argument. If the default option is specified and set to true, the lacp fallback timeout value is configured using the default keyword. The default keyword takes precedence over the enable keyword if both options are provided.

Parameters:

  • :name (String)

    The interface name to apply the configuration values to. The name must be the full interface identifier.

  • :opts (Hash)

    optional keyword arguments

Returns:

  • (Boolean)

    returns true if the command completed successfully



924
925
926
927
# File 'lib/rbeapi/api/interfaces.rb', line 924

def set_lacp_timeout(name, opts = {})
  commands = command_builder('port-channel lacp fallback timeout', opts)
  configure_interface(name, commands)
end

#set_members(name, members) ⇒ Boolean

set_members configures the set of physical interfaces that comprise the logical port-channel interface. The members value passed should be an array of physical interface names that comprise the port-channel interface. This method will add and remove individual members as required to sync the provided members array

Parameters:

  • :name (String)

    The name of the port-channel interface to apply the members to. If the port-channel interface does not already exist it will be created

  • :members (Array)

    The array of physical interface members to add to the port-channel logical interface.

Returns:

  • (Boolean)

    returns true if the command completed successfully

See Also:



777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
# File 'lib/rbeapi/api/interfaces.rb', line 777

def set_members(name, members)
  current_members = Set.new parse_members(name)[:members]
  members = Set.new members

  # remove members from the current port-channel interface
  current_members.difference(members).each do |intf|
    result = remove_member(name, intf)
    return false unless result
  end

  # add new member interfaces to the port-channel
  members.difference(current_members).each do |intf|
    result = add_member(name, intf)
    return false unless result
  end

  true
end

set_minimum_links configures the minimum physical links up required to consider the logical portchannel interface operationally up. If the enable keyword is false then the minimum-links is configured using the no keyword argument. If the default keyword argument is provided and set to true, the minimum-links value is defaulted using the default keyword. The default keyword takes precedence over the enable keyword argument if both are provided.

Parameters:

  • :name (String)

    The interface name to apply the configuration values to. The name must be the full interface identifier.

  • :opts (Hash)

    optional keyword arguments

Returns:

  • (Boolean)

    returns true if the command completed successfully



754
755
756
757
# File 'lib/rbeapi/api/interfaces.rb', line 754

def set_minimum_links(name, opts = {})
  commands = command_builder('port-channel min-links', opts)
  configure_interface(name, commands)
end