1. ホーム
  2. ansible

[解決済み] タスクまたはタスクのセットごとにユーザーを切り替えるには?

2022-04-21 14:26:04

質問

私のansibleプレイブックに繰り返し登場するテーマは、しばしばsudo権限でコマンドを実行しなければならないことです( sudo: yes というのも、あるユーザーに対してそれを行いたいからです。理想を言えば、sudoを使ってそのユーザーに切り替えて、普通にコマンドを実行したいところです。なぜなら、そうすれば、chowningディレクトリのような、コマンド実行後のいつもの後始末をする必要がなくなるからです。以下は、私のプレイブックの一部です。

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  sudo: yes
- name: change perms
  file: dest={{ dst }} state=directory mode=0755 owner=some_user
  sudo: yes

理想的には、sudo でそのユーザーに su する必要がある場合でも、別のユーザーとしてコマンドやコマンド群を実行することができます。

解決方法は?

Ansible 1.9以降を使用する場合

Ansibleは become , become_user および become_method ディレクティブを使用して、特権の昇格を実現します。これらのディレクティブは、プレイまたはプレイブック全体に適用したり、インクルードされたプレイブックに設定したり、特定のタスクに設定したりすることができます。

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  become: yes
  become_user: some_user

を使用することができます。 become_with は、特権の昇格方法を指定するためのもので、デフォルトは sudo .

ディレクティブは、それが使われているブロックのスコープで有効です ( ).

参照 ホストとユーザー を追加した例と なる(特権の昇格) は、より詳細なドキュメントを参照してください。

また、タスクスコープの becomebecome_user ディレクティブがない場合、Ansible 1.9 では、これらの値を再生期間中に設定するための新しい変数とコマンドラインオプションがいくつか追加されました。

Ansible 2.0.2.0の時点では、旧来の sudo / sudo_user の構文はまだ動作しますが、非推奨の通知には、「この機能は将来のリリースで削除される予定です」と記載されています。


Ansible 1.9 で非推奨となり、削除が予定されている以前の構文。

- name: checkout repo
  git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
  sudo: yes
  sudo_user: some_user