如何在 knife.rb 中设置本地机器的 fqdn

How to set fqdn of the local machine in knife.rb

这是我的 knife.rb 文件。在此我想将 node_name 设置为该本地计算机的 fqdn。我不想手动输入它。
因为我必须在 n 台机器上使用它。我只是写默认属性获取机器的fqdn。
它给出 ruby 语法错误.

log_level                :info

log_location             STDOUT

client_key               '/etc/chef/client.pem'

node_name                '#node['fqdn']'

chef_server_url          'myserverurl'


SyntaxError: /root/.chef/knife.rb:5: syntax error, 
unexpected tIDENTIFIER, expecting end-of-input
node_name                '#node['fqdn']'
                                     ^

相关文件内容:

  4: client_key               '/etc/chef/client.pem'

  5: node_name                '#node['fqdn']'

  6: chef_server_url          'myserverurl'

节点属性是 Chef 配方的东西,它们不存在于配置中(在通常无效的 Ruby 语法之上)。对您来说幸运的是,FQDN 已经是默认值 node_name 所以根本不要指定一个!

根据评论:

如果确实需要,请使用 chef 生成 knife.rb 文件。

使用食谱中的模板资源,它将从 .erb 文件中生成 knife.rb,如 coderanger 所说,您将在其中包含 <%= node['fqdn'] %>

但我强烈建议不要这样做,因为您的供应系统应该已经处理了节点的 destruction/recreation,因此它更像是在 Chef 中管理节点和客户端的地方,而不是节点本身。

旧:

为什么要在所有节点上使用 Knife?

Knife 是一种管理工具,应该在工作站上用于管理节点、cookbboks 等

请解释您的用例,以便我们编辑和指导您尝试实现的目标。这是一个 XY 问题(关于工具的问题而不是关于问题的问题)

我同意 Tensibai 和 coderanger 的观点,这不是你最好的方法,但如果你真的想这样做,那么我建议你伸出机器询问。

node_name `hostname --fqdn`

node_name `hostname`

取决于您是否需要 fqdn。当然,两者都假设您在主机上设置了有效的主机名。