silverlogic.rvm
¿Qué es rvm1-ansible?
Es un rol de Ansible para instalar y gestionar versiones de Ruby usando rvm.
¿Por qué deberías usar rvm?
En producción es útil porque compilar una nueva versión de Ruby puede tardar fácilmente más de 10 minutos. Son 10 minutos de tu CPU funcionando al 100%.
rvm tiene binarios precompilados para muchos sistemas operativos. Esto significa que puedes instalar Ruby en unos 1 minuto, incluso en una instancia micro lenta.
Este rol incluso agrega los binarios de Ruby a tu ruta del sistema al hacer una instalación a nivel de sistema. Esto te permite acceder a ellos como si estuvieran instalados sin usar un gestor de versiones, mientras aún te beneficias de lo que rvm tiene para ofrecer.
Instalación
$ ansible-galaxy install rvm.ruby
Variables del rol
A continuación hay una lista de valores predeterminados que puedes configurar:
---
# Instala 1 o más versiones de Ruby
# La última versión de Ruby listada será configurada como la versión predeterminada
rvm1_rubies:
- 'ruby-2.3.1'
# Instala la gema bundler
rvm1_bundler_install: True
# Versión de bundler - Si está vacío, usa la más reciente
rvm1_bundler_version: ''
rvm1_bundler_install_command: '{{ rvm1_bundler_version | ternary("gem install -v {{ rvm1_bundler_version }} bundler", "gem install bundler") }}'
# Elimina una versión específica de Ruby (ej. ruby-2.1.0)
rvm1_delete_ruby:
# Ruta de instalación para rvm (por defecto es de un solo usuario)
# NOTA: Si estás haciendo una INSTALACIÓN BASADA EN ROOT, asegúrate de
# establecer la ruta de instalación en algo como '/usr/local/rvm'
rvm1_install_path: '~/.rvm'
# Agrega o elimina cualquier bandera de instalación
# NOTA: Si estás haciendo una INSTALACIÓN BASADA EN ROOT entonces
# asegúrate de QUITAR la bandera --user-install de abajo
rvm1_install_flags: '--auto-dotfiles --user-install'
# Agrega banderas adicionales de instalación de Ruby
rvm1_ruby_install_flags:
# Establece el propietario del directorio rvm
# NOTA: Si estás haciendo una INSTALACIÓN BASADA EN ROOT entonces
# asegúrate de establecer rvm1_user a 'root'
rvm1_user: 'ubuntu'
# URL para el último script de instalación
rvm1_rvm_latest_installer: 'https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer'
# Versión de rvm a usar
rvm1_rvm_version: 'stable'
# Verifica y actualiza rvm; desactivar esto forzará a rvm a no actualizarse nunca
rvm1_rvm_check_for_updates: True
# Verificación de claves GPG; usa una cadena vacía si deseas omitir esto
# Nota: A menos que sepas lo que haces, solo déjalo como está
# Prueba de identidad: https://keybase.io/mpapis
# Mensaje PGP: https://rvm.io/mpapis.asc
rvm1_gpg_keys: '409B6B1796C275462A1703113804BB82D39DC0E3'
# El servidor de claves GPG
rvm1_gpg_key_server: 'hkp://pool.sks-keyservers.net'
# Modo autolib, ve https://rvm.io/rvm/autolibs
rvm1_autolib_mode: 3
Ejemplos de playbooks
---
- name: Configurar servidores con soporte para Ruby para un solo usuario
hosts: all
roles:
- { role: rvm.ruby,
tags: ruby,
rvm1_rubies: ['ruby-2.3.1'],
rvm1_user: 'ubuntu'
}
Si necesitas pasar una lista de versiones de Ruby, hazlo en un array de la siguiente forma.
---
- name: Configurar servidores con soporte para Ruby a nivel del sistema
hosts: all
roles:
- { role: rvm.ruby,
tags: ruby,
become: yes,
rvm1_rubies: ['ruby-2.2.5','ruby-2.3.1'],
rvm1_install_flags: '--auto-dotfiles', # Quita --user-install de los valores por defecto
rvm1_install_path: /usr/local/rvm, # Establece en la ubicación del sistema
rvm1_user: root # Necesita cuenta root para acceder a la ubicación del sistema
}
rvm_rubies debe especificarse a través de ruby-x.x.x
, así que si quieres
ruby 2.2.5, deberás pasar un array rvm_rubies: ['ruby-2.2.5']
Instalación a nivel del sistema
El ejemplo anterior configuraría Ruby a nivel del sistema. Es muy importante que ejecutes el play como root porque necesitarás escribir en una ubicación del sistema especificada por rvm1_install_path.
Para el mismo usuario que ansible_user
En este caso, solo sobrescribe rvm_install_path
y por defecto se establece la bandera --user-install
:
rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/{{ ansible_user }}/.rvm'
Para un usuario que no es ansible_user
Necesitarás acceso root aquí porque estarás escribiendo fuera del directorio principal del usuario de ansible. Aparte de eso, es lo mismo que lo anterior, excepto que deberás proporcionar una cuenta de usuario diferente:
rvm1_install_flags: '--auto-dotfiles --user-install'
rvm1_install_path: '/home/someuser/.rvm'
Una nota rápida sobre rvm1_user
En algunos casos, puedes querer que la carpeta rvm y sus archivos pertenezcan a un usuario específico en lugar de root. Simplemente establece rvm1_user: 'foo'
y cuando Ruby se instale, asegurará que foo
sea el propietario del directorio rvm.
Actualizando y eliminando versiones antiguas de Ruby
Un flujo de trabajo común para actualizar tu versión de Ruby sería:
- Instalar la nueva versión
- Ejecutar tu rol de aplicación para que bundle install reinstale tus gemas
- Eliminar la versión anterior de Ruby
Aprovechar los --extra-vars
de ansible
Solo agrega --extra-vars 'rvm1_delete_ruby=ruby-2.1.0'
al final de tu comando de playbook y esa versión será eliminada.
Requisitos
- Probado en CentOS 6 y 7
- Probado en Debian 8 y 9
- Probado en Ubuntu 14.04 y 16.04
Ansible galaxy
Puedes encontrarlo en el ansible galaxy oficial si deseas calificarlo.
Contribuyendo
Patrocinadores
Conviértete en un patrocinador y obtén tu logo en nuestro README en Github con un enlace a tu sitio.
Licencia
MIT
The official RVM role to install and manage your ruby versions
ansible-galaxy install silverlogic.rvm