Skip to content

find nic_name automatically if misspecified #29

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: development
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 24 additions & 5 deletions hpbandster/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,30 @@



def nic_name_to_host(nic_name):
""" translates the name of a network card into a valid host name"""
from netifaces import ifaddresses, AF_INET
host = ifaddresses(nic_name).setdefault(AF_INET, [{'addr': 'No IP addr'}] )[0]['addr']
return(host)
def nic_name_to_host(nic_name=None):
""" translates the name of a network card into a valid host name"""
from netifaces import ifaddresses, AF_INET

def get_nic_name_from_system():
import re
import subprocess
process = subprocess.Popen("ip route get 8.8.8.8".split(),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this assume that the node has internet access? And it's not really portable as it requires ip to exist.
And pinging a Google DNS is not the most reliable way to figure out the network interface.

stdout=subprocess.PIPE)
output = process.stdout.read().decode()
s = re.search(r'dev\s*(\S+)', output)
return s.group(1)

# if the network card name is not a valid one an ecxeption will be raised
# and the method get_nic_name_from_system will discover a valid card name
try:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the sentiment of your functionality, but I assumed that most users would call the nic_name_to_host function and catch the exception themselves in case they need to try more nic names because they are different across the cluster (which is usually not the case).

host = ifaddresses(nic_name).setdefault(AF_INET, [{'addr': 'No IP addr'}] )[0]['addr']
# ValueError if the nic_name is no correct
# TypeError is nic_name is None
except (ValueError, TypeError) as e:
nic_name = get_nic_name_from_system()
host = ifaddresses(nic_name).setdefault(AF_INET, [{'addr': 'No IP addr'}] )[0]['addr']

return(host)



Expand Down