Я тестирую банкомат с Chef, и у меня есть виртуальная машина, которую я клонирую для создания новых узлов. Я выполняю загрузку с помощью команды Knife и параметра -N, чтобы дать каждому хосту имя узла. Проблема сложна, потому что имя хоста на виртуальной машине не меняется, и если я пытаюсь запустить другой клиент, это не удается, потому что Chef уже зарегистрировал этот узел. Теперь я попытался установить имя хоста в своем базовая роль с имя хоста повар, но когда я бегу 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 просто недоступна на узле? Есть ли лучший способ установить имя хоста для имени узла?
После стольких проб и ошибок я совершенно уверен, что @config
и node
переменные недоступны в файлах ролей. Мое решение заключалось в том, чтобы переписать поваренную книгу имени хоста, чтобы искать атрибут nodename_as_fqdn
и установите его соответственно.
Имя узла доступно на узле, на котором запущен chef, через node.name
аксессуар.
Вы можете использовать поваренную книгу chef_hostname, чтобы установить имя хоста для имени узла, поместив это в свой metadata.rb:
depends "chef_hostname"
А затем установите имя хоста, например:
hostname node.name