1
有没有一种方法可以从厨师图书馆里访问new_resource
属性(在libraries/default.rb
)?厨师 - 从图书馆访问new_resource
我目前的解决办法是:
在libraries/default.rb
module Libraries
def init(resource)
@@server_name = resource.server_name
@@server_type = resource.server_type
@@script = get_script_path
...
end
def get_script_path
if @@server_type == 'admin'
script = 'admin_cntl.sh'
path = '/admin_server/bin'
elsif @@server_type == 'managed'
script = 'managed_cntl.sh'
path = '/managed_server/bin'
end
::File.join(path, script)
end
end
在providers/default.rb
include Libraries
action :start do
init(new_resource)
execute 'my_script' do
command "./#{@@script} start"
end
end
action :remove do
init(new_resource)
execute 'my_script' do
command "./#{@@script} stop"
end
end
我认为这是不必要的开销,但我不能想出一个更好的解决方案。
有没有更好的方法?
为什么你想这样做?感觉就像缺少一些背景。 – MaxVT
我需要从'''new_resource''属性中计算变量。 一些计算繁重,检查不同属性的值,需要在库中,而不是在提供者中。 然后我直接从提供者访问计算的变量。 –
我编辑了我的问题以显示一个用例。我知道我可以直接将'''new_resource'''属性传递给get_script_path'',但它在不同的''''''''''中是多余的,特别是要知道真正的代码有很多使用这些属性的库函数。我觉得这更清洁,但我仍然想摆脱'''init'''函数并直接在'''''''''''模块中访问它们。我也知道图书馆在厨师任何其他事情之前执行,但我只是问是否可能。 –