Wrong EC2 hostname set if DHCP Options Set has multiple domain-name

Bug #1874527 reported by SC
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
cloud-init
Expired
Low
Unassigned

Bug Description

Cloud Provider: AWS.
Cloud-init v. 19.3-2.amzn2.
Config says system_info: distro: amazon

Per https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html the VPC DHCP Options set can have a domain-name value with multiple domain names separated by spaces. However, if using this approach, cloud-init sets an incorrect hostname. It appears to concatenate the unqualified host name to the Options Set host names without spaces, and truncating to a certain number of characters.

This is with "set-hostname" and "update-hostname" modules enabled, but no other relevant cloud-init config.

For example, if your unqualified hostname is ip-10-30-10-155 and your DHCP Options Set domain-name is "foo.bar.example.com baz.bat.example.com" you might get an incorrect hostname such as "ip-10-30-10-155.foo.bar.example.combaz.bat.ex"

This problem appears to be due to misinterpretation of the output of the EC2 metadata service for "local-hostname", which responds with output similar to above, but with spaces retained and no truncating, for example: "ip-10-30-10-155.foo.bar.example.com baz.bat.example.com"

The cloud-init log output also mentions this problem, for example you might have logs which look like:

Mar 18 00:31:33 cloud-init[3825]: cc_set_hostname.py[DEBUG]: Setting the hostname to ip-10-30-10-155.us-west-2.i.test.abcdefg.example.com i.test.abcdefg.example.com
us-west-2.test.abcdefg.example.com test.abcdefg.example.com us-west-2.compute.internal (ip-10-30-10-155)
Mar 18 00:31:33 cloud-init[3825]: util.py[DEBUG]: Running command ['hostnamectl', 'set-hostname', 'ip-10-30-10-155.us-west-2.i.test.abcdefg.example.com i.test.abcdefg.example.com us-west-2.test.abcdefg.example.com test.abcdefg.example.com us-west-2.compute.internal'] with allowed return codes [0] (shell=False, capture=True)
Mar 18 00:31:33 cloud-init[3825]: __init__.py[DEBUG]: Non-persistently setting the system hostname to ip-10-30-10-155.us-west-2.i.test.abcdefg.example.com i.test.abcdefg.example.com us-west-2.test.abcdefg.example.com test.abcdefg.example.com us-west-2.compute.internal
Mar 18 00:31:33 cloud-init[3825]: util.py[DEBUG]: Running command ['hostname', 'ip-10-30-10-155.us-west-2.i.test.abcdefg.example.com i.test.abcdefg.example.com us-we
st-2.test.abcdefg.example.com test.abcdefg.example.com us-west-2.compute.internal'] with allowed return codes [0] (shell=False, capture=True)
Mar 18 00:31:33 cloud-init[3825]: util.py[WARNING]: Failed to non-persistently adjust the system hostname to ip-10-30-10-155.us-west-2.i.test.abcdefg.example.com i.te
st.abcdefg.example.com us-west-2.test.abcdefg.example.com test.abcdefg.example.com us-west-2.compute.internal
Mar 18 00:31:33 cloud-init[3825]: util.py[DEBUG]: Failed to non-persistently adjust the system hostname to ip-10-30-10-155.us-west-2.i.test.abcdefg.example.com i.test.abcdefg.example.com us-west-2.test.abcdefg.example.com test.abcdefg.example.com us-west-2.compute.internal
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/cloudinit/distros/__init__.py", line 230, in _apply_hostname
    util.subp(['hostname', hostname])
  File "/usr/lib/python2.7/site-packages/cloudinit/util.py", line 2105, in subp
    cmd=args)
ProcessExecutionError: Unexpected error while running command.
Command: ['hostname', 'ip-10-30-10-155.us-west-2.i.test.abcdefg.example.com i.test.abcdefg.example.com us-west-2.test.abcdefg.example.com test.abcdefg.example.com us-west-2.compute.internal']
Exit code: 1
Reason: -
Stdout:
Stderr: hostname: the specified hostname is invalid

SC (rehevkor5)
description: updated
SC (rehevkor5)
description: updated
Revision history for this message
Paride Legovini (paride) wrote :

Thanks for taking the time to report this bug. Multiple domain names are currently not supported; the case falls in the warning given in the page you pointed to:

---
Some Linux operating systems accept multiple domain names separated by spaces. However, other Linux operating systems and Windows treat the value as a single domain, which results in unexpected behavior.
---

I'm not sure of what the Linux distributions supporting multiple domain names are doing; I imagine the first one is expected to become the true hostname of the instance, while all of them have to be added at least to /etc/hosts. In any case I agree it is something we should support.

Changed in cloud-init:
status: New → Triaged
importance: Undecided → Low
Revision history for this message
James Falcon (falcojr) wrote :
Changed in cloud-init:
status: Triaged → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.