У меня это сработало (Ubuntu):
tasks:
- name: Install RVM
shell: "curl -sSL https://get.rvm.io | bash"
Использование обычного (не root) пользователя.
Building on @dynex's answer, here's a way to do it a bit more idempotently, by checking for a folder it would normally create.
- stat: path=/etc/profile.d/rvm.sh
register: rvm_folder
- name: install rvm
shell: "curl -sSL https://get.rvm.io | bash"
when: rvm_folder.stat.isdir is not defined
Я также пробовал установить RVM с помощью Ansible. К сожалению, RVM плохо работает с неинтерактивными оболочками, потому что это функция сценария оболочки. Вместо этого я установил rbenv ( https://github.com/sstephenson/rbenv ).
Вот моя суть:
Поскольку rvm плохо работает с неинтерактивными оболочками, если вы все еще хотите использовать rvm с ansible, вы должны написать свои собственные сценарии, которые вызывают rvm, но начинают с bash -l
(оболочка входа в систему):
- name: install ruby-1.9.3
script: scripts/install-ruby-1.9.3.sh
Где install-ruby-1.9.3.sh
содержит что-то вроде
#!/bin/bash -l
rvm install 1.9.3
Старайтесь, чтобы такие сценарии были небольшими и ориентированными только на одну задачу (плюс обработка ] $?
для основной команды, если существует значение выхода, отличное от 0, которое вы хотите принять). Для второго рубина используйте второй сценарий, который инкапсулирует вторую команду.
Вот идемпотентное руководство, которое установит RVM, конкретную версию Ruby (установите версию с помощью ruby_version
var) и установите ее версия Ruby по умолчанию:
---
- hosts: all
sudo: yes
vars:
ruby_version: "2.1.3"
rvm_path: "/usr/local/rvm/gems/ruby-{{ ruby_version }}/bin:/usr/local/rvm/gems/ruby-{{ ruby_version }}@global/bin:/usr/local/rvm/rubies/ruby-{{ ruby_version }}/bin:/usr/local/rvm/bin"
tasks:
- name: append rvm path to environment
lineinfile: dest=/etc/environment state=present backrefs=yes regexp='PATH=(["]*)((?!.*?{{rvm_path}}).*?)(["]*)$' line="PATH=\1\2:{{rvm_path}}\3"
- name: ensure necessary packages are installed
yum:
name: "{{ item }}"
state: present
with_items:
- curl
- gnupg2
- name: ensure that GPG key for RVM is installed
command: gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
args:
creates: /root/.gnupg/secring.gpg
- name: ensure that RVM is installed
shell: curl -L get.rvm.io | bash -s stable
args:
creates: /usr/local/rvm
- name: ensure that ruby is installed
command: "rvm install {{ ruby_version }}"
args:
creates: "/usr/local/rvm/gems/ruby-{{ ruby_version }}"
environment:
PATH: "{{ rvm_path }}:{{ ansible_env.PATH }}"
- name: set default version of ruby with rvm
command: "rvm alias create default ruby-{{ ruby_version }}"
args:
creates: /usr/local/rvm/config/alias
environment:
PATH: "{{ rvm_path }}:{{ ansible_env.PATH }}"