ruby – 在Chef资源之间传递变量
我想向您展示我的用例,然后讨论可能的解决方案:
问题A: 所以食谱“a”看起来像: execute "echo 'echo stuff' > /usr/local/bin/stuff.sh" (该脚本只是回显(st)“stuff”到stdout) 和食谱“b”看起来像: include_recipe "a" var=`/usr/local/bin/stuff.sh` (注意反引号,var应该包含东西) 现在我需要用它做一些事情,例如用这个用户名创建一个用户.所以在脚本“b”我添加 user "#{node[:var]}" 碰巧,这不起作用..显然厨师运行所有不是资源的东西,然后运行资源,所以一旦我运行脚本厨师抱怨它无法编译,因为它首先尝试运行“var = …“在配方行”b“并失败,因为配方a的”执行…“尚未运行,因此”stuff.sh“脚本尚不存在. 问题B:我碰到了“ruby_block”的想法.显然,这是一种资源,因此它将与其他资源一起进行评估.我说好了,然后我想创建脚本,在“ruby_block”中获取输出,然后将其传递给“user”.所以食谱“b”现在看起来像: include_recipe "a" ruby_block "a_block" do block do node.default[:var] = `/usr/local/bin/stuff.sh` end end user "#{node[:var]}" 但是,事实证明变量(var)没有从“ruby_block”传递给“user”而且它仍然是空的.无论我试图用它做什么杂耍,我都失败了(或者我只是没找到正确的杂耍方法) 给大厨/ruby大师们:我如何解决问题A?我如何解决问题B? 解决方法
您已经使用Ruby块解决了问题A.
现在你必须用类似的方法解决问题B: ruby_block "create user" do block do user = Chef::Resource::User.new(node[:var],run_context) user.shell '/bin/bash' # Set parameters using this syntax user.run_action :create user.run_action :manage # Run multiple actions (if needed) by declaring them sequentially end end 您还可以通过在编译阶段创建文件来解决问题A. execute "echo 'echo stuff' > /usr/local/bin/stuff.sh" do action :nothing end.run_action(:run) 如果遵循此行动,请确保: >在Chef的编译阶段存在/usr/local/bin; > stuff.sh是可执行的;要么>通过shell执行它(例如:var =`sh /usr/local/bin / stuff.sh` (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |