【问题标题】:In Chef how can you pass attributes with "include_recipe"?在 Chef 中,如何使用“include_recipe”传递属性?
【发布时间】:2020-11-16 07:46:36
【问题描述】:

我需要调用一个配方并传递给它特定的属性数据,比如:

include_recipe [nginx::passenger['my_attributeA' => 'foobar' , 'my_attributeB' => 'foofii']

即在我的包装器中,我必须将数据传递给一个被调用的说明书。

谢谢

【问题讨论】:

    标签: attributes chef-infra recipe


    【解决方案1】:

    属性赋值不需要传递参数;相反,您需要在包含所需配方之前重载该属性。

    在包含其他依赖说明书之前,在依赖说明书中设置的属性将为merged

    如果属性优先级相同,则合并该数据。如果数组中的属性值优先级不同,则替换该数据。对于所有其他值类型(如字符串、整数等),该数据将被替换。

    【讨论】:

      【解决方案2】:

      chef 中的节点属性是全局变量,您应该通过在属性文件中设置它们来做到这一点:

      my_cookbook/attributes/default.rb:

      default['my_attributeA'] = 'foobar'
      default['my_attributeB'] = 'foofii'
      

      my_cookbook/recipe/default.rb:

      include_recipe "nginx::passenger"
      

      my_cookbook/metadata.rb:

      name "my_coobook"
      version "1.2.3"
      
      depends "nginx"
      

      注意,通常你会在你的包装器中设置节点属性,如 default['nginx']['some_nginx_cookbook_attribute'] 来控制 nginx 食谱,你可能不会设置像 default['my_attributeA'] 这样任意的东西。

      【讨论】:

        猜你喜欢
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-15
        • 1970-01-01
        • 2016-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多