Skip to content

Instantly share code, notes, and snippets.

@asselstine
Created November 28, 2013 22:42
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save asselstine/7699067 to your computer and use it in GitHub Desktop.
Save asselstine/7699067 to your computer and use it in GitHub Desktop.
Ansible script to install rbenv. Intended for CentOS images.
---
# file ruby.yml
- hosts: all
gather_facts: false
sudo: true
vars:
# Where to install rbenv
- rbenv_root: /usr/local/rbenv
# The version of Ruby to install
- ruby_version: 1.9.3-p448
# The group to give all rbenv permission to
- group: rbenv
# Environment variables to help call rbenv while sudo
- rbenv_env: RBENV_ROOT=$rbenv_root PATH=/usr/local/bin:$rbenv_root/shims:$rbenv_root/bin:$PATH
# Essentially an alias for the binary
- rbenv_bin: $rbenv_env rbenv
tasks:
- name: rbenv | install build depends
yum: name=$item state=present
with_items:
- gcc-c++
- patch
- readline
- readline-devel
- zlib
- zlib-devel
- libyaml-devel
- libffi-devel
- openssl-devel
- make
- bzip2
- autoconf
- automake
- libtool
- bison
- git-core
- name: rbenv | create rbenv group
group: state=present name=$group
- name: rbenv | update rbenv repo
git: repo=git://github.com/sstephenson/rbenv.git dest=$rbenv_root version=v0.4.0
- name: rbenv | add rbenv to path
file: path=/usr/local/bin/rbenv src=${rbenv_root}/bin/rbenv state=link
- name: rbenv | alter permissions
file: group=$group mode=0775 recurse=yes state=directory path=${rbenv_root}
- name: rbenv | add rbenv initialization to profile
template: src=templates/rbenv.sh.j2 dest=/etc/profile.d/rbenv.sh owner=root group=$group mode=0775
- name: rbenv | check ruby-build installed
command: test -x /usr/local/bin/ruby-build
register: rbuild_present
ignore_errors: True
- name: rbenv | create temporary directory
command: mktemp -d
register: tempdir
when: rbuild_present | failed
- name: rbenv | clone ruby-build repo
git: repo=git://github.com/sstephenson/ruby-build.git dest=${tempdir.stdout}/ruby-build
when: rbuild_present|failed
- name: rbenv | install ruby-build
command: ./install.sh chdir=${tempdir.stdout}/ruby-build
when: rbuild_present|failed
- name: rbenv | remove temporary directory
file: path=${tempdir.stdout} state=absent
when: rbuild_present|failed
- name: rbenv | check ruby $ruby_version installed
shell: $rbenv_bin versions | grep $ruby_version
register: ruby_installed
ignore_errors: yes
- name: rbenv | install ruby $ruby_version
sudo: true
shell: $rbenv_bin install $ruby_version
when: ruby_installed|failed
- name: rbenv | set global ruby $ruby_version
shell: $rbenv_bin global $ruby_version
when: ruby_installed|failed
- name: rbenv | rehash
shell: $rbenv_bin rehash
when: ruby_installed|failed
- name: rbenv | set gemrc
copy: src=files/gemrc dest=/root/.gemrc owner=root group=root mode=0644
@asselstine
Copy link
Author

Note: you need a template file:

templates/rbenv.sh.j2

export RBENV_ROOT="{{ rbenv_root }}"
export PATH="/usr/local/bin:$RBENV_ROOT/shims:$RBENV_ROOT/bin:$PATH"

eval "$(rbenv init -)"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment