web-dev-qa-db-ja.com

ansibleでRVMをインストールする

CentOSベースのvagrantボックスにansibleを使用してrvmをインストールしようとしています。

私が実行しているコマンドは次のとおりです。

vars:
  user: "foo"

- name: install rvm
  action: command Sudo -u $user bash /home/$user/rvm-install.sh stable creates=$home/.rvm

それはほとんど機能しますが、Ansibleは失敗したと考えています。

Ansibleの出力は次のとおりです。

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
6
Toby Hede

RVM&Rubyインストールプレイブック

これは、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 }}"
4
Philip Wilson

これは私のために働いた(Ubuntu):

    tasks:
      - name: Install RVM
        Shell: "curl -sSL https://get.rvm.io | bash"

通常の(root以外の)ユーザーを使用する。

4
dynex

@dynexの答えに基づいて、通常作成されるフォルダーをチェックすることで、もう少しべき等にそれを行う方法があります。

- 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
2
mahemoff

最近、推奨される方法は RVMのansibleロール であると思います。そのプロジェクトのREADMEに説明があります。

2
Ray Myers

また、Ansibleを使用してRVMをインストールしてみました。残念ながら、RVMはシェルスクリプト関数であるため、非対話型シェルではうまく機能しません。代わりにrbenvをインストールしました( https://github.com/sstephenson/rbenv )。

ここに私の要点があります:

https://Gist.github.com/brendan-skyrkt/7699067

1
brendan

それでもansibleでrvmを使用したい場合は、rvmは非対話型シェルではNiceを再生しないため、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

このようなスクリプトは小さくして、1つのタスクのみに集中するようにしてください(受け入れる必要のある0以外の終了値がある場合は、メインコマンドの$?を処理します)。 2番目の場合Ruby 2番目のコマンドをカプセル化する2番目のスクリプトを使用します。

0
adamo

スクリプトからの応答コードがゼロ以外であることが原因である可能性がありますか?

「rc」:1

0
user67327