/rvm1-ansible

The official ansible rvm role to install and manage your ruby versions.

MIT LicenseMIT

What is rvm1-ansible? Build Status

It is an Ansible role to install and manage ruby versions using rvm.

Why should you use rvm?

In production it's useful because compiling a new version of ruby can easily take upwards of 10 minutes. That's 10 minutes of your CPU being pegged at 100%.

rvm has pre-compiled binaries for a lot of operating systems. That means you can install ruby in about 1 minute, even on a slow micro instance.

This role even adds the ruby binaries to your system path when doing a system wide install. This allows you to access them as if they were installed without using a version manager while still benefiting from what rvm has to offer.

Installation

$ ansible-galaxy install rvm_io.rvm1-ruby

Role variables

Below is a list of default values that you can configure:

---

# Install 1 or more versions of ruby
# The last ruby listed will be set as the default ruby
rvm1_rubies:
  - 'ruby-2.1.3'

# Delete a specific version of ruby (ie. ruby-2.1.0)
rvm1_delete_ruby:

# Install path for rvm (defaults to system wide)
rvm1_install_path: '/usr/local/rvm'

# Add or remove any install flags
# NOTE: If you are doing a USER BASED INSTALL then
#       make sure you ADD the --user-install flag below
rvm1_install_flags: '--auto-dotfiles'

# Add additional ruby install flags
rvm1_ruby_install_flags:

# Set the owner for the rvm directory
rvm1_user: 'root'

# URL for the latest installer script
rvm1_rvm_latest_installer: 'https://raw.githubusercontent.com/wayneeseguin/rvm/master/binscripts/rvm-installer'

# rvm version to use
rvm1_rvm_version: 'stable'

# Check and update rvm, disabling this will force rvm to never update
rvm1_rvm_check_for_updates: True

# GPG key verification, use an empty string if you want to skip this
# Note: Unless you know what you're doing, just keep it as is
#           Identity proof: https://keybase.io/mpapis
#           PGP message: https://rvm.io/mpapis.asc
rvm1_gpg_keys: 'D39DC0E3'

# The GPG key server
rvm1_gpg_key_server: 'hkp://keys.gnupg.net'

# autolib mode, see https://rvm.io/rvm/autolibs
rvm1_autolib_mode: 3

Example playbook

---

- name: Configure servers with ruby support
  hosts: all

  roles:
    - { role: rvm_io.rvm1-ruby, tags: ruby, sudo: True }

System wide installation

The above example would setup ruby system wide. It's very important that you run the play with sudo because it will need to write to /usr/local/rvm.

To the same user as ansible_ssh_user

In this case, just overwrite rvm_install_path and set the --user-install flag:

Note: you still need to use sudo because during the ruby installation phase rvm will internally make calls using sudo to install certain ruby dependencies.

rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/{{ ansible_ssh_user }}/.rvm'

To a user that is not ansible_ssh_user

You will need sudo here because you will be writing outside the ansible user's home directory. Other than that it's the same as above, except you will supply a different user account:

rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/someuser/.rvm'

A quick note about rvm1_user

In some cases you may want the rvm folder and its files to be owned by a specific user instead of root. Simply set rvm1_user: 'foo' and when ruby gets installed it will ensure that foo owns the rvm directory.

Upgrading and removing old versions of ruby

A common work flow for upgrading your ruby version would be:

  1. Install the new version
  2. Run your application role so that bundle install re-installs your gems
  3. Delete the previous version of ruby

Leverage ansible's --extra-vars

Just add --extra-vars 'rvm1_delete_ruby=ruby-2.1.0' to the end of your play book command and that version will be removed.

Requirements

  • Tested on ubuntu 12.04 LTS but it should work on other versions that are similar.
  • Tested on RHEL6.5 and CentOS 6.5

Ansible galaxy

You can find it on the official ansible galaxy if you want to rate it.

License

MIT