首页 > 解决方案 > 厨师根据 bash 命令输出返回食谱

问题描述

Chef 有没有办法根据 bash 命令的输出从食谱中返回?

我尝试了以下方法:

execute 'check_output' do
  command <<-EOH
    output=$(echo "hi")
    if [ "$output" == "hi" ]; then
        return 0
    fi
  EOH
end

include_recipe 'blahblah::default'

我想用退出代码 0 停止整个 Chef 食谱,而不是点击include_recipe命令。

标签: chef-infrachef-recipe

解决方案


并不是你写的那样,因为在execute收敛时间之前不会考虑资源的属性,也就是在blablah::default包含配方之后。您无法决定是否在收敛期间包含另一个配方。

为了做你想做的事,你想做的任何 shell 东西都必须在编译时是可决定的,例如:

include_recipe 'blahblah::default' unless `echo -n "hi"` == 'hi'

这将导致配方不包括在内。

在此处查看 coderanger 对 Chef 的两遍模型的良好描述:https ://coderanger.net/two-pass/

要将其应用于您想要做的事情,您必须决定是否include_recipe在编译期间获取,而不是在收敛期间获取。


推荐阅读