我编写了一本 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{}
读取文件周围的帮助程序。