1

编写我的第一个流浪厨师独奏食谱时,我想到了一些简单的事情,比如更改主机名。在流浪文件中,我有这个;

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "../../chef/cookbooks"
    chef.roles_path = "../../chef/roles"
    chef.data_bags_path = "../../chef/data_bags"

    chef.json = { :hostname => "foofoo" }
    chef.add_recipe "myrecipe"

在 myrecipes/recipes/default.rb 中;

myvar = node[:hostname]

template "/tmp/myfile" do
    source "myfile.erb"
    owner "root"
    group "root"
    mode 0644
    variables(
        :myvar => myvar
    )
end

在 myrecipe/templates/default/myfile.erb 中;

<%= @myvar %>

这实际上是行不通的。/tmp/myfile 一直以 /etc/hostname 中的真实主机名结尾。敲了半天头后,我发现了这些变化;

在流浪文件中;

chef.json = { :myhostname => "foofoo" }

在配方文件中;

myvar = node[:myhostname]

所以,似乎 ':hostname' 在某种程度上是特殊的,但尽我所能,我找不到任何解释原因或如何覆盖它的文档,或者可能有哪些其他“特殊”值可用。

大多数文档似乎都假设我还没有达到某种程度的能力。所以,我可能已经看到了答案,但没有认出来。谁能指出我可以解释这一点的“绝对初学者”文档?

4

1 回答 1

1

第一:这也是我对 chef-solo 的第一次实验,并且:更改主机名并不是最简单的事情(因为其余的 Chef 运行旧主机名仍然存在,所以你必须做一些丑陋的事情来重新启动 Chef 等...) ;-)

第二:node['hostname']确实很特别(它是一个所谓的自动属性),它通过ohai从目标主机更新,因此您可以在模板中使用它,例如。

编辑:您可以使用此食谱来应用主机名。

于 2013-04-24T18:23:28.537 回答