jf647/chef-gen-flavor-base

chef generate cookbook foo with ChefDK 0.9.0 throws "undefined method `cookbook_gems' for Chef::Resource::Template" error

Opened this issue · 2 comments

We will also post results with chefdk 0.8.1

C:\Users\me\chef\cookbooks> chef generate cookbook foo                                                                                                                                 
using ChefGen flavor 'nordstrom'                                                                                                                                                         
[2015-11-02T12:00:50-08:00] WARN: ExpandNodeObject#load_node is deprecated. Please use Chef::PolicyBuilder::Dynamic instead of using ExpandNodeObject directly at C:/opscode/chefdk/embed
ded/lib/ruby/gems/2.1.0/gems/chef-dk-0.9.0/lib/chef-dk/chef_runner.rb:54:in `policy'                                                                                                     
Compiling Cookbooks...                                                                                                                                                                   
Recipe: nordstrom::cookbook                                                                                                                                                              
  * directory[C:/Users/me/chef/cookbooks/foo] action create (up to date)                                                                                                               
  * template[C:/Users/me/chef/cookbooks/foo/Gemfile] action create                                                                                                                     

    ================================================================================                                                                                                     
    Error executing action `create` on resource 'template[C:/Users/me/chef/cookbooks/foo/Gemfile]'                                                                                     
    ================================================================================                                                                                                     

    NoMethodError                                                                                                                                                                        
    -------------                                                                                                                                                                        
    undefined method `cookbook_gems' for Chef::Resource::Template                                                                                                                        

    Resource Declaration:                                                                                                                                                                
    ---------------------                                                                                                                                                                
    # In C:/Users/me/AppData/Local/chefdk/gem/ruby/2.1.0/gems/chef-gen-flavor-base-0.9.2/lib/chef_gen/flavor_base/resource_helpers.rb                                                  

     54:           @recipe.send(:template, destination_path(template)) do                                                                                                                
     55:             source src                                                                                                                                                          
     56:             action resource_action                                                                                                                                              
     57:             helpers ChefDK::Generator::TemplateHelper                                                                                                                           
     58:             attrs.each { |a, v| send a, v }                                                                                                                                     
     59:           end                                                                                                                                                                   
     60:           # :nocov:                                                                                                                                                             

    Compiled Resource:                                                                                                                                                                   
    ------------------                                                                                                                                                                   
    # Declared in C:/Users/me/AppData/Local/chefdk/gem/ruby/2.1.0/gems/chef-gen-flavor-base-0.9.2/lib/chef_gen/flavor_base/resource_helpers.rb:54:in `block in add_templates'          

    template("C:/Users/me/chef/cookbooks/foo/Gemfile") do                                                                                                                              
      action [:create]                                                                                                                                                                   
      retries 0                                                                                                                                                                          
      retry_delay 2                                                                                                                                                                      
      default_guard_interpreter :default                                                                                                                                                 
      path "C:/Users/me/chef/cookbooks/foo/Gemfile"                                                                                                                                    
      backup 5                                                                                                                                                                           
      source "Gemfile.erb"                                                                                                                                                               
      variables #<Chef::DelayedEvaluator:0x6ea50b8@C:/Users/me/AppData/Local/chefdk/gem/ruby/2.1.0/gems/chef-gen-flavor-base-0.9.2/lib/chef_gen/snippet/cookbook_base.rb:83>           
      helper_modules [ChefDK::Generator::TemplateHelper]                                                                                                                                 
      declared_type :template                                                                                                                                                            
      cookbook_name :nordstrom                                                                                                                                                           
      recipe_name "cookbook"                                                                                                                                                             
    end                                                                                                                                                                                  

ERROR: Chef failed to converge: template[C:/Users/me/chef/cookbooks/foo/Gemfile] (nordstrom::cookbook line 54) had an error: NoMethodError: undefined method `cookbook_gems' for Chef::
Resource::Template                                                                                                                                                                       
Caused by: (NoMethodError) template[C:/Users/me/chef/cookbooks/foo/Gemfile] (nordstrom::cookbook line 54) had an error: NoMethodError: undefined method `cookbook_gems' for Chef::Resou
rce::Template                                                                                                                                                                            

This error occurs with ChefDK versions 0.9.0 and (just released) 0.10.0, but 0.8.1 (the version before 0.9.0) is fine, so something must have changed in 0.9.0 to break it. I'm investigating a bit more now.

Looking at the differences between 0.8.1 and 0.9.0, it looks like a bunch of the generating logic changed (partly to support chef generate generator). When I get a chance to read through the changes, I'll post any findings here.