Upgrade nodejs cookbook from 7.3 to 11.0
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
provides :nodejs_install
|
||||
unified_mode true
|
||||
|
||||
use '_partial/_nodejs'
|
||||
|
||||
property :install_method, String, equal_to: %w(package binary source chocolatey)
|
||||
property :install_repository, [true, false], default: true
|
||||
property :packages, [Array, nil], default: nil
|
||||
property :package_action, [Symbol, String], default: :install
|
||||
property :package_options, [String, nil]
|
||||
property :disable_dnf_module, [true, false], default: true
|
||||
property :source_url, [String, nil]
|
||||
property :source_checksum, [String, nil], default: '729de494dd2872e5a3a6c32a1cd156a5413d4aca2772b2d873ee86bb5531bcd9'
|
||||
property :binary_url, [String, nil]
|
||||
property :binary_checksums, Hash,
|
||||
default: {
|
||||
'linux_x64' => '44836872d9aec49f1e6b52a9a922872db9a2b02d235a616a5681b6a85fec8d89',
|
||||
'linux_arm64' => '73afc234d558c24919875f51c2d1ea002a2ada4ea6f83601a383869fefa64eed',
|
||||
}
|
||||
property :append_env_path, [true, false], default: true
|
||||
property :make_threads, [Integer, String, nil], default: nil
|
||||
property :build_packages, [Array, nil], default: nil
|
||||
property :chocolatey_package_name, String, default: 'nodejs-lts'
|
||||
|
||||
default_action :install
|
||||
|
||||
action :install do
|
||||
case requested_install_method
|
||||
when 'package'
|
||||
nodejs_repository 'nodesource' do
|
||||
node_major node_major_from_version(new_resource.version)
|
||||
action :create
|
||||
only_if { new_resource.install_repository }
|
||||
end
|
||||
|
||||
dnf_module 'nodejs' do
|
||||
action :disable
|
||||
only_if { disable_dnf_module? }
|
||||
end
|
||||
|
||||
resolved_packages.each do |pkg|
|
||||
package pkg do
|
||||
action new_resource.package_action.to_sym
|
||||
options new_resource.package_options if new_resource.package_options
|
||||
end
|
||||
end
|
||||
when 'binary'
|
||||
package 'tar' if platform_family?('rhel', 'fedora', 'amazon', 'suse')
|
||||
|
||||
ark 'nodejs-binary' do
|
||||
url nodejs_binary_url(new_resource.version, new_resource.prefix_url, new_resource.binary_url)
|
||||
version new_resource.version
|
||||
checksum nodejs_binary_checksum(new_resource.binary_checksums) unless new_resource.binary_url
|
||||
has_binaries %w(bin/node bin/npm bin/npx)
|
||||
append_env_path new_resource.append_env_path
|
||||
action :install
|
||||
end
|
||||
when 'source'
|
||||
build_essential 'install build tools'
|
||||
|
||||
(new_resource.build_packages || default_build_packages).each do |pkg|
|
||||
if dnf_python_package?(pkg)
|
||||
execute 'install python3 build package' do
|
||||
command 'dnf -y install python3'
|
||||
not_if 'command -v python3'
|
||||
only_if 'command -v dnf'
|
||||
end
|
||||
else
|
||||
package pkg
|
||||
end
|
||||
end
|
||||
|
||||
link '/usr/local/bin/python' do
|
||||
to '/usr/bin/python3'
|
||||
not_if { ::File.exist?('/usr/bin/python') || ::File.exist?('/usr/local/bin/python') }
|
||||
only_if { ::File.exist?('/usr/bin/python3') }
|
||||
end
|
||||
|
||||
ark 'nodejs-source' do
|
||||
url nodejs_source_url(new_resource.version, new_resource.prefix_url, new_resource.source_url)
|
||||
version new_resource.version
|
||||
checksum new_resource.source_checksum if new_resource.source_checksum
|
||||
make_opts ["-j #{new_resource.make_threads || default_make_threads}"]
|
||||
environment(PYTHON: 'python3')
|
||||
action :install_with_make
|
||||
end
|
||||
when 'chocolatey'
|
||||
chocolatey_package new_resource.chocolatey_package_name do
|
||||
version new_resource.version if new_resource.version
|
||||
action :upgrade
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
action :remove do
|
||||
case requested_install_method
|
||||
when 'package'
|
||||
resolved_packages.each do |pkg|
|
||||
package pkg do
|
||||
action :remove
|
||||
end
|
||||
end
|
||||
|
||||
nodejs_repository 'nodesource' do
|
||||
action :remove
|
||||
only_if { new_resource.install_repository }
|
||||
end
|
||||
when 'binary'
|
||||
ark 'nodejs-binary' do
|
||||
action :remove
|
||||
end
|
||||
when 'source'
|
||||
ark 'nodejs-source' do
|
||||
action :remove
|
||||
end
|
||||
when 'chocolatey'
|
||||
chocolatey_package new_resource.chocolatey_package_name do
|
||||
action :remove
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
action_class do
|
||||
include NodeJs::Helper
|
||||
|
||||
def requested_install_method
|
||||
new_resource.install_method || default_install_method
|
||||
end
|
||||
|
||||
def resolved_packages
|
||||
new_resource.packages || default_packages(new_resource.install_repository)
|
||||
end
|
||||
|
||||
def disable_dnf_module?
|
||||
new_resource.disable_dnf_module &&
|
||||
platform_family?('rhel', 'fedora') &&
|
||||
node['platform_version'].to_i >= 8 &&
|
||||
dnf_module_available?('nodejs')
|
||||
end
|
||||
|
||||
def dnf_module_available?(module_name)
|
||||
shell_out!("dnf -q module list #{module_name}", returns: [0, 1]).stdout.match?(/^#{Regexp.escape(module_name)}\s/m)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user