2016-09-28 51 views
3

我想在我的厨师食谱中加入Diplomat gem,这样我就可以在.erb模板中执行Consul变量查找。如何在Chef食谱中包含和配置一个ruby库?

我需要配置领事网址:

irb(main):015:0> require 'diplomat' 
irb(main):016:0> Diplomat.configure do |config| 
irb(main):017:1* config.url = "consulurl:80" 
irb(main):018:1> end 

设置一个变量作为URL路径:

irb(main):020:0> kv_path = "path/to/variable" 
=> "path/to/variable" 

最后,在模板中进行查找。

irb(main):022:0> foo = Diplomat::Kv.get(kv_path + '/test_foo_123') 
=> "bar" 

哪里在食谱中,我需要写上面的配置代码,以便我可以在.erb模板中执行变量查找?

回答

1

您要使用的chef_gem资源,但一定要在编译阶段运行:

chef_gem 'diplomat' do 
    action :nothing 
    compile_time false 
end.run_action(:install) 
require 'diplomat' 
0

与厨师安装宝石是相对无痛的。在大多数情况下,你可以使用gem_package资源,其行为非常类似于本机软件包资源:

gem_package 'httparty'

你甚至可以指定宝石版本进行安装:

gem_package 'httparty' do version '0.12.0' end

您可能也看到了chef_gem资源。有什么不同?

chef_gem和gem_package资源都用于安装Ruby gems。对于任何安装了chef-client的机器,都有两个Ruby的实例 。一个是Ruby的标准系统范围实例 ,另一个是专用实例,仅对主厨客户端 有效。使用chef_gem资源将宝石安装到专用于厨师客户端的Ruby的 实例中。使用 gem_package资源来安装所有其他宝石(即安装系统范围内的宝石 )。

来源:https://sethvargo.com/using-gems-with-chef/

+0

正如你可能从一些在2013年想象的,那个帖子是疯狂地过时了。请忽略大部分。 – coderanger

相关问题