Class: Rbeapi::Api::Vlans

Inherits:
Entity
  • Object
show all
Defined in:
lib/rbeapi/api/vlans.rb

Overview

The Vlan class provides a class implementation for working with the collection of Vlans on the node. This class presents an abstraction of the nodes configured vlan id’s from the running configuration.

Since:

  • eos_version 4.13.7M

Instance Attribute Summary

Attributes inherited from Entity

#config, #error, #node

Instance Method Summary collapse

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_trunk_group(id, value) ⇒ Boolean

add_trunk_group adds a new trunk group value to the specified vlan id in the nodes running configuration. The trunk group name value accepts a-z 0-9 and _.

Commands

vlan <id>
  trunk group <value>

Parameters:

  • id (String, Integer)

    The vlan id to apply the configuration to. the id value should be in the range of 1 to 4094

  • value (String)

    The value to add to the vlan id configuration on the node.

Returns:

  • (Boolean)

    Returns true if the command completed successfully.

Since:

  • version 4.13.7M



312
313
314
# File 'lib/rbeapi/api/vlans.rb', line 312

def add_trunk_group(id, value)
  configure(["vlan #{id}", "trunk group #{value}"])
end

#create(id) ⇒ Boolean

create will create a new vlan resource in the nodes current configuration with the specified vlan id. If the create method is called and the vlan id already exists, this method will still return true.

Commands

vlan <value>

Parameters:

  • id (String, Integer)

    The vlan id to create on the node. The vlan id must be in the valid range of 1 to 4094.

Returns:

  • (Boolean)

    Returns true if the command completed successfully.

Since:

  • eos_version 4.13.7M



169
170
171
# File 'lib/rbeapi/api/vlans.rb', line 169

def create(id)
  configure("vlan #{id}")
end

#default(id) ⇒ Boolean

default will configure the vlan using the default keyword. This command has the same effect as deleting the vlan from the nodes running configuration.

Commands

default vlan <value>

Parameters:

  • id (String, Integer)

    The vlan id to default in the nodes configuration. Ths vid value should be in the valid range of 1 to 4094.

Returns:

  • (Boolean)

    Returns true if the command complete successfully.

Since:

  • eos_version 4.13.7M



206
207
208
# File 'lib/rbeapi/api/vlans.rb', line 206

def default(id)
  configure("default vlan #{id}")
end

#delete(id) ⇒ Boolean

delete will delete an existing vlan resource from the nodes current running configuration. If the delete method is called and the vlan id does not exist, this method will succeed.

Commands

no vlan <value>

Parameters:

  • id (String, Integer)

    The vlan id to delete from the node. The id value should be in the valid range of 1 to 4094.

Returns:

  • (Boolean)

    Returns true if the command completed successfully.

Since:

  • eos_version 4.13.7M



187
188
189
# File 'lib/rbeapi/api/vlans.rb', line 187

def delete(id)
  configure("no vlan #{id}")
end

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

get returns the specified vlan resource Hash that represents the nodes current vlan configuration.

Examples:

{
  name: <string>,
  state: <string>,
  trunk_groups: array[<string]
}

Parameters:

  • id (String)

    The vlan id to return a resource for from the nodes configuration.

Returns:

  • (nil, Hash<Symbol, Object>)

    Returns the vlan resource as a Hash. If the specified vlan id is not found in the nodes current configuration a nil object is returned.

Since:

  • eos_version 4.13.7M



64
65
66
67
68
69
70
71
72
# File 'lib/rbeapi/api/vlans.rb', line 64

def get(id)
  config = get_block("vlan #{id}")
  return nil unless config
  response = {}
  response.merge!(parse_name(config))
  response.merge!(parse_state(config))
  response.merge!(parse_trunk_groups(config))
  response
end

#getallHash<Symbol, Object>

getall returns the collection of vlan resources from the nodes running configuration as a hash. The vlan resource collection hash is keyed by the unique vlan id.

Examples:

{
  <vlanid>: {
    name: <string>,
    state: <string>,
    trunk_groups: array[<string]
  },
  <vlanid>: {
    name: <string>,
    state: <string>,
    trunk_groups: array[<string]
  },
  ...
}

Returns:

  • (Hash<Symbol, Object>)

    Returns a hash that represents the entire vlan collection from the nodes running configuration. If there are no vlans configured, this method will return an empty hash.

See Also:

Since:

  • eos_version 4.13.7M



100
101
102
103
104
105
106
# File 'lib/rbeapi/api/vlans.rb', line 100

def getall
  vlans = config.scan(/(?<=^vlan\s)\d+$/)
  vlans.each_with_object({}) do |vid, hsh|
    resource = get vid
    hsh[vid] = resource if resource
  end
end

#remove_trunk_group(id, value) ⇒ Object

remove_trunk_group removes the specified trunk group value from the specified vlan id in the node’s configuration. If the trunk group name does not exist, this method will return success

Commands

vlan <id>
  no trunk group <value>

Parameters:

  • id (String, Integer)

    The vlan id to apply the configuration to. the id value should be in the range of 1 to 4094.

  • value (String)

    The value to remove from the list of trunk group names configured for the specified vlan.

Since:

  • eos_version 4.13.7M



333
334
335
# File 'lib/rbeapi/api/vlans.rb', line 333

def remove_trunk_group(id, value)
  configure(["vlan #{id}", "no trunk group #{value}"])
end

#set_name(id, opts = {}) ⇒ Boolean

set_name configures the name value for the specified vlan id in the nodes running configuration. If enable is false in the opts keyword Hash then the name value is negated using the no keyword. If the default keyword is set to true, then the name value is defaulted using the default keyword. The default keyword takes precedence over the enable keyword.

Commands

vlan <id>
  name <value>
  no name
  default name

Parameters:

  • id (String, Integer)

    The vlan id to apply the configuration to. The id value should be in the valid range of 1 to 4094.

  • opts (Hash) (defaults to: {})

    Optional keyword arguments.

Options Hash (opts):

  • value (String)

    The value to configure the vlan name to in the node configuration. The name parameter accepts a-z, 0-9 and _.

  • enable (Boolean)

    If false then the command is negated. Default is true.

  • default (Boolean)

    Configure the vlan name value using the default keyword.

Returns:

  • (Boolean)

    Returns true if the command completed successfully.

Since:

  • eos_version 4.13.7M



242
243
244
245
246
# File 'lib/rbeapi/api/vlans.rb', line 242

def set_name(id, opts = {})
  cmd = command_builder('name', opts)
  cmds = ["vlan #{id}", cmd]
  configure(cmds)
end

#set_state(id, opts = {}) ⇒ Boolean

set_state configures the state value for the specified vlan id in the nodes running configuration. If enable is set to false in the opts keyword Hash then the state value is negated using the no keyword. If the default keyword is set to true, then the state value is defaulted using the default keyword. The default keyword takes precedence over the enable keyword

Commands

vlan <id>
  state [active, suspend]
  no state
  default state

Parameters:

  • id (String, Integer)

    The vlan id to apply the configuration to. The id value should be in the valid range of 1 to 4094.

  • opts (Hash) (defaults to: {})

    Optional keyword arguments.

Options Hash (opts):

  • value (String)

    The value to configure the vlan state to in the node’s configuration. Accepted values are ‘active’ or ‘suspend’.

  • enable (Boolean)

    If false then the command is negated. Default is true.

  • default (Boolean)

    Configure the vlan state value using the default keyword.

Returns:

  • (Boolean)

    Returns true if the command completed successfully.

Raises:

  • (ArgumentError)

    if the value is not in the accept list of values.

Since:

  • eos_version 4.13.7M



283
284
285
286
287
288
289
290
291
292
# File 'lib/rbeapi/api/vlans.rb', line 283

def set_state(id, opts = {})
  value = opts[:value]
  unless ['active', 'suspend', nil].include?(value)
    raise ArgumentError, 'state must be active, suspend or nil'
  end

  cmd = command_builder('state', opts)
  cmds = ["vlan #{id}", cmd]
  configure(cmds)
end

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

Configures the trunk groups for the specified vlan. Trunk groups not currently set are added and trunk groups currently configured but not in the passed in value array are removed.

Parameters:

  • name (String)

    The name of the vlan to configure.

  • opts (Hash) (defaults to: {})

    The configuration parameters for the vlan.

Options Hash (opts):

  • value (string)

    Set of values to configure the trunk group.

  • enable (Boolean)

    If false then the command is negated. Default is true.

  • default (Boolean)

    The value should be set to default Default takes precedence over enable.

Returns:

  • (Boolean)

    Returns True if the commands succeed otherwise False.

Raises:

  • (ArgumentError)

Since:

  • eos_version 4.13.7M



355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
# File 'lib/rbeapi/api/vlans.rb', line 355

def set_trunk_groups(name, opts = {})
  default = opts.fetch(:default, false)
  return configure(["vlan #{name}", 'default trunk group']) if default

  enable = opts.fetch(:enable, true)
  return configure(["vlan #{name}", 'no trunk group']) unless enable

  value = opts.fetch(:value, [])
  raise ArgumentError, 'value must be an Array' unless value.is_a?(Array)

  value = Set.new value
  current_value = Set.new get(name)[:trunk_groups]

  cmds = ["vlan #{name}"]
  # Add trunk groups that are not currently in the list.
  value.difference(current_value).each do |group|
    cmds << "trunk group #{group}"
  end

  # Remove trunk groups that are not in the new list.
  current_value.difference(value).each do |group|
    cmds << "no trunk group #{group}"
  end
  configure(cmds) if cmds.length > 1
end