[Libvirt-cim] [PATCH] live.full_hostname: Adjust mechanism to get FQDN
John Ferlan
jferlan at redhat.com
Thu Nov 21 19:59:21 UTC 2013
On 11/20/2013 02:19 PM, Viktor Mihajlovski wrote:
> On 11/19/2013 02:25 PM, John Ferlan wrote:
>> Using just socket.gethostbyaddr(socket.gethostname())[0] caused some
>> issues recently in one of my DHCP testing environments. Breaking down
>> the calls showed the following:
>>
>>>>> socket.gethostname()
>> 'dhcp-186-211.bos.redhat.com'
>>>>> socket.gethostbyname("dhcp-186-211.bos.redhat.com")
>> '10.16.186.211'
>>>>> socket.gethostbyaddr(socket.gethostname())[0]
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> socket.herror: [Errno 1] Unknown host
>>
>> While just a socket.gethostname() could have worked, using the
>> socket.getfqdn() seemed to be safer just in case.
>> ---
>> lib/VirtLib/live.py | 7 +++++--
>> 1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/VirtLib/live.py b/lib/VirtLib/live.py
>> index c929e71..6a10474 100644
>> --- a/lib/VirtLib/live.py
>> +++ b/lib/VirtLib/live.py
>> @@ -100,6 +100,9 @@ def hostname(server):
>> return out
>>
>> def full_hostname(server):
>> - """To return the fully qualifiec domain name(FQDN) of the system"""
>> + """To return the fully qualified domain name(FQDN) of the system"""
>>
>> - return socket.gethostbyaddr(socket.gethostname())[0]
>> + if socket.getfqdn().find('.') >= 0:
>> + return socket.getfqdn()
>> + else:
>> + return socket.gethostbyaddr(socket.gethostname())[0]
>>
>
> The server parameter seems to be entirely superfluous,
> which makes me believe that the original intention might have
> been something like (roughly)
>
> return socket.gethostbyaddr(server)
>
> which by itself will probably not solve the reverse lookup
> issue you seem to have experienced
>
I think it was more of a cut-n-copy from hostname(server) just above it...
I did some digging, the function does show up in the initial git entry
for all of libvirt-cim, but none of the callers were using it. They
were using live.hostname() passing options.ip. Then commit id '7e998246'
changed the 3 callers to use full_hostname().
So how about this instead:
if socket.getfqdn().find('.') >= 0:
return socket.getfqdn()
elif socket.gethostname().find('.') >= 0:
return socket.gethostname()
else:
return socket.gethostbyaddr(server)[1][0]
I get the following:
server=localhost
socket.getfqdn()=dhcp-186-211.bos.redhat.com
socket.gethostname()=dhcp-186-211.bos.redhat.com
socket.gethostbyaddr(server)[1][0]=localhost.localdomain
>From a python prompt:
>>> import socket
>>> socket.gethostbyaddr("localhost")
('localhost', ['localhost.localdomain', 'localhost6',
'localhost6.localdomain6'], ['::1'])
>>>
Hence the [1][0] to get a FQDN rather than short name or the unexpected
tuple passed back to the caller...
All 3 tests will pass with the change in my configuration. I think one
of the keys is whether the name is found in /etc/hosts or not. Since I
use DHCP that won't happen.
John
More information about the Libvirt-cim
mailing list