A puppet module to install (multiple versions of) Node.js with NVM (Node Version Manager).
- Module Description - What the module does and why it is useful
- Setup - The basics of getting started with nvm
- Usage - Configuration options and additional functionality
- Reference - An under-the-hood peek at what the module is doing and how
- Limitations - OS compatibility, etc.
- Development - Guide for contributing to the module
Node Version Manager (NVM) is a little bash script that allows you to manage multiple versions of Node.js on the same box. This Puppet module simplifies the task of installing it and allows to install unique or multiple versions of Node.js.
- Profile configuration: By default this module will write in the user's
.bashrc
file, this behaviour can be modified with theprofile_path
ormanage_profile
parameters as is explained bellow.
Warning: If your are going to manage Node.js with NVM is highly recommended to uninstall any native Node.js installation.
To have Puppet install NVM with the default parameters, declare the nvm class (user
is a required parameter):
class { 'nvm':
user => 'foo',
}
The Puppet module applies a default configuration: installs NVM to the selected user's home and adds it to .bashrc
. Use the Reference section to find information about the class's parameters and their default values.
You can customize parameters when declaring the nvm
class. For instance, this declaration will also install Node.js v0.12.7 as set it as defaul node:
class { 'nvm':
user => 'foo',
install_node => '0.12.7',
}
This is the most common usage for NVM. It installs NVM to the ~/.nvm
folder, makes it available for the user adding the script to the .bashrc
file, installs a Node.js version and sets it as default ensuring the dependencies.
class { 'nvm':
user => 'foo',
install_node => '0.12.7',
}
Once NVM is installed you can install as many Node.js versions as you want.
class { 'nvm':
user => 'foo',
} ->
nvm::node::install { '0.12.7':
user => 'foo',
set_default => true,
} ->
nvm::node::install { '0.10.36':
user => 'foo',
} ->
nvm::node::install { 'iojs':
user => 'foo',
}
Or:
class { 'nvm':
user => 'foo',
node_instances => {
'0.12.7' => {
set_default => true,
},
'0.10.36' => {},
'iojs' => {},
}
}
It isn't the recommended way but you can install Node.js globally.
class { 'nvm':
user => 'root',
nvm_dir => '/opt/nvm',
version => 'v0.29.0',
profile_path => '/etc/profile.d/nvm.sh',
install_node => '0.12.7',
}
You can use this module with other Node.js puppet modules that allow to install NPM packages. For example with the puppetlabs-nodejs module.
class { 'nvm':
user => 'root',
nvm_dir => '/opt/nvm',
version => 'v0.29.0',
profile_path => '/etc/profile.d/nvm.sh',
install_node => '0.12.7',
}
package { 'forever':
ensure => 'present',
provider => 'npm',
}
Warning: This module does not allow to install npm packages, this example asumes that you have also installed puppetlabs-nodejs module.
Guides the basic setup and installation of NVM on your system. It requires user
as parameter.
When this class is declared with the default options, Puppet:
- Installs the 0.29.0 version of NVM.
- Adds the
nvm.sh
script to the.bashrc
file. - Ensures packages
git
,make
andwget
.
You can simply declare the default nvm
class:
class { 'nvm':
user => 'foo',
}
You can install a default Node.js version in this class, by using the install_node
param.
Parameters within nvm
:
Sets the user that will install NVM.
Indicates the user's home. It needs to be an existing directory if the manage_user
is not set to true
.
Default: /home/${user}
(or /root
if the user is root
).
Sets the directory where NVM is going to be installed.
Default: /home/${user}/.nvm
.
Sets the profile file where the nvm.sh
is going to be loaded. Only used when manage_profile
is set to true
(default behaivour).
Default: /home/${user}/.bashrc
.
Version of NVM that is going to be installed. Can point to any git reference of the NVM project (or the repo set in ǹvm_repo
parameter).
Default: v0.29.0
.
Sets if the selected user will be created if not exists.
Default: false
.
Sets if the module will manage the git
, wget
, make
package dependencies.
Default: true
.
Sets if the module will add the nvm.sh
file to the user profile.
Default: true
.
Sets the NVM repo url that is going to be cloned.
Default: https://github.com/creationix/nvm
.
Sets if the repo should be fetched again.
Default: false
.
Installs a default Node.js version. Could be set to any NVM Node.js version name.
Default: undef
.
A hash with the node instances you want to install (it will be used to create nvm::node::install
instances with create_resources
).
Default: {}.
Installs a Node.js version.
Parameters within nvm::node::install
:
Sets the user that will install Node.js.
Sets the directory where NVM is going to be installed.
Default: /home/${user}/.nvm
.
Node.js version. Could be set to any NVM Node.js version name.
Default: 0.12.7
.
Determines whether to set this Node.js version as default.
This parameter is now deprecated because is a reserved word, use set_default
instead. Backguard compatibilty is added but throws a warning message.
Determines whether to set this Node.js version as default.
Default: false
.
Determines whether to install Node.js from sources.
Default: false
.
This module can not work on Windows and should work on LINUX systems.
This module is CI tested against open source Puppet on:
- CentOS 6 and 7
- Ubuntu 12.04 and 14.04
- Debian 7
This module has been tested in several production servers (OpenLogic7 (Centos7) and Ubuntu 14.04) in Azure.
This module should also work properly in other distributions and operating systems, such as FreeBSD, Gentoo, and Amazon Linux, but is not formally tested on them.
Report an issue if this module does not work properly in any Linux distro.
This modules is an open project, and community contributions are highly appreciated.
For more information, please read the complete module contribution guide.
This project contains tests for both rspec-puppet and beaker-rspec to verify functionality. For detailed information on using these tools, please see their respective documentation.
This project contains tests for rspec-puppet to verify functionality. For detailed information on using these tools, please see their respective documentation.
gem install bundler
bundle install
bundle exec rake test
./spec/run_virtualbox_tests.sh # this will take a long time