У меня проблема с Vagrant / Chef Solo, когда я повторно предоставляю атрибуты, которые были ранее переданы в chef.json
, продолжают появляться, даже если их больше не существует.
В Vagrant они передаются следующим образом:
machine_properties.vm.provision :chef_solo do |chef|
chef.json = machine_options
end
Если при первом запуске вы устанавливаете machine_options на следующее, все работает нормально
machine_options['colours']['red'] = '#ff0000'
machine_options['colours']['green'] = '#00ff00'
Если вы затем измените его на следующее, вы увидите, что элемент green
все еще присутствует. (В качестве отдельного файла /tmp/vagrant-chef/dna.json
отображается только красный и синий цвета, как и ожидалось, как и для puts
в бродячем файле)
machine_options['colours']['red'] = '#ff0000'
machine_options['colours']['blue'] = '#0000ff'
Однако, с помощью Chef, если вы Chef::Log.info(node["colours"])
увидите, что красный, синий и зеленый теперь присутствуют. Это приводит к путанице шаблонов, которые теперь повторяют все элементы, а также означает, что и условия, ожидающие, что узлы будут присутствовать / отсутствовать, будут видеть узлы как настоящие.
Похоже, Шеф рассматривает их как node.normal['colours']
и т. Д., А не node.default['colours']
. Обновление (основной?) Версии Chef в config.omnibus.chef_version = '14.10.9'
исправляет (d?) Ее для следующего запуска (т. Е. Очистка очищается), но последующие положения снова наполняются длинными удаленными атрибутами: (
Есть ли способ заставить Chef забыть то, о чем было сказано во время предыдущих запусков, и фактически рассматривать текущий chef.json
как полный набор вещей?