Хэш узла рецепта шеф-повара не имеет тех же данных, что и данные узла сервера шеф-повара.

У меня есть условие в рецепте, который проверяет некоторые данные узла:

if node[:etc][:group].has_key?('someuser') and node[:etc][:group][:someuser][:gid] == 12345
    # do something...
else
    # do something else...
end

И я использовал knife node edit hostname.mydomain.com, чтобы добавить эти данные к моему объекту узла, как показано

$ knife node show hostname.mydomain.com -m
Node Name:   hostname.mydomain.com
Environment: ...
FQDN:        hostname.mydomain.com
IP:          ...
Run List:    ...
Roles:       ...
Recipes:     ...
Platform:    ...
Tags:        ...
Attributes:..
etc:
  group:
    someuser:
      gid:     12345
      members:

tags:        ...

Однако вместо предложения if выполняется предложение else. Я проверил, что это именно та версия рецепта, который выполняется на узле (посмотрел рецепт, который был загружен на узел). Я думал, что правильно настроил свой узел для выполнения предложения if, так почему же выполняется предложение else? Спасибо.


person tytk    schedule 04.02.2015    source источник


Ответы (1)


Ключ узла и т. д. создается ohai (и находится под автоматическим ключом) и перезаписывается при каждом запуске, попытка установить эти атрибуты в объекте узла не сработает.

Вы не можете переопределить автоматические атрибуты.

Вы можете получить более подробную информацию о том, что делается в режиме шеф-повара здесь и подробности об атрибутах здесь

Здесь вы можете создать группу в своем рецепте с ресурсом group и перезагрузить данные ohai перед входом в цикл.

Пример (на основе документа):

ohai "reload_passwd" do
  action :nothing
  plugin "etc"
end
group 'somegroup' do
  gid 12345
  notifies :reload, "ohai[reload_passwd]", :immediately
end

ruby_block "your code" do # in a ruby block to be run at converge time and not at compile time.
  if node[:etc][:group].has_key?('someuser') and node[:etc][:group][:someuser][:gid] == 12345
    # do something...
  else
    # do something else...
  end
end

Но создание группы может быть в вашем блоке else, и следующий запуск шеф-повара войдет в блок if, поскольку группа будет существовать.

person Tensibai    schedule 04.02.2015