Instale o RVM com ansible

6

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
    
por Toby Hede 09.10.2012 / 03:46

7 respostas

4

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).

    
por 14.12.2013 / 22:16
4

RVM & Manual de instalação do Ruby

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 }}"
    
por 02.12.2014 / 17:47
2

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
    
por 09.01.2014 / 03:50
2

Hoje em dia, acredito que a maneira recomendada é com o papel ansible do RVM . Há instruções no README desse projeto.

    
por 02.12.2014 / 00:04
1

Eu também tentei instalar o RVM com Ansible. Infelizmente, o RVM não funciona muito bem com shells não interativos, porque é uma função de shell script. Acabei instalando o rbenv ( link ).

Aqui está minha essência:

link

    
por 28.11.2013 / 23:42
0

É possivelmente porque o código de resposta do script é diferente de zero?

"rc": 1

    
por 23.12.2012 / 00:01
0

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.

    
por 19.09.2014 / 12:30