How come my hostname isn't set to the FQDN with cloud-init when using `prefer_fqdn_over_hostname`?
-
https://cloudinit.readthedocs.io/en/latest/topics/modules.html#set-hostname ,
If both
fqdn
andhostname
are set, it is distro dependent whetherhostname
orfqdn
is used, unless theprefer_fqdn_over_hostname
option istrue
andfqdn
is set it will force the use of FQDN in all distros, and if false then it will force thehostname
use.In my
cloud-init.cfg
I have,hostname: "host-10-2-65-89" fqdn: "host-10-2-65-89.openstack.build." prefer_fqdn_over_hostname: true
But when I run this my hostname is set to
host-10-2-65-89
. Here is the log, and you can see it explicitly sayshost-10-2-65-89.openstack.build.
249 - cc_set_hostname.py[DEBUG]: Setting the hostname to host-10-2-65-89.openstack.build. (host-10-2-65-89) 250 - util.py[DEBUG]: Reading from /etc/hostname (quiet=False) 250 - util.py[DEBUG]: Read 7 bytes from /etc/hostname 250 - util.py[DEBUG]: Writing to /etc/hostname - wb: [644] 16 bytes 250 - __init__.py[DEBUG]: Non-persistently setting the system hostname to host-10-2-65-89 250 - subp.py[DEBUG]: Running command ['hostname', 'host-10-2-65-89'] with allowed return codes [0] (shell=False, capture=True) 256 - atomic_helper.py[DEBUG]: Atomically writing to file /var/lib/cloud/data/set-hostname (via temporary file /var/lib/cloud/data/tmpaxqv667c) - w: [644] 80 bytes/chars
The contents of
/var/lib/cloud/data/set-hostname
{ "fqdn": "host-10-2-65-89.openstack.build.", "hostname": "host-10-2-65-89" }
The contents of
/var/lib/cloud/data/previous-hostname
host-10-2-65-89.openstack.build.
I'm using
Cloud-init v. 21.4-0ubuntu1~20.04.1
I've tried deleting all but the FQDN and it still doesn't set the
/etc/hostname
to the fqdn.
-
https://bugs.launchpad.net/cloud-init/+bug/1966533
I was getting silent failures because the hostname was
host-10-2-65-89.openstack.build.
Instead of
host-10-2-65-89.openstack.build
What actually happens is,
$ sudo hostname host-10-2-65-89.openstack.build. hostname: the specified hostname is invalid
Background, what I was actually doing was using Terraform,
fqdn: "${fqdn}"
And then setting the
fqdn
like this,fqdn = openstack_networking_port_v2.port_company.dns_assignment[0].fqdn
But the problem is the terraform was return the actual FQDN,
host-10-2-65-89.openstack.build.
But you can't provide that to hostname. My solution was to remove the dot (
.
) with https://www.terraform.io/language/functions/trimsuffixfqdn = trimsuffix( openstack_networking_port_v2.port_company.dns_assignment[0].fqdn, "." )