class Inspec::Resources::LinuxInterface
Public Instance Methods
interface_info(iface)
click to toggle source
# File lib/inspec/resources/interface.rb, line 157 def interface_info(iface) # will return "[mtu]\n1500\n[type]\n1" cmd = inspec.command("find /sys/class/net/#{iface}/ -maxdepth 1 -type f -exec sh -c 'echo \"[$(basename {})]\"; cat {} || echo -n' \\;") return nil if cmd.exit_status.to_i != 0 # parse values, we only recieve values, therefore we threat them as keys params = SimpleConfig.new(cmd.stdout.chomp).params # abort if we got an empty result-set return nil if params.empty? # parse state state = false if params.key?("operstate") operstate, _value = params["operstate"].first state = operstate == "up" end # parse speed speed = nil if params.key?("speed") speed, _value = params["speed"].first speed = convert_to_i(speed) end family_addresses = addresses(iface) { name: iface, up: state, speed: speed, ipv4_addresses: family_addresses["inet"], ipv6_addresses: family_addresses["inet6"], } end
Private Instance Methods
addresses(iface)
click to toggle source
# File lib/inspec/resources/interface.rb, line 194 def addresses(iface) addrs_by_family = { "inet6" => [], "inet" => [] } [4, 6].each do |v| cmd = inspec.command("/sbin/ip -br -#{v} address show dev #{iface}") next unless cmd.exit_status.to_i == 0 family = v == 6 ? "inet6" : "inet" cmd.stdout.each_line do |line| _dev, _state, *addrs = line.split(/\s+/) addrs_by_family[family] = addrs end end addrs_by_family end