From: Aaron Klingaman Date: Thu, 2 Jun 2005 22:06:17 +0000 (+0000) Subject: send a nice message to tech contacts if the node hostname resolution is X-Git-Tag: BOOTCD_V_3_1~8 X-Git-Url: http://git.onelab.eu/?p=bootmanager.git;a=commitdiff_plain;h=2dcd5f4d603a2195c6c7c6cbcc788ef228f1d805 send a nice message to tech contacts if the node hostname resolution is incorrect or doesn't work --- diff --git a/source/notify_messages.py b/source/notify_messages.py index b33dabd..71df874 100644 --- a/source/notify_messages.py +++ b/source/notify_messages.py @@ -9,3 +9,4 @@ MSG_INSUFFICIENT_MEMORY= "insufficientmemory" MSG_NO_NODE_CONFIG_FILE= "noconfig" MSG_AUTH_FAIL= "authfail" MSG_NODE_NOT_INSTALLED= "notinstalled" +MSG_HOSTNAME_NOT_RESOLVE= "hostnamenotresolve" diff --git a/source/steps/ReadNodeConfiguration.py b/source/steps/ReadNodeConfiguration.py index b1f9281..c511f58 100644 --- a/source/steps/ReadNodeConfiguration.py +++ b/source/steps/ReadNodeConfiguration.py @@ -47,6 +47,10 @@ import socket import utils from Exceptions import * import BootServerRequest +import BootAPI +import StartDebug +import notify_messages +import UpdateBootStateWithPLC # two possible names of the configuration files @@ -516,29 +520,50 @@ def __parse_configuration_file( vars, log, file_contents ): # is needed for future api calls. # at the same time, we can check to make sure that the hostname - # in the configuration file matches the ip address. + # in the configuration file matches the ip address. if it fails + # notify the owners hostname= NETWORK_SETTINGS['hostname'] + "." + \ NETWORK_SETTINGS['domainname'] + # set to 0 if any part of the hostname resolution check fails + hostname_resolve_ok= 1 + + # set to 0 if the above fails, and, we are using dhcp in which + # case we don't know the ip of this machine (without having to + # parse ifconfig or something). In that case, we won't be able + # to make api calls, so printing a message to the screen will + # have to suffice. + can_make_api_call= 1 + log.write( "Checking that hostname %s resolves\n" % hostname ) + + # try a regular dns lookup first try: resolved_node_ip= socket.gethostbyname(hostname) except socket.gaierror, e: - raise BootManagerException, \ - "Configured node hostname does not resolve." + hostname_resolve_ok= 0 + if NETWORK_SETTINGS['method'] == "dhcp": - NETWORK_SETTINGS['ip']= resolved_node_ip - node_ip= resolved_node_ip + if hostname_resolve_ok: + NETWORK_SETTINGS['ip']= resolved_node_ip + node_ip= resolved_node_ip + else: + can_make_api_call= 0 else: node_ip= NETWORK_SETTINGS['ip'] - if node_ip != resolved_node_ip: - log.write( "Hostname %s does not resolve to %s, but %s:\n" % \ - (hostname,node_ip,resolved_node_ip) ) - else: - log.write( "Hostname %s resolves to %s:\n" % (hostname,node_ip) ) + # make sure the dns lookup matches what the configuration file says + if hostname_resolve_ok: + if node_ip != resolved_node_ip: + log.write( "Hostname %s does not resolve to %s, but %s:\n" % \ + (hostname,node_ip,resolved_node_ip) ) + hostname_resolve_ok= 0 + else: + log.write( "Hostname %s correctly resolves to %s:\n" % + (hostname,node_ip) ) + # 3.x cds, with a node_key on the floppy, can update their mac address # at plc, so get it here @@ -556,5 +581,32 @@ def __parse_configuration_file( vars, log, file_contents ): vars["NETWORK_SETTINGS"]= NETWORK_SETTINGS + + if not hostname_resolve_ok: + log.write( "Hostname does not resolve correctly, will not continue.\n" ) + + StartDebug.Run( vars, log ) + + if can_make_api_call: + log.write( "Notifying contacts of problem.\n" ) + + vars['BOOT_STATE']= 'dbg' + vars['STATE_CHANGE_NOTIFY']= 1 + vars['STATE_CHANGE_NOTIFY_MESSAGE']= \ + notify_messages.MSG_HOSTNAME_NOT_RESOLVE + + UpdateBootStateWithPLC.Run( vars, log ) + + log.write( "\n\n" ) + log.write( "The hostname and/or ip in the network configuration\n" ) + log.write( "file do not resolve and match.\n" ) + log.write( "Please make sure the hostname set in the network\n" ) + log.write( "configuration file resolves to the ip also specified\n" ) + log.write( "there.\n\n" ) + log.write( "Debug mode is being started on this cd. When the above\n" ) + log.write( "is corrected, reboot the machine to try again.\n" ) + + raise BootManagerException, \ + "Configured node hostname does not resolve." return 1