Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilation fails when using Chef Client 16.1.16 #45

Open
riccalioliojr opened this issue Jun 11, 2020 · 3 comments
Open

Compilation fails when using Chef Client 16.1.16 #45

riccalioliojr opened this issue Jun 11, 2020 · 3 comments

Comments

@riccalioliojr
Copy link

Cookbook Version

2.1.0

Chef Client Version

16.1.16

Platform Details

Centos 7.8

Scenario

Recipe compilation

Steps to Reproduce

Add the ssl_certificate dependency, add the snippet below in a recipe, and then converge it.

cert = ssl_certificate 'webapp1' do
  namespace node['webapp1'] # optional but recommended
end

Expected Result

Compiles successfully

Actual Result

       ================================================================================
       Recipe Compile Error in /tmp/kitchen/cache/cookbooks/parent-cookbook/recipes/default.rb
       ================================================================================
       
       NoMethodError
       -------------
       undefined method `ssl_certificate' for cookbook: child-cookbook, recipe: default :Chef::Recipe
       
       Cookbook Trace:
       ---------------
         /tmp/kitchen/cache/cookbooks/child-cookbook/recipes/default.rb:9:in `from_file'
         /tmp/kitchen/cache/cookbooks/parent-cookbook/recipes/default.rb:12:in `from_file'
       
       Relevant File Content:
       ----------------------
       /tmp/kitchen/cache/cookbooks/child-cookbook/recipes/default.rb:
       
         2:  # Cookbook Name:: child-cookbook
         3:  # Recipe:: default
         4:  #
         5:  # Copyright (c) 2016 The Authors, All Rights Reserved.
         6:  # include_recipe '****-sshd::default'
         7:  #
         8:  
         9>> cert = ssl_certificate 'proftpd' do
        10:    common_name node['child-cookbook']['public-name']
        11:  end
       
       System Info:
       ------------
       chef_version=16.1.16
       platform=centos
       platform_version=7.8.2003
       ruby=ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
       program_name=/opt/chef/bin/chef-solo
       executable=/opt/chef/bin/chef-solo
       
       
       Running handlers:
       [2020-06-10T18:19:53+00:00] ERROR: Running exception handlers
       Running handlers complete
       [2020-06-10T18:19:53+00:00] ERROR: Exception handlers complete
       Chef Infra Client failed. 0 resources updated in 10 seconds
       [2020-06-10T18:19:53+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
       [2020-06-10T18:19:53+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
       [2020-06-10T18:19:53+00:00] FATAL: NoMethodError: undefined method `ssl_certificate' for cookbook: child-cookbook, recipe: default :Chef::Recipe
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: 1 actions failed.
>>>>>>     Converge failed on instance <default-centos-78>.  Please see .kitchen/logs/default-centos-78.log for more details
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running `kitchen diagnose --all` for configuration
@vzDevelopment
Copy link

I think this might be because "HWRP Style Resources Now Require resource_name / provides" in Chef 16 (source). I've never written an HWRP before, but following this as a reference and adding:

diff --git a/libraries/resource_ssl_certificate.rb b/libraries/resource_ssl_certificate.rb
index 69b27b1..3b48233 100644
--- a/libraries/resource_ssl_certificate.rb
+++ b/libraries/resource_ssl_certificate.rb
@@ -58,6 +58,8 @@ class Chef
       # Include methods related to PKCS12 attributes.
       include ::Chef::Resource::SslCertificate::PKCS12

+      provides :ssl_certificate
+
       def initialize(name, run_context = nil)
         super
         @resource_name = :ssl_certificate

It no longer throws this error. I'm just running it through the kitchen test suite now and if that looks good I'll submit a PR.

vzDevelopment added a commit to vzDevelopment/ssl_certificate-cookbook that referenced this issue Jun 27, 2020
HWRP Style Resources require resource_name / provides in Chef 16. Set
the provider to prevent Chef from crashing with "undefined method
ssl_certificate for cookbook".

Fixes zuazo#45
@ziyan-junaideen
Copy link

ziyan-junaideen commented Jun 2, 2021

@vzDevelopment Is there a way we can add a dependency through git? I have something like this in my metadata.rb.

# metadata.rb
depends 'ssl_certificate', '~> 2.1.0'

@cgunther
Copy link

You may be able to replace your usage of ssl_certificate with openssl_x509_certificate that shipped with Chef Infra Client starting in v14.4. The properties may be named slightly different, but functionally it should serve the same purpose, avoiding this issue with Chef Infra Client v16+.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants