在引导时/引导后将 chef 主机名设置为节点名

在引导时/引导后将 chef 主机名设置为节点名

我目前使用 Chef 进行测试,并且我有一个虚拟机,我正在克隆它以生成新节点。我使用 knife 命令和 -N 参数进行引导,为每个主机指定一个节点名。问题很棘手,VM 上的主机名不会改变,如果我尝试引导另一个客户端,它会失败,因为 Chef 已经注册了这个节点。我现在尝试在我的基础角色主机名cookbok 但是当我运行它时chef-client它给了我一个:

---- Begin output of hostname @config[:chef_node_name] ----
STDOUT: 
STDERR: hostname: the specified hostname is invalid
---- End output of hostname @config[:chef_node_name] ----
Ran hostname @config[:chef_node_name] returned 1

基本角色的属性包括:

name "base"
description "Base role applied to all nodes"
override_attributes(
  "chef_client" => {
    "init_style" => "upstart",
    "server_url" => "http://chef.ws:4000"
    },
  "set_fqdn" => 
        "@config[:chef_node_name]"
)
run_list(
  "recipe[hostname]",
  "recipe[chef-client::delete_validation]",
  "recipe[chef-client::service]"
)

我在 set_fqdn 中是否存在语法错误,或者 @config 变量在节点上根本无法访问?有没有更好的方法将主机名设置为节点名?

答案1

经过反复尝试,我确信@confignode变量在角色文件中不可访问。我的解决方案是重写主机名手册以查找属性nodename_as_fqdn并进行相应设置。

答案2

可以通过访问器在运行 chef 的节点上访问节点名称node.name

您可以使用 chef_hostname 食谱将主机名设置为节点名称,方法是将其放入您的 metadata.rb 中:

depends "chef_hostname"

然后设置主机名如下:

hostname node.name

相关内容