boris 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +58 -30
- data/Rakefile +7 -1
- data/code_lookups.yml +94 -0
- data/lib/boris.rb +17 -2
- data/lib/boris/connectors.rb +3 -2
- data/lib/boris/connectors/ssh.rb +92 -48
- data/lib/boris/connectors/wmi.rb +8 -5
- data/lib/boris/{helpers → core_ext}/array.rb +0 -0
- data/lib/boris/core_ext/datetime.rb +38 -0
- data/lib/boris/{helpers → core_ext}/hash.rb +0 -0
- data/lib/boris/{helpers → core_ext}/string.rb +91 -33
- data/lib/boris/{helpers → core_ext}/time.rb +0 -0
- data/lib/boris/helpers/constants.rb +6 -3
- data/lib/boris/helpers/scrubber.rb +2 -1
- data/lib/boris/options.rb +29 -7
- data/lib/boris/profiler_core.rb +15 -0
- data/lib/boris/profilers/big_ip/big_ip10.rb +10 -0
- data/lib/boris/profilers/big_ip/big_ip11.rb +10 -0
- data/lib/boris/profilers/big_ip_core.rb +210 -0
- data/lib/boris/profilers/brocade_fos/fos6.rb +10 -0
- data/lib/boris/profilers/brocade_fos_core.rb +144 -0
- data/lib/boris/profilers/cisco/ios12.rb +21 -0
- data/lib/boris/profilers/cisco/nxos5.rb +11 -0
- data/lib/boris/profilers/cisco_ios_core.rb +138 -0
- data/lib/boris/profilers/cisco_nxos_core.rb +148 -0
- data/lib/boris/profilers/linux/redhat/rhel5.rb +13 -0
- data/lib/boris/profilers/linux/redhat/rhel6.rb +13 -0
- data/lib/boris/profilers/linux/{redhat.rb → redhat_core.rb} +2 -8
- data/lib/boris/profilers/linux_core.rb +25 -7
- data/lib/boris/profilers/onboard_administrator/oa3.rb +10 -0
- data/lib/boris/profilers/onboard_administrator_core.rb +96 -0
- data/lib/boris/profilers/unix/solaris/solaris10.rb +11 -0
- data/lib/boris/profilers/unix/solaris/solaris11.rb +11 -0
- data/lib/boris/profilers/unix/{solaris.rb → solaris_core.rb} +13 -13
- data/lib/boris/profilers/unix_core.rb +23 -6
- data/lib/boris/profilers/windows/windows2003.rb +1 -2
- data/lib/boris/profilers/windows/windows2008.rb +1 -2
- data/lib/boris/profilers/windows/windows2012.rb +1 -2
- data/lib/boris/profilers/windows_core.rb +29 -8
- data/lib/boris/structure.rb +15 -0
- data/lib/boris/target.rb +19 -3
- data/lib/boris/version.rb +1 -1
- metadata +27 -11
- data/lib/boris/helpers.rb +0 -7
- data/lib/boris/profiler.rb +0 -18
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'boris/profiler_core'
|
2
|
+
|
3
|
+
module Boris; module Profilers
|
4
|
+
class BrocadeFOSCore
|
5
|
+
include ProfilerCore
|
6
|
+
|
7
|
+
def self.connection_type
|
8
|
+
Boris::SSHConnector
|
9
|
+
end
|
10
|
+
|
11
|
+
def switchshow_data
|
12
|
+
@switchshow_data ||= @connector.values_at('switchshow')
|
13
|
+
end
|
14
|
+
|
15
|
+
def version_data
|
16
|
+
@version_data ||= @connector.values_at('version')
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_file_systems; super; end
|
20
|
+
|
21
|
+
def get_hardware
|
22
|
+
super
|
23
|
+
|
24
|
+
switch_type_id = switchshow_data.grep(/switchtype/i)[0].after_colon.extract(/(\d+)\./).to_i
|
25
|
+
|
26
|
+
@hardware[:firmware_version] = version_data.grep(/bootprom/i)[0].after_colon
|
27
|
+
|
28
|
+
@hardware[:model] = CODE_LOOKUPS['brocade']['switches'][switch_type_id]
|
29
|
+
|
30
|
+
serial = @connector.value_at('chassisshow | grep "Factory Serial"')
|
31
|
+
@hardware[:serial] = serial.after_colon.strip.upcase
|
32
|
+
|
33
|
+
@hardware[:vendor] = VENDOR_BROCADE
|
34
|
+
|
35
|
+
@hardware
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_hosted_shares; super; end
|
39
|
+
def get_installed_applications; super; end
|
40
|
+
def get_installed_patches; super; end
|
41
|
+
def get_installed_services; super; end
|
42
|
+
def get_local_user_groups; super; end
|
43
|
+
|
44
|
+
def get_network_id
|
45
|
+
super
|
46
|
+
|
47
|
+
hostname = switchshow_data.grep(/switchname/i)[0].after_colon.split('.')
|
48
|
+
|
49
|
+
@network_id[:hostname] = hostname.shift
|
50
|
+
@network_id[:domain] = hostname.join('.') if hostname.any?
|
51
|
+
|
52
|
+
@network_id
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_network_interfaces
|
56
|
+
super
|
57
|
+
|
58
|
+
# get the management (ethernet) port... usually eth0
|
59
|
+
ifmodeshow_data = @connector.values_at('ifmodeshow "eth0"')
|
60
|
+
|
61
|
+
if ifmodeshow_data.join =~ /mac address/i
|
62
|
+
h = network_interface_template
|
63
|
+
|
64
|
+
link_data = ifmodeshow_data.grep(/link mode/i)[0].after_colon
|
65
|
+
|
66
|
+
h[:auto_negotiate] = link_data =~ /negotiated/i ? true : false
|
67
|
+
h[:mac_address] = ifmodeshow_data.grep(/mac address/i)[0].split.last.upcase
|
68
|
+
h[:model] = 'Unknown Ethernet Adapter'
|
69
|
+
h[:name] = 'eth0'
|
70
|
+
h[:status] = link_data =~ /link ok/i ? 'up' : 'down'
|
71
|
+
h[:type] = 'ethernet'
|
72
|
+
h[:vendor] = VENDOR_BROCADE
|
73
|
+
|
74
|
+
if h[:status] == 'up'
|
75
|
+
h[:current_speed_mbps] = link_data.extract(/(\d+)base/i).to_i
|
76
|
+
|
77
|
+
ip_data = @connector.values_at('ipaddrshow')
|
78
|
+
|
79
|
+
h[:ip_addresses] << {
|
80
|
+
:ip_address=>ip_data.grep(/ethernet ip address/i)[0].after_colon,
|
81
|
+
:subnet=>ip_data.grep(/ethernet subnet/i)[0].after_colon
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
@network_interfaces << h
|
86
|
+
end
|
87
|
+
|
88
|
+
# now get the fibre ports
|
89
|
+
# first we have determine whether the data from the switchshow command includes slot numbers
|
90
|
+
offset = switchshow_data.grep(/media.*speed.*state/i)[0] =~ /slot/i ? 1 : 0
|
91
|
+
|
92
|
+
switch_ports = switchshow_data.join("\n").split(/\=+/).last.strip.split(/\n/) unless switchshow_data.empty?
|
93
|
+
|
94
|
+
switch_ports.each do |switch_port|
|
95
|
+
switch_port = switch_port.strip.gsub(/\s+/, ' ').split
|
96
|
+
|
97
|
+
h = network_interface_template
|
98
|
+
|
99
|
+
port_id = offset == 1 ? switch_port[1] + '/' + switch_port[2] : switch_port[1]
|
100
|
+
|
101
|
+
portshow_data = @connector.values_at("portshow #{port_id}")
|
102
|
+
|
103
|
+
h[:model] = 'Unknown Fibre Adapter'
|
104
|
+
h[:name] = 'fc' + port_id
|
105
|
+
h[:port_wwn] = portshow_data.grep(/portwwn\:/i)[0].split.last.upcase
|
106
|
+
|
107
|
+
h[:type] = 'fibre'
|
108
|
+
h[:status] = switch_port[5 + offset] =~ /online/i ? 'up' : 'down'
|
109
|
+
h[:vendor] = VENDOR_BROCADE
|
110
|
+
|
111
|
+
if h[:status] == 'up'
|
112
|
+
speed = switch_port[4 + offset]
|
113
|
+
h[:auto_negotiate] = true if speed =~ /^N/
|
114
|
+
h[:current_speed_mbps] = speed.scan(/\d+/).join.to_i * 1000
|
115
|
+
|
116
|
+
remote_wwns = portshow_data.join("\n").extract(/portWwn of device\(s\) connected\:(.*)Distance/im).strip.split(/\n/)
|
117
|
+
|
118
|
+
if switch_port.join =~ /upstream/i || remote_wwns.count > 1
|
119
|
+
h[:is_uplink] = true
|
120
|
+
elsif remote_wwns.count == 1
|
121
|
+
h[:remote_wwn] = remote_wwns[0].strip
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
@network_interfaces << h
|
126
|
+
end
|
127
|
+
|
128
|
+
@network_interfaces
|
129
|
+
end
|
130
|
+
|
131
|
+
def get_operating_system
|
132
|
+
super
|
133
|
+
|
134
|
+
@operating_system[:kernel] = version_data.grep(/kernel/i)[0].after_colon
|
135
|
+
@operating_system[:name] = 'Brocade Fabric OS'
|
136
|
+
@operating_system[:version] = version_data.grep(/fabric os/i)[0].after_colon.delete('v')
|
137
|
+
|
138
|
+
@operating_system
|
139
|
+
end
|
140
|
+
|
141
|
+
def get_running_processes; super; end
|
142
|
+
|
143
|
+
end
|
144
|
+
end; end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'boris/profilers/cisco_ios_core'
|
2
|
+
|
3
|
+
module Boris; module Profilers
|
4
|
+
class IOS12 < CiscoIOSCore
|
5
|
+
|
6
|
+
def self.matches_target?(connector)
|
7
|
+
version = connector.values_at('show version | include (Version|ROM)')
|
8
|
+
return true if version[0] =~ /cisco ios.*version 12/i && version.join =~ /ROM:\s+12/i
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_operating_system
|
12
|
+
super
|
13
|
+
|
14
|
+
@operating_system[:name] = 'Cisco IOS'
|
15
|
+
@operating_system[:version] = version_data[0].extract(/version (.*),/i)
|
16
|
+
|
17
|
+
@operating_system
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end; end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'boris/profilers/cisco_nxos_core'
|
2
|
+
|
3
|
+
module Boris; module Profilers
|
4
|
+
class NXOS5 < CiscoNXOSCore
|
5
|
+
|
6
|
+
def self.matches_target?(connector)
|
7
|
+
return true if connector.value_at("show version | grep -i 'system version'") =~ /version\: 5/i
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end; end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'boris/profiler_core'
|
2
|
+
|
3
|
+
module Boris; module Profilers
|
4
|
+
class CiscoIOSCore
|
5
|
+
include ProfilerCore
|
6
|
+
|
7
|
+
attr_reader :version_data
|
8
|
+
|
9
|
+
def self.connection_type
|
10
|
+
Boris::SSHConnector
|
11
|
+
end
|
12
|
+
|
13
|
+
def version_data
|
14
|
+
@version_data ||= @connector.values_at('show version | include (Version|ROM|uptime|CPU|bytes of memory)')
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_file_systems; super; end
|
18
|
+
|
19
|
+
def get_hardware
|
20
|
+
super
|
21
|
+
|
22
|
+
cpu_data = version_data.grep(/cpu/i)[0]
|
23
|
+
|
24
|
+
@hardware[:cpu_model] = cpu_data.extract(/\s*(\w+) CPU/)
|
25
|
+
@hardware[:cpu_physical_count] = 1
|
26
|
+
|
27
|
+
cpu_speed = cpu_data.extract(/CPU at (\d+(?=[ghz|mhz]))/i).to_i
|
28
|
+
|
29
|
+
@hardware[:cpu_speed_mhz] = cpu_data =~ /ghz/i ? cpu_speed * 1000 : cpu_speed
|
30
|
+
@hardware[:firmware_version] = version_data.join("\n").extract(/ROM: (.+)/i)
|
31
|
+
|
32
|
+
hardware_data = @connector.values_at('show idprom chassis | include (Product|Serial Number)')
|
33
|
+
|
34
|
+
@hardware[:model] = hardware_data.grep(/product/i)[0].value_after_character('=')
|
35
|
+
@hardware[:memory_installed_mb] = version_data.grep(/memory/i)[0].extract(/(\d+)K bytes/).to_i / 1024
|
36
|
+
@hardware[:serial] = hardware_data.grep(/serial number/i)[0].value_after_character('=')
|
37
|
+
@hardware[:vendor] = VENDOR_CISCO
|
38
|
+
|
39
|
+
@hardware
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_hosted_shares; super; end
|
43
|
+
def get_installed_applications; super; end
|
44
|
+
def get_installed_patches; super; end
|
45
|
+
def get_installed_services; super; end
|
46
|
+
def get_local_user_groups; super; end
|
47
|
+
|
48
|
+
def get_network_id
|
49
|
+
super
|
50
|
+
|
51
|
+
@network_id[:hostname] = version_data.grep(/uptime is/)[0].strip.extract(/^(.+) uptime is/i)
|
52
|
+
|
53
|
+
@network_id
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_network_interfaces
|
57
|
+
super
|
58
|
+
|
59
|
+
interface_data = @connector.values_at('show interface | include (protocol|Hardware|Internet|MTU|duplex|Members)').join("\n").split(/^(?=\w)/)
|
60
|
+
|
61
|
+
physical_uplink_ports = []
|
62
|
+
|
63
|
+
interface_data.each do |interface|
|
64
|
+
|
65
|
+
# don't bother with LOM ports
|
66
|
+
next if interface =~ /out of band/i
|
67
|
+
|
68
|
+
h = network_interface_template
|
69
|
+
|
70
|
+
interface = interface.split(/\n/)
|
71
|
+
|
72
|
+
status = interface.grep(/protocol/)[0]
|
73
|
+
hardware = interface.grep(/hardware/i)[0]
|
74
|
+
ip = interface.grep(/internet address/i)[0]
|
75
|
+
mtu = interface.grep(/mtu/i)[0]
|
76
|
+
|
77
|
+
|
78
|
+
h[:mac_address] = hardware.extract(/\(bia (.+)\)/i).delete('.').scan(/../).join(':').upcase
|
79
|
+
h[:mtu] = mtu.extract(/mtu (\d+) bytes/i).to_i
|
80
|
+
h[:model] = hardware.extract(/hardware is (.+),/i)
|
81
|
+
|
82
|
+
h[:name] = status.split[0]
|
83
|
+
|
84
|
+
if h[:name] =~ /port\-*channel/i
|
85
|
+
physical_uplink_ports.concat(interface.grep(/members in this channel/i)[0].after_colon.strip.split)
|
86
|
+
end
|
87
|
+
|
88
|
+
h[:status] = status =~ /down/i ? 'down' : 'up'
|
89
|
+
h[:type] = 'ethernet'
|
90
|
+
h[:vendor] = VENDOR_CISCO
|
91
|
+
|
92
|
+
connection = interface.grep(/duplex/i)[0]
|
93
|
+
|
94
|
+
if connection && h[:status] == 'up'
|
95
|
+
connection = connection.split(',')
|
96
|
+
h[:auto_negotiate] = true if connection[2] =~ /link type is auto/i
|
97
|
+
|
98
|
+
if connection[1] =~ /mb|gb/i
|
99
|
+
speed = connection[1].extract(/(\d+)/i).to_i
|
100
|
+
h[:current_speed_mbps] = connection[1] =~ /gb/i ? speed * 1000 : speed
|
101
|
+
end
|
102
|
+
|
103
|
+
h[:duplex] = connection[0].extract(/(\w+)-duplex/i).downcase
|
104
|
+
end
|
105
|
+
|
106
|
+
if ip
|
107
|
+
ip_data = ip.extract(/internet address is (.+)$/i).split(/\//)
|
108
|
+
|
109
|
+
ip_address = ip_data.first
|
110
|
+
subnet = NetAddr.i_to_ip(NetAddr.bits_to_mask(ip_data.last.to_i, NetAddr::CIDRv4))
|
111
|
+
|
112
|
+
h[:ip_addresses] << {:ip_address=>ip_address, :subnet=>subnet}
|
113
|
+
end
|
114
|
+
|
115
|
+
@network_interfaces << h
|
116
|
+
end
|
117
|
+
|
118
|
+
mac_address_table = @connector.values_at('show mac-address-table')
|
119
|
+
|
120
|
+
@network_interfaces.each do |h|
|
121
|
+
short_name = h[:name].sub(h[:name].extract(/^..(\D+)/), '')
|
122
|
+
|
123
|
+
remote_mac_addresses = mac_address_table.grep(/#{h[:name]}/)
|
124
|
+
|
125
|
+
if physical_uplink_ports.include?(short_name) || remote_mac_addresses.count > 1
|
126
|
+
h[:is_uplink] = true
|
127
|
+
elsif remote_mac_addresses.any?
|
128
|
+
h[:remote_mac_address] = remote_mac_addresses[0].split[1].delete('.').scan(/../).join(':').upcase
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
@network_interfaces
|
133
|
+
end
|
134
|
+
|
135
|
+
def get_operating_system; super; end
|
136
|
+
|
137
|
+
end
|
138
|
+
end; end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'boris/profiler_core'
|
2
|
+
|
3
|
+
module Boris; module Profilers
|
4
|
+
class CiscoNXOSCore
|
5
|
+
include ProfilerCore
|
6
|
+
|
7
|
+
attr_reader :version_data
|
8
|
+
|
9
|
+
def self.connection_type
|
10
|
+
Boris::SSHConnector
|
11
|
+
end
|
12
|
+
|
13
|
+
def version_data
|
14
|
+
@version_data ||= @connector.values_at('show version | grep -i "bios:\|system version\|chassis\|memory\|device"')
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_file_systems; super; end
|
18
|
+
|
19
|
+
def get_hardware
|
20
|
+
super
|
21
|
+
|
22
|
+
cpu_data = version_data.grep(/cpu/i)[0]
|
23
|
+
|
24
|
+
@hardware[:cpu_model] = cpu_data.extract(/\s*(.*)\s*with/).strip
|
25
|
+
@hardware[:cpu_physical_count] = 1
|
26
|
+
|
27
|
+
@hardware[:firmware_version] = version_data.join("\n").extract(/BIOS\:\s*version\s*(.+)/i)
|
28
|
+
|
29
|
+
hardware_data = @connector.values_at('show sprom backplane | grep Product\|Serial')
|
30
|
+
|
31
|
+
@hardware[:model] = hardware_data.grep(/product number/i)[0].after_colon
|
32
|
+
@hardware[:memory_installed_mb] = cpu_data.extract(/(\d+) kb/i).to_i / 1024
|
33
|
+
@hardware[:serial] = hardware_data.grep(/serial number/i)[0].after_colon
|
34
|
+
@hardware[:vendor] = VENDOR_CISCO
|
35
|
+
|
36
|
+
@hardware
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_hosted_shares; super; end
|
40
|
+
def get_installed_applications; super; end
|
41
|
+
def get_installed_patches; super; end
|
42
|
+
def get_installed_services; super; end
|
43
|
+
def get_local_user_groups; super; end
|
44
|
+
|
45
|
+
def get_network_id
|
46
|
+
super
|
47
|
+
|
48
|
+
@network_id[:hostname] = version_data.grep(/device name/i)[0].after_colon
|
49
|
+
|
50
|
+
@network_id
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_network_interfaces
|
54
|
+
super
|
55
|
+
|
56
|
+
interface_data = @connector.values_at('show interface | grep "is up\|is down\|Hardware\|Internet\|MTU\|duplex\|Members"').join("\n").split(/^(?=\w)/)
|
57
|
+
|
58
|
+
physical_uplink_ports = []
|
59
|
+
|
60
|
+
interface_data.each do |interface|
|
61
|
+
|
62
|
+
# don't bother with LOM ports
|
63
|
+
next if interface =~ /mgmt\d/i
|
64
|
+
|
65
|
+
h = network_interface_template
|
66
|
+
|
67
|
+
interface = interface.split(/\n/)
|
68
|
+
|
69
|
+
status = interface.grep(/is up|is down/)[0]
|
70
|
+
hardware = interface.grep(/hardware/i)[0].gsub(': ', ' is ')
|
71
|
+
ip = interface.grep(/internet address/i)[0]
|
72
|
+
mtu = interface.grep(/mtu/i)[0]
|
73
|
+
|
74
|
+
h[:mac_address] = hardware.extract(/address is\s*(.{4}\..{4}\..{4})/i).delete('.').scan(/../).join(':').upcase
|
75
|
+
h[:mtu] = mtu.extract(/mtu (\d+) bytes/i).to_i
|
76
|
+
h[:model] = hardware.extract(/hardware is (.+),/i)
|
77
|
+
|
78
|
+
h[:name] = status.split[0]
|
79
|
+
|
80
|
+
if h[:name] =~ /port\-*channel/i
|
81
|
+
physical_uplink_ports.concat(interface.grep(/members in this channel/i)[0].after_colon.strip.split)
|
82
|
+
h[:type] = 'port-channel'
|
83
|
+
else
|
84
|
+
h[:type] = 'ethernet'
|
85
|
+
end
|
86
|
+
|
87
|
+
h[:status] = status =~ /down/i ? 'down' : 'up'
|
88
|
+
h[:vendor] = VENDOR_CISCO
|
89
|
+
|
90
|
+
connection = interface.grep(/duplex/i)[0]
|
91
|
+
|
92
|
+
if connection && h[:status] == 'up'
|
93
|
+
connection = connection.split(',')
|
94
|
+
h[:auto_negotiate] = true if connection[2] =~ /link type is auto/i
|
95
|
+
|
96
|
+
if connection[1] =~ /mb|gb/i
|
97
|
+
speed = connection[1].extract(/(\d+)/i).to_i
|
98
|
+
h[:current_speed_mbps] = connection[1] =~ /gb/i ? speed * 1000 : speed
|
99
|
+
end
|
100
|
+
|
101
|
+
h[:duplex] = connection[0].extract(/(\w+)-duplex/i).downcase
|
102
|
+
end
|
103
|
+
|
104
|
+
if ip
|
105
|
+
ip_data = ip.extract(/internet address is (.+)$/i).split(/\//)
|
106
|
+
|
107
|
+
ip_address = ip_data.first
|
108
|
+
subnet = NetAddr.i_to_ip(NetAddr.bits_to_mask(ip_data.last.to_i, NetAddr::CIDRv4))
|
109
|
+
|
110
|
+
h[:ip_addresses] << {:ip_address=>ip_address, :subnet=>subnet}
|
111
|
+
end
|
112
|
+
|
113
|
+
@network_interfaces << h
|
114
|
+
end
|
115
|
+
|
116
|
+
mac_address_table = @connector.values_at('show mac-address-table')
|
117
|
+
|
118
|
+
@network_interfaces.each do |h|
|
119
|
+
short_name = if h[:name] =~ /ethernet/i
|
120
|
+
h[:name].sub(h[:name].extract(/^...(\D+)/), '')
|
121
|
+
else
|
122
|
+
h[:name].sub(h[:name].extract(/^..(\D+)/), '')
|
123
|
+
end
|
124
|
+
|
125
|
+
remote_mac_addresses = mac_address_table.grep(/#{short_name}/i)
|
126
|
+
|
127
|
+
if physical_uplink_ports.include?(short_name) || remote_mac_addresses.count > 1
|
128
|
+
h[:is_uplink] = true
|
129
|
+
elsif remote_mac_addresses.any?
|
130
|
+
h[:remote_mac_address] = remote_mac_addresses[0].split[2].delete('.').scan(/../).join(':').upcase
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
@network_interfaces
|
135
|
+
end
|
136
|
+
|
137
|
+
def get_operating_system
|
138
|
+
super
|
139
|
+
|
140
|
+
@operating_system[:kernel] = version_data.grep(/system version/i)[0].after_colon
|
141
|
+
@operating_system[:name] = 'Cisco Nexus Operating System'
|
142
|
+
@operating_system[:version] = @operating_system[:kernel].split('(')[0]
|
143
|
+
|
144
|
+
@operating_system
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
end; end
|