为什么 chef 将我的节点名称列为“localhost”?

为什么 chef 将我的节点名称列为“localhost”?

我在 Linux 节点上安装了 chef-client,它似乎已成功连接到我的 chef 服务器。但是,当我执行:时chef node list,它显示为“localhost”。

为什么 chef 没有选择正确的节点名称?如果我询问更多详细信息,我会看到:

$ chef node show localhost
node Name:   localhost
Environment: _default
FQDN:        localhost
IP:          192.168.1.5
Run List:    
Roles:       
Recipes:     
Platform:    ubuntu 11.10

它已设置正确的域名。例如,如果我执行:hostname,它会返回“mynodename”,而不是“localhost”。

chef 如何确定节点的名称?为什么它在 FQDN 中显示正确的名称?

编辑:为了回应下面的 cjc,这里是一些输出ohai | grep host

(注意:该节点在 EC2 上运行)

"fqdn": "localhost",
"hostname": "mynodename",
"public_hostname": "ec2-...-.amazonaws.com",
"local_hostname": "ip-...ec2.internal",
"hostname": "ip-...ec2.internal",

此外,hostname -s 给出了预期的输出:

$ hostname -s
mynodename

答案1

原因似乎是 ohai 正在运行hostname --fqdn,它确实给出了“localhost”。

问题的根本原因似乎是我将主机名设置为“mynodename”而不是“mynodename.example.com”。如果我这样做:

sudo hostname mynodename.example.com

然后当我这样做时它会做正确的事情:hostname --fqdn

答案2

我也有同样的问题。这似乎是 ohai 的问题。但问题有点深。最好的测试是查看 hostname --fqdn 是否返回合理的值。

归根结底还是 hosts 文件。使用 sudo hostname my.fqdn 设置主机名不起作用。严格来说,这应该不是必要的,因为系统名称与域名不同。但进行反向查找的系统很容易混淆。最重要的是,在您的 etc/hosts 文件中,如果您希望返回 ip 地址,则 fqdn 应该是 ip 地址后的第一个条目,例如

127.0.0.1 myserver.mydomain.com myserver localhost # 有效,返回 fqdn

127.0.0.1 localhost myserver.mydomain.com myserver # 这将返回 localhost

127.0.0.1 myserver myserver.mydomain.com localhost # 这将返回 myserver

如果您查看默认的 etc/hosts 文件,您将看到 ubuntu 使用 127.0.1.1 以及 127.0.0.1。这是因为这种情况。将主机名放在单独的 IP 地址上(仍然有效环回)可确保系统名称和域名之间的清晰映射。

答案3

在基于 RHEL 5 和 6 的 Amazon AMI 实例上。在这种情况下,请查看:

/etc/sysconfig/network

我怀疑配置如下:

HOSTNAME=localhost
DOMAINNAME=localhost

在这种情况下,请使用以下方法进行更正:

HOSTNAME=mynodename
DOMAINNAME=mynodename.example.com

在 Debian 类型的 Linux 实例(例如 Ubuntu)上,您可以查看以下文件以了解主机名:

/etc/hostname

并在那里进行更改。

答案4

对我来说,这似乎是 /etc/hosts 的问题。我的 /etc/hosts 文件如下所示

127.0.0.1      localhost myhostname
...
...

删除 /etc/hosts 文件中的 localhost 解决了我的问题。无论如何,我不需要 localhost。

相关内容