Получить вызов кулинарную книгу в рамках шеф-повар пользовательского ресурса

У меня есть поваренная книга 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 ответ

Решение

Это отслеживается автоматически как new_resource.cookbook_name, Вам может понадобиться to_s это потому, что каким-то образом это иногда заканчивается символом, но в остальном должно быть то, что вам нужно.

Также специально для шаблонов это уже поведение по умолчанию, если вы просто удалите cookbook линия.

Другие вопросы по тегам