【发布时间】:2017-08-16 01:10:13
【问题描述】:
我正在尝试创建一个 Chef 配方,它将从 Role 读取属性,其中一个属性将包含需要在服务器上执行的 Bash 代码。
因此,我创建了以下流程:
def proc_test(command)
proc = Proc.new { |command| command_out = Mixlib::ShellOut.new(command) ; command_out.run_command ; return command_out.stdout + command_out.stderr }
proc.call(command)
end
其中,当这样运行时:
node.set['attributes']['nested_attribute'] = proc_test("hostname")
有效。但如果我尝试这样做:
command="hostname"
node.set['attributes']['nested_attribute'] = proc_test(command)
它会抛出这个错误:
LocalJumpError
--------------
unexpected return
有人可以帮我解决这个问题吗?
如果我不使用return 关键字,而是使用put,我会得到同样的错误。
【问题讨论】:
-
将所有的 Proc 代码放在一行是没有意义的,并且严重影响了可读性。你为什么这样做?
-
@tadman 除了我之外没有人会看到这段代码。所以它并不那么重要。
-
猜猜看,我们现在正在查看您的代码。这很重要。
-
@tadman 是的。你说的对。我的错。
标签: ruby bash chef-infra