Допустим, у меня есть Polcyfile.rb в кулинарной книге под названием motd
:
name 'motd'
default_source :chef_repo, "../"
include_policy "Policyfile", path: "../environment"
run_list 'motd'
и recipes/default.rb
:
file '/etc/motd' do
content node['message']
end
У меня есть другая кулинарная книга под названием environment
который имеет файл Policyfile.rb:
name 'environment'
default_source :chef_repo, "../"
run_list 'environment'
Он имеет пустые recipes/default.rb
и attributes/default.rb
с:
default['message'] = 'i am a message'
Я запускаю chef install Policyfile.rb
в environment
dir для создать файл блокировки. Когда я запускаю kitchen converge
из motd
dir, а затем kitchen login
, я получаю ожидаемый вывод на консоль:
This system is built by the Bento project by Chef Software
More information can be found at https://github.com/chef/bento
i am a message
Теперь я go и обновляю environment/attributes/default.rb
до
default['message'] = 'i am updated'
I НЕ запускайте chef update Policyfile.rb
для environment
и снова запускайте kitchen converge
из motd
. Я ожидаю, что kitchen login
не будет отражать мое обновление, потому что Policyfile.lock.json
в motd
не обновил свой revision_id
для включенной политики environment
. Но, к моему большому удивлению, я действительно вижу обновленное сообщение в консоли. Я вижу, что Policyfile.lock.json
имеет новый root revision_id
, а cookbook_locks->environment->identifier
изменился. Но все же я бы подумал, что в этом случае, если поваренные книги в моей зависимости Policyfile.rb изменились и не вычисляются для соответствия ha sh его Policyfile.lock. json revision_id
, тогда я все равно должен см. старый вывод, или здесь должно быть какое-то другое предупреждение.
Думаю, я просто пытаюсь понять концепцию здесь более полно. С одной стороны, root revision_id
на motd
изменилось, так что я достиг идемпотентности в одном смысле. Но, с другой стороны, зависимость revision_id
для environment
и ее рецептная книга компонентов не совпадают. Может кто-нибудь объяснить, почему это имеет смысл?