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
これは、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 }}"
これは私のために働いた(Ubuntu):
tasks:
- name: Install RVM
Shell: "curl -sSL https://get.rvm.io | bash"
通常の(root以外の)ユーザーを使用する。
@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
最近、推奨される方法は RVMのansibleロール であると思います。そのプロジェクトのREADMEに説明があります。
また、Ansibleを使用してRVMをインストールしてみました。残念ながら、RVMはシェルスクリプト関数であるため、非対話型シェルではうまく機能しません。代わりにrbenvをインストールしました( https://github.com/sstephenson/rbenv )。
ここに私の要点があります:
それでも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番目のスクリプトを使用します。
スクリプトからの応答コードがゼロ以外であることが原因である可能性がありますか?
「rc」:1