Chef infra 从不同的食谱中呈现部分模板
我们正在多个应用服务器节点上安装telegraf代理;作为收集服务器度量值的监视框架的一部分 这是由我们的烹饪大师完成的 master/recipe/telegraf_install.rb 这个主食谱也有默认的配置模板 master/template/telegraf\u install\u default.conf.erb master/template/Partial2.conf.erb 一直以来,我们都是在主食谱下编写角色文件 master/role/Application1_DEV.json master/role/Application1_UAT.json master/role/Application2_DEV.json 注意:并非所有应用程序都需要部分模板;仅当某些应用程序需要某些自定义项或特定要求时,才需要部分模板,否则将呈现默认模板 然而,随着时间的推移,许多应用程序都被安装在多个环境中。 角色文件的数量失控,难以跟踪和维护 然后,我们计划为每个单独的应用程序创建包装器cookbook,以便Chef infra 从不同的食谱中呈现部分模板,chef-infra,Chef Infra,我们正在多个应用服务器节点上安装telegraf代理;作为收集服务器度量值的监视框架的一部分 这是由我们的烹饪大师完成的 master/recipe/telegraf_install.rb 这个主食谱也有默认的配置模板 master/template/telegraf\u install\u default.conf.erb master/template/Partial2.conf.erb 一直以来,我们都是在主食谱下编写角色文件 master/role/Application1_DEV.js
- 我们在包装器手册中定义了特定于应用程序/环境的角色文件
- 包装烹饪书将被钉在一个特定的主烹饪书版本
- 独立修改包装食谱,无需对主食谱进行修改和更改 (这是一项企业授权,即每当对其进行任何更改时(角色文件除外)都会升级cookbook版本)
<%= render @partial_name , :cookbook => 'wrapper1' %>
'wrapper1'>
Chef::Mixin::Template::TemplateError(未找到Cookbook wrapper1。如果从另一本Cookbook加载wrapper1,请确保在元数据中配置依赖项)第20行:
18:
19:
20:'包装器1'>
21:
22:
当我在主食谱中添加包装器的依赖项时;错误消失了,我们成功地收敛了
然而,这违背了隔离主cookbook的目的,对于包装器cookbook中的每个部分模板,我需要在主cookbook元数据中添加包装器依赖项
我希望我能解释我的要求。如果您能建议是否有任何解决方法或可能有其他方法来解决此问题,我们将不胜感激。在主食谱中创建一个,然后在任何依赖于主食谱的食谱中使用它在主食谱中创建一个,然后在任何依赖于主食谱的食谱中使用它问题是什么?错误是什么?没有任何错误。上述逻辑是有效的。我担心我必须将包装依赖添加到我的主食谱中,这是有道理的;由于配置操作发生在主食谱中,即它需要来自包装器的模板信息。我正在寻找一些其他的工作,我可以在包装自定义配置;在使用它的时候不要对主机做任何更改问题是什么?错误是什么?没有任何错误。上述逻辑是有效的。我担心我必须将包装依赖添加到我的主食谱中,这是有道理的;由于配置操作发生在主食谱中,即它需要来自包装器的模板信息。我正在寻找一些其他的工作,我可以在包装自定义配置;并且在使用主机时不会对其进行任何更改
# Telegraf Configuration.
[global_tags]
## Environment variables can be used as tags and throughout the config file (i.e. user = "$USER").
app = "<%= @app %>"
env_name = "<%= @env_name %>"
env_type = "<%= @env_type %>"
role = "<%= @role %>"
<% unless @partial_name.empty? -%>
<%= render @partial_name %>
<% end -%>
# Partial1 service
[[inputs.procstat]]
pattern = "Pattern1"
[inputs.procstat.tags]
service_name = "Service1"
instance = "Instance1"
[[inputs.proc]]
pattern = "Pattern2"
[inputs.proc.tags]
service_name = "Service2"
instance = "Instance2"
"default_attributes": {
"telegraf": {
"template_name": "telegraf_install_default.conf.erb",
"app": "App1",
"env_name": "DEV1",
"env_type": "DEV",
"default_attributes": {
"telegraf": {
"template_name": "telegraf_install_default.conf.erb",
"partial_name": "Partial1.conf.erb",
"app": "App1",
"env_name": "UAT1",
"env_type": "UAT",
"default_attributes": {
"telegraf": {
"template_name": "telegraf_install_default.conf.erb",
"partial_name": "Partial2.conf.erb",
"app": "App2",
"env_name": "DEV1",
"env_type": "DEV",
<%= render @partial_name , :cookbook => 'wrapper1' %>
Chef::Mixin::Template::TemplateError (Cookbook wrapper1 not found. If you're loading wrapper1 from another cookbook, make sure you configure the dependency in your metadata) on line #20:
18:
19: <% unless @partial_name.empty? -%>
20: <%= render @partial_name, :cookbook => 'wrapper1' %>
21: <% end -%>
22: