質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.36%

AnsibleでRails環境を構築したい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 364

score 22

困っていること・前提

EC2上にansibleを使用しRailsの環境を構築したいのですがエラーが発生しまた。

[WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running sudo


上記のように現在sudoコマンドを直接利用するのは、現在非推奨になっているようです。
ですがsudoモジュールを使用している箇所がなく唯一使用しているのがCheck if version is installed rubyのshellモジュールです。
shellモジュール内でsudoを書かない記述方法がありますでしょうか

shell: "sudo -iu {{ rbenv_user }} rbenv versions | grep {{ rbenv_ruby_version }}"

エラー

TASK [Check if version is installed ruby] *************************************************************************************
[WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running sudo
fatal: [☓☓.☓☓.☓☓.☓☓]: FAILED! => {"changed": false, "cmd": "sudo -iu ec2-user rbenv versions | grep 2.7.2", "delta": "0:00:00.145138", "end": "2021-03-31 08:50:00.875045", "msg": "non-zero return code", "rc": 1, "start": "2021-03-31 08:50:00.729907", "stderr": "Warning: no Ruby detected on the system", "stderr_lines": ["Warning: no Ruby detected on the system"], "stdout": "", "stdout_lines": []}
...ignoring

コード

- name: 'Install packages'
  yum:
    name: "{{ item }}"
  with_items:
    - gcc
    - openssl-devel
    - libyaml-devel
    - readline-devel
    - zlib-devel
    - libffi-devel
    - gdbm-devel
    - ncurses-devel

- name: Install rbenv
  become: yes
  become_user: "{{ rbenv_user }}"
  git: repo=https://github.com/sstephenson/rbenv.git dest=~/.rbenv

- name: Add ~.rbenv/bin to PATH
  become: yes
  become_user: "{{ rbenv_user }}"
  lineinfile: >
    dest="~/.bash_profile"
    line="export PATH=$HOME/.rbenv/bin:$PATH"

- name: Eval rbenv init in ~/.bash_profile
  become: yes
  become_user: "{{ rbenv_user }}"
  lineinfile: >
    dest="~/.bash_profile"
    line='eval "$(rbenv init -)"'

- name: Install ruby-build as rbenv plugin
  become: yes
  become_user: "{{ rbenv_user }}"
  git: repo=https://github.com/sstephenson/ruby-build.git dest=~/.rbenv/plugins/ruby-build

-----------ここまでインストールされていることを確認-----------------------

- name: Check if version is installed ruby
  shell: "sudo -iu {{ rbenv_user }} rbenv versions | grep {{ rbenv_ruby_version }}"
  register: rbenv_check_install
  changed_when: False
  ignore_errors: yes
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

記載して頂いた他のタスクでも使用されている

become: yes
become_user: "{{ rbenv_user }}"

をご利用ください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/03/30 14:32

    ご回答ありがとうございます。

    become: yes
    become_user: "{{ rbenv_user }}"

    をどのあたりに記載すればいいのでしょうか

    キャンセル

  • 2021/03/30 15:06 編集

    こんな感じですね。

    - name: xxx
     shell: "xxx"
     become: yes
     become_user: "{{ rbenv_user }}"

    キャンセル

  • 2021/03/31 18:07

    ご回答ありがとうございます。

    shell内でのsudoも使用できないのでしょうか?
    レポートを修正しましたのでご確認いただけると幸いです。

    キャンセル

  • 2021/03/31 18:12

    shell内でsudoは使用できますよ。
    becomeと併用するという意味でしょうか?

    レポートとはなんでしょうか?

    キャンセル

checkベストアンサー

+1

別回答にて指摘あるように、sudoのところはあくまでWARNINGなのでそこが原因でエラーになっているわけではないです。

そこでエラーが出ているのは、そこまでの過程でまだrbenvを使ってRubyをインストールしていないので、対象のバージョンがまだないからではないでしょうか?
そこがエラーになるかどうかによってその後インストールの処理を実行するかどうかを振り分けるため

  register: rbenv_check_install
  changed_when: False
  ignore_errors: yes


あたりを設定していると思うので、そこがエラーになること自体は問題ではないと思います。
もしすでにrbenvによるインストールが済んでいるにも関わらずそこがエラーになるなら何か別の問題があるものと思われますけれど。

また、価値観の問題かもしれませんが、他のところではbecome_userで{{ rbenv_user }}での実行をしているのに、該当の処理だけわざわざsudoで{{ rbenv_user }}での実行をさせるのはちょっと気持ちが悪いですね…。
おそらくシェルを読み込むためにそうしてるんだと思いますが、自分はそうではなくて下記のようにbash -lcでログインシェルを呼び出した上でコマンド実行する方をおすすめします。。

  become: yes
  become_user: "{{ rbenv_user }}"
  shell: bash -lc "rbenv versions | grep {{ ruby_version }}"

なお、同じ問題に対する対処の仕方はこちらに色々出てます。
Install Bundler gem using Ansible

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

sudoの件はあくまでWARNINGなので、実際のエラーは別にあると思います。

以下のコマンドを手動実行したとしてもリターンコード0以外が帰ってきているのではないでしょうか?

sudo -iu ec2-user rbenv versions | grep 2.7.2

shellモジュールはリターン0以外だと失敗扱いになるので、
必要に応じてignore_errorsやfailed_whenをつけるようにしましょう。

また、エラーに記載のある出力結果とソースコードに差異があるのが気になります。

例えば、エラーの記載にある出力結果だとignore_errorsが付与されている且つ後続のタスクが実施されていて、後続のタスクの条件で失敗しているように見えます。

後続のタスクのソースがないので憶測になりますが、
以下の様な書き方はサポートされなくなった(多分)ので修正してみてはどうでしょうか?
rbenv_check_install|failed
→ rbenv_check_install is failed

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る