class Facter::Resolvers::Linux::Networking
Private Class Methods
add_binding_if_missing(interface_data, binding_key, route)
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 102 def add_binding_if_missing(interface_data, binding_key, route) interface_binding = interface_data[binding_key] if interface_binding.nil? interface_data[binding_key] = [{ address: route[:ip] }] elsif interface_binding.none? { |binding| binding[:address] == route[:ip] } interface_binding << { address: route[:ip] } end end
add_flags()
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 76 def add_flags flags = Facter::Util::Linux::IfInet6.read_flags flags.each_pair do |iface, ips| next unless @fact_list[:interfaces].key?(iface) ips.each_pair do |ip, ip_flags| next unless @fact_list[:interfaces][iface].key?(:bindings6) @fact_list[:interfaces][iface][:bindings6].each do |binding| next unless binding[:address] == ip binding[:flags] = ip_flags end end end end
add_info_from_routing_table()
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 70 def add_info_from_routing_table routes4, routes6 = Facter::Util::Linux::RoutingTable.read_routing_table(log) compare_ips(routes4, :bindings) compare_ips(routes6, :bindings6) end
add_info_from_socket_reader()
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 27 def add_info_from_socket_reader @fact_list[:interfaces] = Facter::Util::Linux::SocketParser.retrieve_interfaces(log) mtu_and_indexes = interfaces_mtu_and_index @fact_list[:interfaces].keys.each do |interface_name| mtu(interface_name, mtu_and_indexes) dhcp(interface_name, mtu_and_indexes) @log.debug("Found interface #{interface_name} with #{@fact_list[:interfaces][interface_name]}") end end
compare_ips(routes, binding_key)
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 93 def compare_ips(routes, binding_key) routes.each do |route| next unless @fact_list[:interfaces].key?(route[:interface]) interface_data = @fact_list[:interfaces][route[:interface]] add_binding_if_missing(interface_data, binding_key, route) end end
dhcp(interface_name, mtu_and_indexes)
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 65 def dhcp(interface_name, mtu_and_indexes) dhcp = Facter::Util::Linux::Dhcp.dhcp(interface_name, mtu_and_indexes.dig(interface_name, :index), log) @fact_list[:interfaces][interface_name][:dhcp] = dhcp unless dhcp.nil? end
interfaces_mtu_and_index()
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 39 def interfaces_mtu_and_index mtu_and_indexes = {} output = Facter::Core::Execution.execute('ip link show', logger: log) output.each_line do |line| next unless line.include?('mtu') parse_ip_command_line(line, mtu_and_indexes) end log.debug("Associated MTU and index in ip command: #{mtu_and_indexes}") mtu_and_indexes end
mtu(interface_name, mtu_and_indexes)
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 60 def mtu(interface_name, mtu_and_indexes) mtu = mtu_and_indexes.dig(interface_name, :mtu) @fact_list[:interfaces][interface_name][:mtu] = mtu unless mtu.nil? end
parse_ip_command_line(line, mtu_and_indexes)
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 51 def parse_ip_command_line(line, mtu_and_indexes) mtu = line.match(/mtu (\d+)/)&.captures&.first&.to_i index_tokens = line.split(':') index = index_tokens[0].strip # vlans are displayed as <vlan_name>@<physical_interface> name = index_tokens[1].split('@').first.strip mtu_and_indexes[name] = { index: index, mtu: mtu } end
post_resolve(fact_name, _options)
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 12 def post_resolve(fact_name, _options) @fact_list.fetch(fact_name) { retrieve_network_info(fact_name) } @fact_list[fact_name] end
retrieve_network_info(fact_name)
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 18 def retrieve_network_info(fact_name) add_info_from_socket_reader add_info_from_routing_table retrieve_primary_interface Facter::Util::Resolvers::Networking.expand_main_bindings(@fact_list) add_flags @fact_list[fact_name] end
retrieve_primary_interface()
click to toggle source
# File lib/facter/resolvers/linux/networking.rb, line 112 def retrieve_primary_interface primary_helper = Facter::Util::Resolvers::Networking::PrimaryInterface primary_interface = primary_helper.read_from_proc_route primary_interface ||= primary_helper.read_from_ip_route primary_interface ||= primary_helper.find_in_interfaces(@fact_list[:interfaces]) @fact_list[:primary_interface] = primary_interface end