diff options
author | Cooper Lees <me@cooperlees.com> | 2020-07-01 17:00:54 -0700 |
---|---|---|
committer | Cooper Lees <me@cooperlees.com> | 2020-07-01 17:02:43 -0700 |
commit | 227fb354152aeade1e13b90573b6c8c55f65b8ca (patch) | |
tree | a834cc402ce0924b537d644835cda757e20435cd | |
parent | 8028951abb141fef97a9b2ddc5e2120f63fbc16a (diff) | |
download | ohai-227fb354152aeade1e13b90573b6c8c55f65b8ca.tar.gz |
Handle IP to int conversion for inet + inet6
- IPv4 can have IPv6 next hops, so we could use the wrong `.to_u*` method
- Lets try both before throwing on int conversions for sorting purposes
Addresses more for #1474
Signed-off-by: Cooper Lees <me@cooperlees.com>
-rw-r--r-- | lib/ohai/plugins/network.rb | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/ohai/plugins/network.rb b/lib/ohai/plugins/network.rb index 03003eb2..1b838047 100644 --- a/lib/ohai/plugins/network.rb +++ b/lib/ohai/plugins/network.rb @@ -25,6 +25,15 @@ Ohai.plugin(:NetworkAddresses) do depends "network/interfaces" + # Try to u32 an IPv4 and fallback to u128 if it fails before throwing + def int_an_ip(ipaddress) + begin + return ipaddress.to_u32 + rescue NoMethodError + return ipaddress.to_u128 + end + end + # from interface data create array of hashes with ipaddress, scope, and iface # sorted by scope, prefixlen and then ipaddress where longest prefixes first def sorted_ips(family = "inet") @@ -54,7 +63,7 @@ Ohai.plugin(:NetworkAddresses) do ipaddresses.sort_by do |v| [ ( scope_prio.index(v[:scope]) || 999999 ), 128 - v[:ipaddress].prefix.to_i, - ( family == "inet" ? v[:ipaddress].to_u32 : v[:ipaddress].to_u128 ), + int_an_ip(v[:ipaddress]) ] end end |