强制厨师执行菜谱的正确方法是什么?

强制厨师执行菜谱的正确方法是什么?

我有一个厨师脚本正在做

directory '/home/ubuntu/s3' do
  action :create  
end

execute 'copy from s3' do
  command "aws s3 cp s3://my-assets /home/ubuntu/s3/ --recursive"    
end

...

我注意到在将一个新文件复制到我的 s3 存储桶后,运行这个 chef 配方后它不在我的服务器上...所以我通过 ssh 进入服务器并 rm -rf s3 目录..重新运行我的 chef 脚本,后来当我试图访问 s3 目录中的某些内容时失败了,提示“没有文件或目录”。

我通过 ssh 重新登录并发现,在我删除该目录后,chef 从未重新创建该目录...那么......我该如何告诉 chef 重新做那些它认为已经完成但不需要做的事情呢?

答案1

食谱里面的资源不一定按顺序排列。

尝试:

directory '/home/ubuntu/s3' do
  action :create  
end

execute 'copy from s3' do
  command "aws s3 cp s3://my-assets /home/ubuntu/s3/ --recursive" 
  only_if { ::Dir.exist?(/home/ubuntu/s3) }
end

或者:

目录'/home/ubuntu/s3'                                                                                                                                                  
  动作:創建..                                                                                                                                                              
结尾                                                                                                                                                                             

执行'从 s3 复制'                                                                                                                                                       
  命令“aws s3 cp s3://my-assets /home/ubuntu/s3/ --recursive”。                                                                                                              
  订阅:创建,“目录[/home/ubuntu/s3]”                                                                                                                              
结尾

相关内容