Last active
August 29, 2015 14:15
-
-
Save sairez/c6549e1035e75b4c026e to your computer and use it in GitHub Desktop.
Ansible role to install a specific ruby version from source
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
just set ruby_full_version (e.g. 2.1.5, 2.1.0-rc1) | |
(defaults) | |
--- | |
ruby_major_version: "{{ruby_full_version | regex_replace('^([0-9]\\.[0-9])(.*)$', '\\\\1')}}" | |
ruby_minor_version: "{{ruby_full_version | regex_replace('^([0-9]\\.[0-9]\\.[0-9])(.*)$', '\\\\1')}}" | |
ruby_patch_version: "{{ruby_full_version | regex_replace('^[0-9]\\.[0-9]\\.[0-9](.*)$', '\\\\1') }}" | |
ruby_minor_tarball_name: "ruby-{{ruby_minor_version}}" | |
ruby_patch_tarball_name: "ruby-{{ruby_minor_version}}-{{ruby_patch_version}}" | |
ruby_dest_tarball_name: "{{ruby_full_version}}" | |
ruby_options: "--with-readline-dir=/usr/lib/x86_64-linux-gnu/libreadline.so" | |
(tasks) | |
--- | |
- name: Ruby | make sure ruby version to install is greater than 1.9.3 | |
fail: msg='you cannot install a version of ruby older than 1.9.3' | |
when: ruby_full_version | version_compare('1.9.3', '<') | |
- name: Ruby | checking installed version of ruby | |
shell: /usr/bin/test "$(ruby -v | awk '{print $2}' 2> /dev/null)" = {{ruby_full_version}} | |
register: wanted_version_installed | |
ignore_errors: True | |
- name: Ruby | install requirements | |
apt: name='{{item}}' force='yes' install_recommends='no' state='latest' update_cache='yes' | |
with_items: | |
- 'git-core' | |
- 'curl' | |
- 'zlib1g-dev' | |
- 'build-essential' | |
- 'libssl-dev' | |
- 'libreadline-dev' | |
- 'libyaml-dev' | |
- 'libsqlite3-dev' | |
- 'sqlite3' | |
- 'libxml2-dev' | |
- 'libxslt1-dev' | |
- 'libcurl4-openssl-dev' | |
- 'python-software-properties' | |
- 'python-httplib2' | |
when: wanted_version_installed.rc == 1 | |
- name: Ruby | check if patch version exists for download | |
uri: url="http://ftp.ruby-lang.org/pub/ruby/{{ruby_major_version}}/{{ruby_patch_tarball_name}}.tar.gz" | |
method='GET' | |
follow_redirects='none' | |
return_content='no' | |
when: wanted_version_installed.rc == 1 | |
register: patch_version | |
ignore_errors: True | |
- name: Ruby | check for minor version if patch version doesn't exist | |
uri: url="http://ftp.ruby-lang.org/pub/ruby/{{ruby_major_version}}/{{ruby_minor_tarball_name}}.tar.gz" | |
method='GET' | |
follow_redirects='none' | |
return_content='no' | |
register: minor_version | |
when: wanted_version_installed.rc == 1 and patch_version.status == 404 | |
- name: Ruby | set download tarball | |
set_fact: ruby_download_tarball_name="{{ruby_patch_tarball_name}}" | |
when: wanted_version_installed.rc == 1 and minor_version is defined and minor_version.skipped == true | |
- name: Ruby | set download tarball | |
set_fact: ruby_download_tarball_name="{{ruby_minor_tarball_name}}" | |
when: wanted_version_installed.rc == 1 and minor_version is defined and minor_version.status == 200 | |
- name: Ruby | grab correct ruby source | |
get_url: url="http://ftp.ruby-lang.org/pub/ruby/{{ruby_major_version}}/{{ruby_download_tarball_name}}.tar.gz" | |
dest='{{work_dir}}/{{ruby_download_tarball_name}}.tar.gz' | |
when: wanted_version_installed.rc == 1 and ruby_download_tarball_name is defined | |
- name: Ruby | unpack ruby source | |
unarchive: src='{{work_dir}}/{{ruby_download_tarball_name}}.tar.gz' | |
dest='{{work_dir}}' | |
copy='no' | |
when: wanted_version_installed.rc == 1 and ruby_download_tarball_name is defined | |
- name: Ruby | configure and compile ruby source | |
shell: './configure {{ruby_options}} && make && make install chdir={{work_dir}}/{{ruby_download_tarball_name}}' | |
when: wanted_version_installed.rc == 1 and ruby_download_tarball_name is defined | |
- name: Ruby | get ruby version | |
shell: "ruby -v | awk '{print $2}'" | |
register: ruby_installed_version | |
- name: Ruby | print version | |
debug: msg="{{ruby_installed_version.stdout}}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment