【问题标题】:Chef shared config filesChef 共享配置文件
【发布时间】:2014-10-13 19:49:35
【问题描述】:
我刚刚学习 Chef,但我对处理可能需要由多个食谱修改的单个配置文件的情况的最佳方法感到困惑。我的具体案例是 AWS Cloudwatch Logs。它有一个配置文件(我看不到包含其他文件),它需要列出它收集的所有日志文件。我有不同的配方(例如 Web 服务器、邮件服务器等)会导致创建不同的日志文件。当这些配方运行时,我希望将它们的日志文件添加到 AWS 日志配置文件中。但是将其附加到文件似乎并不安全,因为如果重新运行配方,它将再次添加。而且我想保留有关哪些日志文件存在于安装创建它们的软件的配方中的逻辑。我希望能够将一个配方添加到运行列表并将其日志添加到配置文件中(反之亦然),而邮件服务器配方不必知道有关 Web 服务器创建的文件的任何信息等等.
这样做的正确方法是什么?
【问题讨论】:
标签:
amazon-web-services
chef-infra
logfiles
amazon-cloudwatch
【解决方案1】:
您需要有一个实际创建配置文件的 CloudWatch 配方。您的每个其他配方都可以添加一些节点属性来指示他们需要添加哪些日志文件,然后 CloudWatch 食谱可以获取这些属性并使用它们来构建配置文件。
例如:
在网络服务器配方中
node['logs']['nginx']['somevhost'] = %w(/path/to/log /path/to/other/log)
在 cloudwatch 配方中
node['logs'].each do |app|
app.each do |component|
<add to some collection structured for CloudWatch's config file>
end
end
更好
我建议您查看 infochips 的 silverware 食谱。它有一个不错的库,您可以使用它在网络服务器和邮件服务器说明书中宣传您的日志文件,然后在 CloudWatch 说明书中发现它们。