假设我在一本名为 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
现在我去更新environment/attributes/default.rb
成为
default['message'] = 'i am updated'
我不会再从. chef update Policyfile.rb
_ environment
_ 我的期望是这不会反映我的更新,因为尚未更新其包含的政策。但令我惊讶的是,我确实在控制台中看到了更新的消息。我确实看到它有一个新的根并且已经改变了。但是,我仍然认为,在这种情况下,如果我的依赖 Policyfile.rb 中的食谱发生了变化并且不计算以匹配其 Policyfile.lock.json 的哈希,那么我仍然应该看到旧的输出或者应该有这里有某种其他警告。kitchen converge
motd
kitchen login
Policyfile.lock.json
motd
revision_id
environment
Policyfile.lock.json
revision_id
cookbook_locks->environment->identifier
revision_id
我想我只是想更全面地理解这里的概念。一方面,根revision_id
为motd
改变了,所以我在某种意义上实现了幂等性。但另一方面,revision_id
forenvironment
依赖项及其组件说明书不匹配。有人可以解释为什么这是有道理的吗?