Class: Puppet::Util::NetworkDevice::Cisco::Interface
- Inherits:
-
Object
- Object
- Puppet::Util::NetworkDevice::Cisco::Interface
show all
- Extended by:
- IPCalc
- Includes:
- IPCalc
- Defined in:
- lib/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 =
{
:description => [1, "description %s"],
:speed => [2, "speed %s"],
:duplex => [3, "duplex %s"],
:encapsulation => [4, "switchport trunk encapsulation %s"],
:mode => [5, "switchport mode %s"],
:access_vlan => [6, "switchport access vlan %s"],
:native_vlan => [7, "switchport trunk native vlan %s"],
:allowed_trunk_vlans => [8, "switchport trunk allowed vlan %s"],
:etherchannel => [9, ["channel-group %s", "port group %s"]],
:ipaddress => [10,
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 => [11, 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
Instance Method Summary
collapse
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/puppet/util/network_device/cisco/interface.rb', line 12
def initialize(name, transport)
@name = name
@transport = transport
end
|
Instance Attribute Details
10
11
12
|
# File 'lib/puppet/util/network_device/cisco/interface.rb', line 10
def name
@name
end
|
#transport ⇒ Object
10
11
12
|
# File 'lib/puppet/util/network_device/cisco/interface.rb', line 10
def transport
@transport
end
|
Instance Method Details
#command(command) ⇒ Object
90
91
92
93
94
|
# File 'lib/puppet/util/network_device/cisco/interface.rb', line 90
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/puppet/util/network_device/cisco/interface.rb', line 72
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 |v|
command(prefix + COMMANDS[property][1].call(*v))
end
end
end
|
#update(is = {}, should = {}) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/puppet/util/network_device/cisco/interface.rb', line 36
def update(is={}, should={})
Puppet.debug("Updating interface #{name}")
command("conf t")
command("interface #{name}")
[is.keys, should.keys].flatten.uniq.sort {|a,b| COMMANDS[a][0] <=> COMMANDS[b][0] }.each do |property|
if property == :access_vlan and should[:mode] != :trunk and should[:access_vlan].nil?
should[:access_vlan] = should[:native_vlan]
end
next if property == :access_vlan and should[:mode] == :trunk
next if property == :native_vlan and should[:mode] == :access
next if property == :encapsulation and should[:mode] == :access
Puppet.debug("comparing #{property}: #{is[property]} == #{should[property]}")
next if is[property] == should[property]
if should[property] == :absent or should[property].nil?
execute(property, is[property], "no ")
next
end
execute(property, should[property])
end
command("exit")
command("exit")
end
|