8

システム内のグループに現在のユーザーを追加しようとしています。次に、そのグループの許可を必要とするコマンドを実行します。私のプレイブックは次のようなものです:

- name: Add this user to RVM group
  sudo: true
  user: state=present name=vagrant append=yes groups=rvm group=rvm
- name: Install Ruby 1.9.3
  command: rvm install ruby-1.9.3-p448 creates=/usr/local/rvm/bin/ruby-1.9.3-p448

問題は、これらすべてが同じシェルで行われていることです。vagrant のシェルはまだ新しいグループで更新されていません。Ansible でユーザーの現在のグループを更新するクリーンな方法はありますか? 再接続するか、新しいシェルを開くには、それを入手する必要があると思います。

ただし、新しいシェルを開こうとしたところ、ハングするだけです。

- name: Open a new shell for the new groups
  shell: bash

もちろんハングします: プロセスは決して終了しません!

newgrpでも同じこと

- name: Refresh the groups
  shell: newgrp

基本的にやることは同じだからです。

何か案は?

4

4 に答える 4

4

マニュアルを読んでください。

ここでの解決策は、'command' または 'shell' モジュールのいずれかに 'executable' パラメータを使用することです。

だから私は次のようにコマンドモジュールを使ってみました:

- name: install ruby 1.9.3
  command: rvm install ruby-1.9.3-p448 executable=/bin/bash creates=/usr/local/rvm/bin/ruby-1.9.3-p448
  ignore_error: true

しかし、プレイブックは無期限にハングしました。マニュアルには次のように記載されています。

シェルを介してコマンドを実行したい場合 (たとえば、<、>、| などを使用している場合)、実際には代わりにシェル モジュールが必要です。コマンド モジュールは、ユーザーの環境に影響されないため、より安全です。

だから私はシェルモジュールを使ってみました:

- name: install ruby 1.9.3
  shell: rvm install ruby-1.9.3-p448 executable=/bin/bash creates=/usr/local/rvm/bin/ruby-1.9.3-p448
  ignore_error: true

そしてそれはうまくいきます!

于 2013-11-14T23:24:45.657 に答える
2

この問題はcapistranochefで確認しました。これは、まだグループを持っていないユーザーへのセッションが既に存在するために発生します。セッションを閉じて新しいセッションを開いて、追加されたグループをユーザーに表示させる必要があります。

于 2013-11-09T05:50:02.647 に答える
1

Ansible 1.8 を使用して RHEL 7.0 を使用していますが、受け入れられた回答がうまくいきませんでした。新しく追加された rvm グループを Ansible に強制的にロードさせる唯一の方法は、sg.

- name: add user to rvm group
  user: name=ec2-user groups=rvm append=yes
  sudo: yes

- name: install ruby
  command: sg rvm -c "/usr/local/rvm/bin/rvm install ruby-2.0.0"
于 2015-02-01T21:09:28.710 に答える