在厨师自定义资源中调用cookbook

时间:2017-04-20 15:11:33

标签: chef chef-template

我的食谱my_service包含自定义资源write_config。 此资源是从另一本食谱node_a调用的。

  • my_service/resources/write_config.rb

    property :template_source, String, name_property: true 
    property :calling_cookbook, String, required: true
    
    action :create do
      template "/tmp/test.txt" do
        source   template_source
        cookbook calling_cookbook
        owner    'root'
        mode     '0644'
        action   :create
      end
    end
    
  • 节点食谱食谱node_a/default.rb

    my_service_write_config 'config.erb' do
      calling_cookbook 'node_a'
    end
    

这很好,但我想摆脱calling_cookbook属性。

有没有办法自动获取calling_cookbook名称?

解决方案

(谢谢你coderanger!) 基本资源template似乎是在调用(node_a)食谱(?)的上下文中进行评估。

  • my_service/resources/write_config.rb

    property :template_source, String, name_property: true 
    action :create do
      template "/tmp/test.txt" do
        source   template_source
        owner    'root'
        mode     '0644'
        action   :create
      end
    end
    
  • 在节点食谱中使用它食谱node_a/default.rb成为一个单行:

    ...
    include_recipe 'my_service'
    my_service_write_config 'config.erb'
    ...
    

纯!

1 个答案:

答案 0 :(得分:2)

自动跟踪new_resource.cookbook_name。您可能需要to_s它,因为它有时会以符号形式结束,但在其他情况下应该是您需要的符号。

同样专门针对模板,如果您只删除cookbook行,则这已经是默认行为。