Chef infra 厨师食谱在编写食谱时失败

Chef infra 厨师食谱在编写食谱时失败,chef-infra,Chef Infra,我想加密我的所有chef数据包,并在/etc/chef/secret\u key中设置客户端VM上的解密密钥,以便在chef客户端运行时,它将使用此密钥解密数据包。为此,我在recipe中提供了以下资源: # Put the secret key in /etc/chef cookbook_file '/etc/chef/rd_seceret_key' do source 'rd_seceret_key' action :create end # Get the credentials

我想加密我的所有chef数据包,并在/etc/chef/secret\u key中设置客户端VM上的解密密钥,以便在chef客户端运行时,它将使用此密钥解密数据包。为此,我在recipe中提供了以下资源:

# Put the secret key in /etc/chef
cookbook_file '/etc/chef/rd_seceret_key' do
  source 'rd_seceret_key'
  action :create
end
# Get the credentials from the databag for the current environment
credentials = data_bag_item('pinpoint', node.chef_environment.downcase, IO.read('/etc/chef/rd_seceret_key'))
....
现在,在编译时,它试图解决IO.read“/etc/chef/rd_seceret_key”,当然它还不存在,直到chef客户端将它从文件中设置,就像上面的配方中设置的那样

Errno::ENOENT
-------------
No such file or directory @ rb_sysopen - /etc/chef/rd_seceret_key
98>> credentials = data_bag_item('pinpoint', node.chef_environment.downcase, IO.read('/etc/chef/rd_seceret_key'))
现在我的问题是,我如何将此设置为优先顺序,以首先设置cookbook_文件。当然,我想从一个chef客户端执行此操作,而不是分离配方。

阅读了解如何强制在编译时运行


也就是说,请不要这样做。通过Chef本身分发数据包密钥会破坏整个安全模型,而且毫无意义。

您能使用惰性评估吗,或者以某种方式将烹饪书一分为二?我不知道什么是懒惰评估,是的,可以将烹饪书一分为二,但我想打一次厨师客户端。这有帮助吗?现在我知道什么是懒惰评估,但我认为它不会有帮助,因为我们必须解决IO。在编译时阅读“/etc/chef/rd_seceret_key”。给我5分钟的时间试试:好文章!仅当从编译阶段绕过此选项时。谢谢,这确实不是个好主意。我只是在试一个POC。如果你有一些关于如何正确使用加密数据包的文章或想法,这将是非常有用的。