Isso funcionou para mim (Ubuntu):
tasks:
- name: Install RVM
shell: "curl -sSL https://get.rvm.io | bash"
Usando um usuário normal (não raiz).
Estou tentando instalar rvm com ansible em uma caixa errante baseada em centos.
O comando que estou executando é:
vars:
user: "foo"
- name: install rvm
action: command sudo -u $user bash /home/$user/rvm-install.sh stable creates=$home/.rvm
Funciona muito bem, mas a Ansible acha que falhou.
A saída analítica é:
failed: [127.0.0.1] => {"changed": true, "cmd": ["sudo", "-u", "foo", "bash", "/home/foo/rvm-install.sh", "stable"], "delta": "0:00:21.102322", "end": "2012-10-09 12:33:19.917874", "rc": 1, "start": "2012-10-09 12:32:58.815552"}
stderr: % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1081k 100 1081k 0 0 54170 0 0:00:20 0:00:20 --:--:-- 89264
stdout: Downloading RVM from wayneeseguin branch stable
Installing RVM to /home/foo/.rvm/
RVM PATH line found in /home/foo/.bashrc /home/foo/.zshenv.
RVM sourcing line found in /home/foo/.bash_profile /home/foo/.zprofile.
# RVM: Shell scripts enabling management of multiple ruby environments.
# RTFM: https://rvm.io/
# HELP: http://webchat.freenode.net/?channels=rvm (#rvm on irc.freenode.net)
# Cheatsheet: http://cheat.errtheblog.com/s/rvm/
# Screencast: http://screencasts.org/episodes/how-to-use-rvm
# In case of any issues read output of 'rvm requirements' and/or 'rvm notes'
Installation of RVM in /home/foo/.rvm/ is almost complete:
* To start using RVM you need to run 'source /home/foo/.rvm/scripts/rvm'
in all your open shell windows, in rare cases you need to reopen all shell windows.
# root,
#
# Thank you for using RVM!
# I sincerely hope that RVM helps to make your life easier and more enjoyable!!!
#
# ~Wayne
Isso funcionou para mim (Ubuntu):
tasks:
- name: Install RVM
shell: "curl -sSL https://get.rvm.io | bash"
Usando um usuário normal (não raiz).
Aqui está um manual idempotente que instalará o RVM, uma versão específica do Ruby (configure a versão com o ruby_version
var) e configure essa versão do Ruby como padrão:
---
- 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=:{{rvm_path}}"
- 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 }}"
Aproveitando a resposta do @dynex, aqui está uma maneira de fazer isso de forma um pouco mais idempotente, procurando por uma pasta que normalmente criaria.
- 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
Hoje em dia, acredito que a maneira recomendada é com o papel ansible do RVM . Há instruções no README desse projeto.
É possivelmente porque o código de resposta do script é diferente de zero?
"rc": 1
Como rvm não funciona bem com shells não interativos, se você ainda quiser usar rvm com ansible, você tem que escrever seus próprios scripts que chamam rvm, mas comece com bash -l
(um shell de login):
- name: install ruby-1.9.3
script: scripts/install-ruby-1.9.3.sh
Onde install-ruby-1.9.3.sh
contém algo como
#!/bin/bash -l
rvm install 1.9.3
Tente manter esses scripts pequenos e concentrados em apenas uma tarefa (mais manipular $?
para o comando principal se houver um valor de saída diferente de 0 que você deseja aceitar). Para um segundo ruby, use um segundo script que encapsule o segundo comando.