如何在厨师食谱中创建两个任务之间的依赖关系?

如何在厨师食谱中创建两个任务之间的依赖关系?

我编写了一本 Chef 手册,用于配置公司中的服务器。

其中一项任务是安装名为“pssh”的“apt_package”,另一项任务是在 pssh 包安装完成后运行。

实际上,第二个任务在包安装之前运行,然后 chef-client 运行失败,提示相关文件丢失 - 丢失是因为 pssh 包安装创建了它。

我正在尝试将第二个任务配置为仅在包安装任务完成后运行。

相关代码如下:

apt_package 'pssh' do
  action :install
  subscribes :run, 'file[/usr/bin/pssh]', :before
end

file '/usr/bin/pssh' do
  owner 'root'
  group 'root'
  mode 0755
  content ::File.open("/usr/bin/parallel-ssh").read
  action :create
end

我尝试使用“通知”和“订阅”,但无济于事,第二个任务总是先运行,并导致 chef-client 运行失败。

如何建立任务之间的依赖关系?

答案1

问题在于,按照你编写的方式,文件读取发生在编译时。请查看https://coderanger.net/two-pass有关修复它的详细信息,但简而言之,您需要使用lazy{}读取文件周围的帮助程序。

相关内容