rvm
Version information
This module has been deprecated by its author since Jan 3rd 2023.
The author has suggested puppet-rvm as its replacement.
Start using this module
Documentation
Puppet Module for Ruby Version Manager (RVM)
This module handles installing system RVM (also known as multi-user installation as root) and using it to install rubies and gems. Support for installing and configuring passenger is also included.
We are actively using this module. It works well, but does have some issues you
should be aware of. Due to the way puppet works, certain resources
(rvm_sytem_ruby, rvm_gem and rvm_gemset) may generate errors until RVM is
installed. The puppet-rvm module uses run stages to install RVM before the rest
of your configuration runs. However, if you run puppet using the --noop
parameter, you may see Could not find a default provider errors. See the
Troubleshooting section for more information.
Please read the troubleshooting section below before opening an issue.
System Requirements
Puppet 2.6.7 or higher.
Add Puppet Module
Before you begin, you must add the RVM module to your Puppet installation. This can be done with:
$ git clone git://github.com/blt04/puppet-rvm.git /etc/puppet/modules/rvm
Enable plugin synchronization for custom types. In your puppet.conf (usually in /etc/puppet) on both the Master and Client ensure you have:
[main]
pluginsync = true
You may now continue configuring RVM resources.
Install RVM with Puppet
Install RVM with:
include rvm
or
class { 'rvm': version => '1.20.12' }
This will install RVM into /usr/local/rvm
.
To use RVM without sudo, users need to be added to the rvm
group. This can be easily done with:
rvm::system_user { bturner: ; jdoe: ; jsmith: ; }
NOTE: You must define a user elsewhere in your manifest to use rvm::system_user
.
Installing Ruby
You can tell RVM to install one or more Ruby versions with:
rvm_system_ruby {
'ruby-1.9.2-p290':
ensure => 'present',
default_use => true;
'ruby-1.8.7-p357':
ensure => 'present',
default_use => false;
}
You should use the full version number. While the shorthand version may work (e.g. '1.9.2'), the provider will be unable to detect if the correct version is installed.
Creating Gemsets
Create a gemset with:
rvm_gemset {
"ruby-1.9.2-p290@myproject":
ensure => present,
require => Rvm_system_ruby['ruby-1.9.2-p290'];
}
Installing Gems
Install a gem with:
rvm_gem {
'ruby-1.9.2-p290@myproject/bundler':
ensure => '1.0.21',
require => Rvm_gemset['ruby-1.9.2-p290@myproject'];
}
The name of the gem should be <ruby-version>[@<gemset>]/<gemname>
. For example, you can install bundler for ruby-1.9.2 using ruby-1.9.2-p290/bundler
. You could install rails in your project's gemset with: ruby-1.9.2-p290@myproject/rails
.
Alternatively, you can use this more verbose syntax:
rvm_gem {
'bundler':
name => 'bundler',
ruby_version => 'ruby-1.9.2-p290',
ensure => latest,
require => Rvm_system_ruby['ruby-1.9.2-p357'];
}
Installing Passenger
Install passenger with:
class {
'rvm::passenger::apache':
version => '3.0.11',
ruby_version => 'ruby-1.9.2-p290',
mininstances => '3',
maxinstancesperapp => '0',
maxpoolsize => '30',
spawnmethod => 'smart-lv2';
}
Building the module
To test and build the module
bundle install
# run specs
rake
# run tests with vagrant vms
rake integrate
# Release the Puppet module to the Forge, doing a clean, build, tag, push, bump_commit and git push
rake module:release
Troubleshooting / FAQ
An error "Could not find a default provider for rvm_system_ruby" is displayed when running Puppet with --noop
This means that puppet cannot find the /usr/local/rvm/bin/rvm
command
(probably because RVM isn't installed yet). Currently, Puppet does not support
making a provider suitable using another resource (late-binding). The
puppet-rvm module uses run stages to install RVM before the rest of the
configuration runs. When running in noop mode, RVM is not actually installed
causing rvm_system_ruby, rvm_gem and rvm_gemset resources to generate this
error. You can avoid this error by surrounding your rvm configuration in an if
block:
if $rvm_installed == "true" {
rvm_system_ruby ...
}
Do not surround include rvm
in the if block, as this is used to install RVM.
NOTE: $rvm_installed is evaluated at the beginning of each puppet run. If you use this in your manifests, you will need to run puppet twice to fully configure RVM.
An error "Resource type rvm_gem does not support parameter false" prevents puppet from running.
The RVM module requires Puppet version 2.6.7 or higher.
There is a bug in Puppet versions 2.7.4 through 2.7.9 that also causes this error. The error can be safely ignored in these versions. For best results, upgrade to Puppet 2.7.10.
Some packages/libraries I don't want or need are installed (e.g. build-essential, libc6-dev, libxml2-dev).
RVM works by compiling Ruby from source. This means you must have all the libraries and binaries required to compile Ruby installed on your system. I've tried to include these in manifests/classes/dependencies.rb
.
It doesn't work on my operating system.
I've only tested this on Ubuntu 10.04 and Ubuntu 11.04. omarqureshi was kind enough to add CentOS support. Other operating systems may require different paths or dependencies. Feel free to send me a pull request ;)
Why didn't you just add an RVM provider for the existing package type?
The puppet package type seems like an obvious place for the RVM provider. It would be nice if the syntax for installing Ruby with RVM looked like:
# NOTE: This does not work
package {'ruby':
provider => 'rvm',
ensure => '1.9.2-p290';
}
While this may be possible, it becomes harder to manage multiple Ruby versions and nearly impossible to install gems for a specific Ruby version. For this reason, I decided it was best to create a completely new set of types for RVM.
Types in this module release
Dependencies
- puppetlabs/stdlib (>=3.2.0)
Copyright (c) 2012-2013, MaestroDev, Brandon Turner All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Brandon Turner nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BRANDON TURNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.