Class: Puppet::Util::NetworkDevice::Cisco::Interface
- Extended by:
- IPCalc
- Includes:
- IPCalc
- Defined in:
- lib/vendor/puppet/util/network_device/cisco/interface.rb
Overview
this manages setting properties to an interface in a cisco switch or router
Constant Summary collapse
- COMMANDS =
{ # property => order, ios command/block/array :description => [1, "description %s"], :speed => [2, "speed %s"], :duplex => [3, "duplex %s"], :native_vlan => [4, "switchport access vlan %s"], :encapsulation => [5, "switchport trunk encapsulation %s"], :mode => [6, "switchport mode %s"], :allowed_trunk_vlans => [7, "switchport trunk allowed vlan %s"], :etherchannel => [8, ["channel-group %s", "port group %s"]], :ipaddress => [9, lambda do |prefix,ip,option| ip.ipv6? ? "ipv6 address #{ip.to_s}/#{prefix} #{option}" : "ip address #{ip.to_s} #{netmask(Socket::AF_INET,prefix)}" end], :ensure => [10, lambda { |value| value == :present ? "no shutdown" : "shutdown" } ] }
Constants included from IPCalc
IPCalc::IP, IPCalc::IPv4, IPCalc::IPv6_full, IPCalc::IPv6_partial, IPCalc::Octet
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#transport ⇒ Object
readonly
Returns the value of attribute transport.
Instance Method Summary collapse
- #command(command) ⇒ Object
- #execute(property, value, prefix = '') ⇒ Object
-
#initialize(name, transport) ⇒ Interface
constructor
A new instance of Interface.
- #update(is = {}, should = {}) ⇒ Object
Methods included from IPCalc
bits, fullmask, linklocal?, mask, netmask, parse, prefix_length, wildmask
Constructor Details
#initialize(name, transport) ⇒ Interface
Returns a new instance of Interface.
12 13 14 15 |
# File 'lib/vendor/puppet/util/network_device/cisco/interface.rb', line 12 def initialize(name, transport) @name = name @transport = transport end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
10 11 12 |
# File 'lib/vendor/puppet/util/network_device/cisco/interface.rb', line 10 def name @name end |
#transport ⇒ Object (readonly)
Returns the value of attribute transport.
10 11 12 |
# File 'lib/vendor/puppet/util/network_device/cisco/interface.rb', line 10 def transport @transport end |
Instance Method Details
#command(command) ⇒ Object
77 78 79 80 81 |
# File 'lib/vendor/puppet/util/network_device/cisco/interface.rb', line 77 def command(command) transport.command(command) do |out| Puppet.err "Error while executing #{command}, device returned #{out}" if out =~ /^%/mo end end |
#execute(property, value, prefix = '') ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/vendor/puppet/util/network_device/cisco/interface.rb', line 59 def execute(property, value, prefix='') case COMMANDS[property][1] when Array COMMANDS[property][1].each do |command| transport.command(prefix + command % value) do |out| break unless out =~ /^%/ end end when String command(prefix + COMMANDS[property][1] % value) when Proc value = [value] unless value.is_a?(Array) value.each do |value| command(prefix + COMMANDS[property][1].call(*value)) end end end |
#update(is = {}, should = {}) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/vendor/puppet/util/network_device/cisco/interface.rb', line 35 def update(is={}, should={}) Puppet.debug("Updating interface #{name}") command("conf t") command("interface #{name}") # apply changes in a defined orders for cisco IOS devices [is.keys, should.keys].flatten.uniq.sort {|a,b| COMMANDS[a][0] <=> COMMANDS[b][0] }.each do |property| # They're equal, so do nothing. next if is[property] == should[property] # We're deleting it if should[property] == :absent or should[property].nil? execute(property, is[property], "no ") next end # We're replacing an existing value or creating a new one execute(property, should[property]) end command("exit") command("exit") end |