cloud-init主机名配置与实际输出不符问题咨询
问题:cloud-init设置主机名异常原因分析
环境与配置
虚拟机配置参数
hostname:redhat-kouvas-1500-localtest domain: test.local
Cloud Assembly中的cloud-config配置
cloudConfig: | #cloud-config preserve_hostname: false prefer_fqdn_over_hostname: false hostname: '${input.hostname}' fqdn: '${input.hostname}.${input.domain}'
实际执行结果
执行hostname命令输出
redhat-kouvas-1500-localtest log]# hostname redhat-kouvas-1500-localtest.test.local
查看/var/lib/cloud/data/set-hostname文件内容
{ "fqdn": "redhat-kouvas-1500-localtest.test.local", "hostname": "redhat-kouvas-1500-localtest" }
查看/var/lib/cloud/data/previous-hostname文件内容
redhat-kouvas-1500-localtest.test.local[root@redhat-kouvas-1500-localtest log]#
疑问
明明设置了prefer_fqdn_over_hostname: false,为何cloud-init最终将主机名设置为FQDN而非指定的短主机名?
cloud-init官方文档相关内容
cc_set_hostname模块说明
- 内部名称:cc_set_hostname
- 执行频率:每个实例仅执行一次
- 支持的发行版:所有
- 配置项说明:
- preserve_hostname:布尔值,设为true时不会修改主机名,默认值false
- hostname:字符串,要设置的短主机名
- fqdn:字符串,要设置的完全限定域名
- prefer_fqdn_over_hostname:布尔值,设为true时如果配置了fqdn则使用fqdn作为主机名;设为false时使用hostname配置的短主机名;未设置时行为取决于具体发行版
示例配置
preserve_hostname: true # --- 示例2 --- hostname: myhost fqdn: myhost.example.com prefer_fqdn_over_hostname: true
原因分析
从/var/lib/cloud/data/set-hostname的内容来看,cloud-init已经正确解析了配置中的短主机名和FQDN。实际主机名显示为FQDN的问题,并非cloud-init配置失效,而是由以下两点导致:
- 发行版自身行为:RHEL/CentOS这类发行版在配置了FQDN后,
hostname命令默认会返回FQDN而非短主机名,这是系统的显示逻辑,不是cloud-init的错误。 - 配置生效验证:检查
/etc/hostname文件,如果内容是redhat-kouvas-1500-localtest,说明cloud-init已经按照配置完成了短主机名的设置,hostname命令的输出只是系统优先展示FQDN的表现。
另外,previous-hostname文件记录的是cloud-init执行前的主机名或过程中临时值,不代表最终生效的配置。
如果需要让hostname命令返回短主机名,可以通过hostnamectl set-hostname --static redhat-kouvas-1500-localtest命令强制设置静态短主机名,或者修改对应发行版的主机名配置文件。
内容的提问来源于stack exchange,提问作者Megazord
相关产品推荐
相关产品推荐

