sous-chefs/nodejs

npm package failed to install with error Errno::ENOENT No such file or directory - npm

Closed this issue · 5 comments

Cookbook version

nodejs 2.4.4 (I have the issue with v6.0.0 as well)

Chef-client version

chef-client 14.14.29

Platform Details

"cat /etc/centos-release"
CentOS Linux release 7.7.1908 (Core)

Scenario:

The wrapper cookbook installs the pm2 npm package with the nodejs_npm (npm_package on newer versions of the cookbook) resource.

If I log into the test-kitchen vagrant VM, I can install the package manually with npm install -G pm2.

Steps to Reproduce:

[If you are filing an issue what are the things we need to do in order to repro your problem? How are you using this cookbook or any resources it includes?]
The wrapper cookbook sets additional packages that should be installed via pm:

  • Node attribute set:
nodejs:
        additional_packages:
          - 'pm2'
node['nodejs']['additional_packages'].each do |mod|
  nodejs_npm mod
end

Expected Result:

That PM2 package will be installed via npm.

Actual Result:

pm2 fails to install with the error: Errno::ENOENT No such file or directory - npm

Recipe: nfl-nodeapps::default
         * nodejs_npmÄpm2Å action installÄ2020-05-04T14:07:32+00:00Å INFO: Processing nodejs_npmÄpm2Å action install (nfl-nodeapps::default line 45)
       
           * executeÄinstall NPM package pm2Å action runÄ2020-05-04T14:07:32+00:00Å INFO: Processing executeÄinstall NPM package pm2Å action run (/tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb line 6)
       
             
             ================================================================================
             Error executing action éruné on resource 'executeÄinstall NPM package pm2Å'
             ================================================================================
             
             Errno::ENOENT
             -------------
             No such file or directory - npm
             
             Cookbook Trace:
             ---------------
             /tmp/kitchen/cache/cookbooks/nodejs/libraries/nodejs_helper.rb:25:in énpm_list'
             /tmp/kitchen/cache/cookbooks/nodejs/libraries/nodejs_helper.rb:39:in énpm_package_installed?'
             /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:37:in épackage_installed?'
             /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:12:in éblock (3 levels) in class_from_file'
             
             Resource Declaration:
             ---------------------
             # In /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb
             
        6:   execute "install NPM package #änew_resource.nameå" do
        7:     cwd new_resource.path
        8:     command "npm install #änpm_optionså"
        9:     user new_resource.user
       10:     group new_resource.group
       11:     environment npm_env_vars
       12:     not_if ä package_installed? å
       13:   end
       14: end
             
             Compiled Resource:
             ------------------
             # Declared in /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:6:in éblock in class_from_file'
             
             execute("install NPM package pm2") do
        action Ä:runÅ
        default_guard_interpreter :execute
        command "npm install  -global pm2"
        backup 5
        declared_type :execute
        cookbook_name "nfl-nodeapps"
        domain nil
        user nil
        cwd nil
        environment äå
        group nil
        not_if ä #code block å
             end
             
             System Info:
             ------------
             chef_version=14.14.29
             platform=centos
             platform_version=7.7.1908
             ruby=ruby 2.5.7p206 (2019-10-01 revision 67816) Äx86_64-linuxÅ
             program_name=/opt/chef/bin/chef-client
             executable=/opt/chef/bin/chef-client
             
       Ä2020-05-04T14:07:32+00:00Å INFO: Running queued delayed notifications before re-raising exception
           
           ================================================================================
           Error executing action éinstallé on resource 'nodejs_npmÄpm2Å'
           ================================================================================
           
           Errno::ENOENT
           -------------
           executeÄinstall NPM package pm2Å (/tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb line 6) had an error: Errno::ENOENT: No such file or directory - npm
           
           Cookbook Trace:
           ---------------
           /tmp/kitchen/cache/cookbooks/nodejs/libraries/nodejs_helper.rb:25:in énpm_list'
           /tmp/kitchen/cache/cookbooks/nodejs/libraries/nodejs_helper.rb:39:in énpm_package_installed?'
           /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:37:in épackage_installed?'
           /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:12:in éblock (3 levels) in class_from_file'
           
           Resource Declaration:
           ---------------------
           # In /tmp/kitchen/cache/cookbooks/nfl-nodeapps/recipes/default.rb
           
            45:   nodejs_npm mod
            46: end
           
           Compiled Resource:
           ------------------
           # Declared in /tmp/kitchen/cache/cookbooks/nfl-nodeapps/recipes/default.rb:45:in éblock in from_file'
           
           nodejs_npm("pm2") do
             action Ä:installÅ
             default_guard_interpreter :default
             declared_type :nodejs_npm
             cookbook_name "nfl-nodeapps"
             recipe_name "default"
           end
           
           System Info:
           ------------
           chef_version=14.14.29
           platform=centos
           platform_version=7.7.1908
           ruby=ruby 2.5.7p206 (2019-10-01 revision 67816) Äx86_64-linuxÅ
           program_name=/opt/chef/bin/chef-client
           executable=/opt/chef/bin/chef-client
           
       Ä2020-05-04T14:07:32+00:00Å INFO: Running queued delayed notifications before re-raising exception
       
       Running handlers:
       Ä2020-05-04T14:07:32+00:00Å ERROR: Running exception handlers
       Running handlers complete
       Ä2020-05-04T14:07:32+00:00Å ERROR: Exception handlers complete
       Chef Client failed. 195 resources updated in 01 minutes 55 seconds
       Ä2020-05-04T14:07:32+00:00Å FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
       Ä2020-05-04T14:07:32+00:00Å FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
       Ä2020-05-04T14:07:32+00:00Å DEBUG: Errno::ENOENT: nodejs_npmÄpm2Å (nfl-nodeapps::default line 45) had an error: Errno::ENOENT: executeÄinstall NPM package pm2Å (/tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb line 6) had an error: Errno::ENOENT: No such file or directory - npm
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:340:in éexec'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:340:in éblock in fork_subprocess'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:318:in éfork'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:318:in éfork_subprocess'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:95:in érun_command'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout.rb:267:in érun_command'
       /tmp/kitchen/cache/cookbooks/nodejs/libraries/nodejs_helper.rb:25:in énpm_list'
       /tmp/kitchen/cache/cookbooks/nodejs/libraries/nodejs_helper.rb:39:in énpm_package_installed?'
       /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:37:in épackage_installed?'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1317:in émethod_missing'
       /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:12:in éblock (3 levels) in class_from_file'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource/conditional.rb:106:in éevaluate_block'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource/conditional.rb:95:in éevaluate'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource/conditional.rb:88:in écontinue?'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1526:in éblock in should_skip?'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1525:in éeach'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1525:in éfind'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1525:in éshould_skip?'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:577:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:74:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in éblock in run_all_actions'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in éeach'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in érun_all_actions'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:132:in éblock in converge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/resource_list.rb:94:in éblock in execute_each_resource'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:114:in écall_iterator_block'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:85:in éstep'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:103:in éiterate'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:55:in éeach_with_index'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/resource_list.rb:92:in éexecute_each_resource'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:130:in éconverge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/provider.rb:239:in écompile_and_converge_action'
       (eval):2:in éaction_install'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/provider.rb:182:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:578:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:74:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in éblock in run_all_actions'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in éeach'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in érun_all_actions'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:132:in éblock in converge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/resource_list.rb:94:in éblock in execute_each_resource'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:114:in écall_iterator_block'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:85:in éstep'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:103:in éiterate'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:55:in éeach_with_index'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/resource_list.rb:92:in éexecute_each_resource'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:130:in éconverge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:720:in éblock in converge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:715:in écatch'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:715:in éconverge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:754:in éconverge_and_save'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:286:in érun'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application.rb:303:in érun_with_graceful_exit_option'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application.rb:279:in éblock in run_chef_client'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/local_mode.rb:44:in éwith_server_connectivity'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application.rb:261:in érun_chef_client'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application/client.rb:449:in érun_application'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application.rb:66:in érun'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/bin/chef-client:25:in é<top (required)>'
       /opt/chef/bin/chef-client:81:in éload'
       /opt/chef/bin/chef-client:81:in é<main>'
       
       >>>> Caused by Errno::ENOENT: No such file or directory - npm
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:340:in éexec'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:340:in éblock in fork_subprocess'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:318:in éfork'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:318:in éfork_subprocess'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout/unix.rb:95:in érun_command'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/mixlib-shellout-2.4.4/lib/mixlib/shellout.rb:267:in érun_command'
       /tmp/kitchen/cache/cookbooks/nodejs/libraries/nodejs_helper.rb:25:in énpm_list'
       /tmp/kitchen/cache/cookbooks/nodejs/libraries/nodejs_helper.rb:39:in énpm_package_installed?'
       /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:37:in épackage_installed?'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1317:in émethod_missing'
       /tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb:12:in éblock (3 levels) in class_from_file'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource/conditional.rb:106:in éevaluate_block'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource/conditional.rb:95:in éevaluate'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource/conditional.rb:88:in écontinue?'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1526:in éblock in should_skip?'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1525:in éeach'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1525:in éfind'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:1525:in éshould_skip?'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:577:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:74:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in éblock in run_all_actions'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in éeach'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in érun_all_actions'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:132:in éblock in converge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/resource_list.rb:94:in éblock in execute_each_resource'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:114:in écall_iterator_block'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:85:in éstep'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:103:in éiterate'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:55:in éeach_with_index'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/resource_list.rb:92:in éexecute_each_resource'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:130:in éconverge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/provider.rb:239:in écompile_and_converge_action'
       (eval):2:in éaction_install'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/provider.rb:182:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource.rb:578:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:74:in érun_action'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in éblock in run_all_actions'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in éeach'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:108:in érun_all_actions'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:132:in éblock in converge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/resource_list.rb:94:in éblock in execute_each_resource'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:114:in écall_iterator_block'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:85:in éstep'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:103:in éiterate'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/stepable_iterator.rb:55:in éeach_with_index'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/resource_collection/resource_list.rb:92:in éexecute_each_resource'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/runner.rb:130:in éconverge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:720:in éblock in converge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:715:in écatch'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:715:in éconverge'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:754:in éconverge_and_save'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/client.rb:286:in érun'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application.rb:303:in érun_with_graceful_exit_option'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application.rb:279:in éblock in run_chef_client'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/local_mode.rb:44:in éwith_server_connectivity'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application.rb:261:in érun_chef_client'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application/client.rb:449:in érun_application'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/lib/chef/application.rb:66:in érun'
       /opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.14.29/bin/chef-client:25:in é<top (required)>'
       /opt/chef/bin/chef-client:81:in éload'
       /opt/chef/bin/chef-client:81:in é<main>'
       Ä2020-05-04T14:07:32+00:00Å FATAL: Errno::ENOENT: nodejs_npmÄpm2Å (nfl-nodeapps::default line 45) had an error: Errno::ENOENT: executeÄinstall NPM package pm2Å (/tmp/kitchen/cache/cookbooks/nodejs/providers/npm.rb line 6) had an error: Errno::ENOENT: No such file or directory - npm
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: 1 actions failed.
>>>>>>     Converge failed on instance <pm2-centos-77>.  Please see .kitchen/logs/pm2-centos-77.log for more details
>>>>>> ----------------------
>>>>>> Please see .kitchen/logs/kitchen.log for more details
>>>>>> Also try running ékitchen diagnose --allé for configuration

-node.default['nodejs']['install_method'] = 'binary'
-include_recipe "nodejs::npm"
+node.default['nodejs']['install_method'] = 'package'
+include_recipe "nodejs"
+

Changing the installation method to package helped me overcome the above error.

When testing this issue my self it appears it is only affecting binary installs on kitchen vagrant centos 6,7, and 8. I ran a recipe against one of my centos 7 nodes and it runs just fine and installed the npm package. Ran it in dokken and again fine. 🤔 I will try to dive in more this weekend (might be next weekend just finishing a move).

This issue has popped up for me as well and why I am diving into it.

I took a look threw some PRs and when I tested it locally PR #117 fixed this issue.

Fwiw ... similar issue when using "package" on macOS (ex: via brew). Crux of it is that the helper calls npm hoping that it's in the environment path. The hiccup happens because /usr/local/bin is not in non-interactive shell.
Edited to add ... good mitigation is to add the following to enclosed recipe:

ruby_block "Add '#{local_bin_path}' to chef-client ENV['PATH']" do
  block { ENV['PATH'] = local_bin_path + ':' + ENV['PATH'] }
  only_if { ENV['PATH'].scan(local_bin_path).empty? }
end

Where local_bin_path is variable or attribute.

Thank you for the comments.