我目前使用 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
经过反复尝试,我确信@config
和node
变量在角色文件中不可访问。我的解决方案是重写主机名手册以查找属性nodename_as_fqdn
并进行相应设置。
答案2
可以通过访问器在运行 chef 的节点上访问节点名称node.name
。
您可以使用 chef_hostname 食谱将主机名设置为节点名称,方法是将其放入您的 metadata.rb 中:
depends "chef_hostname"
然后设置主机名如下:
hostname node.name