【发布时间】:2019-01-13 23:58:58
【问题描述】:
我有一个看起来像这样的厨师食谱:
package 'build-essential' do
action :install
end
cmd = Mixlib::ShellOut.new("gcc -dumpversion")
cmd.run_command
gcc_version = cmd.stdout.strip()
如果我在安装了 gcc 的系统上执行配方,配方运行良好,没有错误。但是,如果我在没有安装 gcc 的系统上运行配方,我会收到错误消息“没有这样的文件或目录 - gcc”。
当我试图找到解决我的问题的方法时,我开始了解厨师两阶段的东西。我期待软件包安装能够满足 gcc 要求。我如何告诉厨师这个要求稍后会得到满足并且不会在编译时抛出错误?
我尝试了以下,但属性没有得到更新。
Chef::Resource::RubyBlock.send(:include, Chef::Mixin::ShellOut)
ruby_block "gcc_version" do
block do
s = shell_out("gcc -dumpversion")
node.default['gcc_version'] = s.stdout.strip()
end
end
echo "echo #{node[:gcc_version]}" do
command "echo #{node[:gcc_version]}"
end
感谢任何帮助。谢谢。
【问题讨论】:
标签: shell compiler-errors output chef-infra lazy-evaluation