表題の通り。`sudo: yes`を設定しているのだが、`sudo`する前のログインユーザを取得する方法を調べた。
■ 環境
- Ansible 1.9.2
■ きっかけ
userモジュールを使用して、ユーザに対してグループを追加したい。しかしTaskの実行がOKとなっても思い通りの結果になっておらず、どうしたものかと悩んでいた。
■ playbook
実行したいplaybookは下記の通り。
---
- hosts: all
sudo: yes
tasks:
- name: user mod
user: name={{ ansible_env.USER }} groups="testgroup"
これを実行したとろこ、”root“ユーザに対して”testgroup“グループが追加されてしまっていた。もちろん”{{ ansible_env.USER }}“を固定のIDにすれば問題なく動作してくれるのだが、実行する環境が必ずしも同じユーザではないので、あくまでログインする時のユーザに対して行いたい。
■ setupモジュール
確認する。
$ ansible -m setup 192.168.33.10
これで取得できた値から”{{ ansible_env.USER }}“や”{{ ansible_env.LOGNAME }}“といったものを試してみたのだが、全て”root“ユーザになっていた。`sudo`前のユーザIDを取得したいのだが…と悩んでいたところ、そもそも”setup“モジュールの実行を`sudo`した結果でやっていないからか?と思い立ち調べてみると、`-s`オプションが存在していた。
$ ansible -s -m setup 192.168.33.10
上記を実行したところ、取得された項目がかなり変わっていた。この中から”{{ ansible_env.SUDO_USER }}“が自身が使用したい値に相違なかったのでこれを利用するようにしたところ、思い通りの結果が得られるようになった。
以上。