Chef infra 如何在Chef中按服务器组处理不同的模板?
新厨师用户 我想推出一个Sumologic安装的配置文件。我有一个收集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,
/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"}]
}
}