Chef infra 如何在Chef中按服务器组处理不同的模板?

Chef infra 如何在Chef中按服务器组处理不同的模板?,chef-infra,chef-recipe,Chef Infra,Chef Recipe,新厨师用户 我想推出一个Sumologic安装的配置文件。我有一个收集/var/log/messages日志的基本方法。这个配置文件(它实际上是一个模板)将发送到所有服务器。我还有一个配置文件,它应该只转到web服务器来收集/var/log/httpd/access.log. 我是否应该创建另一个配方文件(这就是您所说的)?这是我现在拥有的 配方 模板 #messages.json.erb { api.版本:v1, 资料来源:{ 名称:消息, “类别”:“\u消息”, 自动数据解析:true,

新厨师用户

我想推出一个Sumologic安装的配置文件。我有一个收集
/var/log/messages日志的基本方法。
这个配置文件(它实际上是一个模板)将发送到所有服务器。我还有一个配置文件,它应该只转到web服务器来收集
/var/log/httpd/access.log.

我是否应该创建另一个配方文件(这就是您所说的)?这是我现在拥有的

配方 模板
#messages.json.erb
{
api.版本:v1,
资料来源:{
名称:消息,
“类别”:“\u消息”,
自动数据解析:true,
MultileProcessingEnabled:正确,
useAutolineMatching:true,
forceTimeZone:false,
过滤器:[],
编码:UTF-8,
路径表达式:/var/log/messages,
黑名单:[],
sourceType:LocalFile
}
}
#访问_logs.json.erb
{
api.版本:v1,
资料来源:{
名称:消息,
“类别”:“访问”,
自动数据解析:true,
MultileProcessingEnabled:正确,
useAutolineMatching:true,
forceTimeZone:false,
过滤器:[],
编码:UTF-8,
路径表达式:/var/log/httpd/access,
黑名单:[],
sourceType:LocalFile
}
}

免责声明:我没有测试过这个软件是否有语法错误或其他问题,只是从内存中测试过。它也是不完整的。您可以对更多内容进行配置,这里我只允许对log_source和log source config文件路径进行配置。 可能是这样的:

属性

default.rb

默认值['sumologic']['sources']=nil

资源 sumologic_source.rb

actions :install
    default_action :install
    attribute :source_path, :kind_of => String, :name_attribute => true
    attribute :log_source, :kind_of => String
action :install do
          template new_resource.path do
            source 'sumologic.erb'
              owner 'root'
              group 'sumologic_collector'
              mode '0664'
              action :create
              variables(
                  :source => new_resource.log_source
              )
            end
        end
供应商: sumologic_source.rb

actions :install
    default_action :install
    attribute :source_path, :kind_of => String, :name_attribute => true
    attribute :log_source, :kind_of => String
action :install do
          template new_resource.path do
            source 'sumologic.erb'
              owner 'root'
              group 'sumologic_collector'
              mode '0664'
              action :create
              variables(
                  :source => new_resource.log_source
              )
            end
        end
模板 违约

然后可以设置属性:

{
   "sumologic":{
      "sources": [{"path": "/opt/SumoCollector/sources/access_logs.json", "log_source": "/var/log/httpd/access"}]
  }
}

也许您可以使它更具可配置性,这样您就不必在需要新源时声明新的模板资源。erbs的内容是什么,您能否使用一些可配置的变量使其成为标准?通过这种方式,你可以在属性中定义新的源代码,迭代它们,并让一个模板声明更新我的帖子。非常好。所以我有一个问题。对于属性,我可以在哪里设置每个主机组的属性?也就是说,我的web服务器与数据库服务器的列表不同。我想我在
resources sumologic\u source.rb
中的角色配置中提出了自己的问题。。。是否应该像在配方中一样再次使用
:source\u path
?因为它是name属性,所以在调用资源时,您已经在配方中使用了它:sumologic source['path']do其中source是数组属性['sumologic']['sources']中的一个对象
unless node['sumologic']['sources'].nil? 
  node['sumologic']['sources'].each do |source|
    sumologic source['path'] do
        action :install
        log_source source['log_source']
    end
  end
end
{
   "sumologic":{
      "sources": [{"path": "/opt/SumoCollector/sources/access_logs.json", "log_source": "/var/log/httpd/access"}]
  }
}