nodejs icon indicating copy to clipboard operation
nodejs copied to clipboard

cookbook does not install requested version if package & repo for a different version already present

Open jayhendren opened this issue 6 years ago • 7 comments

Cookbook version

6.0.0

Chef-client version

14.2.0

Platform Details

RHEL 7

Scenario:

If a system already has a node.js repository and nodejs package installed that are different from the version specified in the node['nodejs']['version'] attribute, then the nodejs cookbook will not update the package to the requested version.

Steps to Reproduce:

recipes/default.rb:

include_recipe 'nodejs'

attributes.rb:

override['nodejs']['version'] = '10.15.3'
override['nodejs']['repo'] = 'https://rpm.nodesource.com/pub_10.x/el/7/$basearch'
┌─[jay@bluejay] - [~/Work/git/cookbooks/cub_nodejs] - [2019-05-17 04:04:21]
└─[0] <git:(master 7a9f10c✱) > kitchen login
X11 forwarding request failed on channel 0
Last login: Fri May 17 16:04:44 2019 from 10.0.2.2
[vagrant@testkitchen-cub-rh7 ~]$ node --version
v6.17.1
[vagrant@testkitchen-cub-rh7 ~]$ which node
/usr/bin/node
[vagrant@testkitchen-cub-rh7 ~]$ cat /etc/yum.repos.d/
node.js.repo  redhat.repo   
[vagrant@testkitchen-cub-rh7 ~]$ cat /etc/yum.repos.d/node.js.repo 
# This file was generated by Chef
# Do NOT modify this file by hand.

[node.js]
name=nodesource.com nodejs repository
baseurl=https://rpm.nodesource.com/pub_6.x/el/7/$basearch
enabled=1
fastestmirror_enabled=0
gpgcheck=1
gpgkey=https://rpm.nodesource.com/pub/el/NODESOURCE-GPG-SIGNING-KEY-EL
[vagrant@testkitchen-cub-rh7 ~]$ exit
logout
Connection to 127.0.0.1 closed.
┌─[jay@bluejay] - [~/Work/git/cookbooks/cub_nodejs] - [2019-05-17 04:06:01]
└─[0] <git:(master 7a9f10c✱) > kitchen converge
-----> Starting Kitchen (v1.22.0)
-----> Converging <default-cub-rh7>...
       Preparing files for transfer
       Installing cookbooks for Policyfile /home/jay/Work/git/cookbooks/cub_nodejs/Policyfile.rb using `chef install`
       Installing cookbooks from lock
       Using      ark             4.0.0
       Using      build-essential 8.2.1
       Installing cub_nodejs      0.2.2
       Using      mingw           2.1.0
       Using      nodejs          6.0.0
       Using      seven_zip       3.1.0
       Using      windows         6.0.0
       Preparing dna.json
       Exporting cookbook dependencies from Policyfile /tmp/default-cub-rh7-sandbox-20190517-16042-1hp86sm...
       Exported policy 'cub_nodejs' to /tmp/default-cub-rh7-sandbox-20190517-16042-1hp86sm
       
       To converge this system with the exported policy, run:
         cd /tmp/default-cub-rh7-sandbox-20190517-16042-1hp86sm
         chef-client -z
       Removing non-cookbook files before transfer
       Preparing data_bags
       Preparing validation.pem
       Preparing client.rb
-----> Chef Omnibus installation detected (install only if missing)
       Transferring files to <default-cub-rh7>
       Starting Chef Client, version 14.2.0
       Using policy 'cub_nodejs' at revision '968566b5560677e29e9642bdfb2ae071197de697e26645bed2ac7436f8eedfea'
       resolving cookbooks for run list: ["cub_nodejs::[email protected] (cf42f71)"]
       Synchronizing Cookbooks:
         - build-essential (8.2.1)
         - ark (4.0.0)
         - mingw (2.1.0)
         - nodejs (6.0.0)
         - seven_zip (3.1.0)
         - windows (6.0.0)
         - cub_nodejs (0.2.2)
       Installing Cookbook Gems:
       Compiling Cookbooks...
       Converging 3 resources
       Recipe: nodejs::repo
         * yum_repository[node.js] action create
           * template[/etc/yum.repos.d/node.js.repo] action create
             - update content in file /etc/yum.repos.d/node.js.repo from 1682d2 to 68337c
             --- /etc/yum.repos.d/node.js.repo	2019-05-17 17:02:51.555989589 -0600
             +++ /etc/yum.repos.d/.chef-node20190517-6951-158ifma.js.repo	2019-05-17 17:06:40.829953132 -0600
             @@ -3,7 +3,7 @@
       
       [node.js]
       name=nodesource.com nodejs repository
             -baseurl=https://rpm.nodesource.com/pub_6.x/el/7/$basearch
             +baseurl=https://rpm.nodesource.com/pub_10.x/el/7/$basearch
       enabled=1
       fastestmirror_enabled=0
       gpgcheck=1
             - restore selinux security context
           * execute[yum clean metadata node.js] action run
             - execute yum clean metadata --disablerepo=* --enablerepo=node.js
           * execute[yum-makecache-node.js] action run
             - execute yum -q -y makecache --disablerepo=* --enablerepo=node.js
           * ruby_block[package-cache-reload-node.js] action create
             - execute the ruby block package-cache-reload-node.js
           * execute[yum clean metadata node.js] action nothing (skipped due to action :nothing)
           * execute[yum-makecache-node.js] action nothing (skipped due to action :nothing)
           * ruby_block[package-cache-reload-node.js] action nothing (skipped due to action :nothing)
         
       Recipe: nodejs::nodejs_from_package
         * yum_package[nodejs] action install (up to date)
         * yum_package[nodejs-devel] action install (up to date)
       
       Running handlers:
       Running handlers complete
       Chef Client finished, 5/10 resources updated in 08 seconds
       Downloading files from <default-cub-rh7>
       Finished converging <default-cub-rh7> (0m13.70s).
-----> Kitchen is finished. (0m13.94s)
┌─[jay@bluejay] - [~/Work/git/cookbooks/cub_nodejs] - [2019-05-17 04:07:57]
└─[0] <git:(master 7a9f10c✱) > kitchen login
X11 forwarding request failed on channel 0
Last login: Fri May 17 16:06:37 2019 from 10.0.2.2
[vagrant@testkitchen-cub-rh7 ~]$ which node
/usr/bin/node
[vagrant@testkitchen-cub-rh7 ~]$ node --version
v6.17.1
[vagrant@testkitchen-cub-rh7 ~]$ cat /etc/yum.repos.d/node.js.repo 
# This file was generated by Chef
# Do NOT modify this file by hand.

[node.js]
name=nodesource.com nodejs repository
baseurl=https://rpm.nodesource.com/pub_10.x/el/7/$basearch
enabled=1
fastestmirror_enabled=0
gpgcheck=1
gpgkey=https://rpm.nodesource.com/pub/el/NODESOURCE-GPG-SIGNING-KEY-EL
[vagrant@testkitchen-cub-rh7 ~]$ exit
logout
Connection to 127.0.0.1 closed.

Expected Result:

nodejs cookbook upgrades node to the specified package version.

Actual Result:

nodejs cookbook does not upgrade node.

jayhendren avatar May 17 '19 22:05 jayhendren

@Poohblah did you find a fix for this? Im having same issue

Dragsbaek avatar Jan 30 '20 13:01 Dragsbaek

No, I haven't really been looking for a fix. The nodejs cookbook is one of my least-used cookbooks, so this is very low-priority for me personally. IIRC I just manually removed the package & repo and re-ran chef when I ran into this issue.

jayhendren avatar Jan 30 '20 17:01 jayhendren

Consistent with other reports about upgrades of packages. There are at least 3 related issues.

MarkGibbons avatar Oct 02 '20 18:10 MarkGibbons

This is a very nice report. It's almost the same issue as #110. I'm working on a solution for #110 that I suspect will fix this issue.

MarkGibbons avatar Oct 21 '20 03:10 MarkGibbons

From tracing the code, it doesn't look like version is really taken into account much at all, is it?

Brantone avatar Dec 09 '20 05:12 Brantone

Correct.

MarkGibbons avatar Dec 09 '20 05:12 MarkGibbons

Will leave this here instead of opening another bug but for people looking out to fix this, the nodejs_from_package is ignoring the version, so specifying another version than the original one will not work. To fix it you need to add the version:

In https://github.com/sous-chefs/nodejs/blob/main/recipes/nodejs_from_package.rb#L38, it should be

  package node_pkg do
    action node['nodejs']['package_action'][node_pkg] if node['nodejs']['package_action'][node_pkg]
    version node['nodejs']['version'] if node['nodejs']['version'] # need version here to install the version specified
    options node['nodejs']['package_options'][node_pkg] if node['nodejs']['package_options'][node_pkg]
  end

sbailliez avatar Mar 09 '23 22:03 sbailliez