【问题标题】:"include_recipe" vs. Vagrantfile "chef.add_recipe". What's the difference?“include_recipe”与 Vagrantfile “chef.add_recipe”。有什么不同?
【发布时间】:2013-12-20 03:14:32
【问题描述】:

刚刚在我的 vagrant box 上运行了 nginx::source recipe,我的行为非常不寻常。

当我包含 Vagrantfile 中的食谱时(如下所示),一切都像魅力一样,

chef.add_recipe("project::nginx")
chef.add_recipe("nginx::source")

project::nginx 配方非常简单。用它来覆盖 nginx 食谱的默认属性)

但如果我在 project::nginx 的最后包含一个配方(提到过),一切都会崩溃:

node.default['nginx']['server_names_hash_bucket_size'] = 128
include_recipe "nginx::source"

直到现在我还不知道这两个调用之间的行为有什么不同。这里有人知道有什么区别吗?

【问题讨论】:

  • 你提供的sn-p代码,是你的属性文件还是你的配方?
  • 啊,这是 project::nginx 配方。

标签: nginx vagrant chef-recipe chef-solo


【解决方案1】:

哥特雅!厨师 11 功能。它的问题仅存在于 chef-solo 中:)

要快速恢复,区别在于:

  • chef.add_recipe() - 加载整个食谱上下文(所有文件,例如食谱、定义、属性...)
  • include_recipe "" - 不在扩展运行列表中的文件(属性、定义等)不会被加载。

至少有4种方法可以解决问题(将文件放入运行列表):

  • include_attribute - 明确包含所需的属性文件。
  • metadata.rb->dependency - 如果您的菜谱使用其他菜谱中的食谱,则将该菜谱放在 metadata.rb 的依赖部分中,它的所有文件都将被加载。
  • chef.add_recipe() - 通过 Vagrantfile 加载食谱。 (此处提及仅供参考)
  • Berkshelf - 您也可以使用此食谱管理器来解决问题。这是Stackoverflow thread about this exact problemsome Docs

对于那些有兴趣进一步阅读的人,Chef 11 为非食谱文件引入了基于依赖的食谱加载。新的加载逻辑意味着属于cookbook_path中但不在扩展run_list中的cookbook文件或扩展run_list中cookbook的依赖项将不再加载。 REF:Opscode breaking changes documentation,如果您需要我收到的错误的签名,here's 完全相同,即使出于相同的原因。

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2014-10-22
    相关资源
    最近更新 更多