我想在我的Chef cookbook中包含Diplomat gem,这样我就可以在.erb模板中执行Consul变量查找。
我需要配置Consul URL: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模板中执行变量查找?
您希望使用chef_gem
资源,但请确保在编译阶段运行它:
chef_gem 'diplomat' do
action :nothing
compile_time false
end.run_action(:install)
require 'diplomat'
用Chef安装gems相对来说比较容易。大多数情况下,您可以使用gem_package资源,它的行为与本机包资源非常相似:
gem_package 'httparty'
你甚至可以指定要安装的gem版本:
gem_package 'httparty' do
version '0.12.0'
end
您可能还看到了chef_gem资源。有什么区别?
chef_gem和gem_package资源都是用来安装Ruby的宝石。对于安装了chef-client的任何机器,都有两个Ruby实例。的标准系统范围实例另一个是专用实例,仅供chef-client。使用chef_gem资源将gem安装到一个专用于chef-client的Ruby实例。使用Gem_package资源来安装所有其他gem(即install gems . package)系统范围的)。
来源:https://sethvargo.com/using-gems-with-chef/