Ansibleスクリプトを実行しているユーザーの名前(例:tlau)を取得し、そのユーザー名と現在の日付/時刻(例:tlau-deploy-2014-10)に基づいてリモートシステムにデプロイメントディレクトリを作成するデプロイメントプロセスのスクリプトを作成しています。 -15-16:52)。
これはansibleファクト(例:LOGNAMEまたはSudo_USER)で利用できると思いますが、これらはすべて「root」またはリモートシステムへのsshに使用されるデプロイメントIDに設定されます。それらのどれにもローカルユーザー、つまり現在ansibleプロセスを実行しているユーザーは含まれていません。
Ansibleプロセスを実行しているユーザーの名前を取得するスクリプトを作成して、プレイブックで使用するにはどうすればよいですか?
ホストシステムのユーザー名を意味する場合、ローカルアクションを実行できると思います。
- name: get the username running the deploy
become: false
local_action: command whoami
register: username_on_the_Host
- debug: var=username_on_the_Host
この例では、whoami
コマンドの出力は「username_on_the_Host」という変数に登録され、ユーザー名はusername_on_the_Host.stdout
に含まれます。
(デバッグタスクはここでは必要ありません。変数の内容を示すだけです)
Playbookでデフォルトで有効になっているgather_facts
には、ansible_user_id
という名前の設定された組み込み変数があり、タスクが実行されているユーザー名を提供します。その後、{{ ansible_user_id }}
を使用して、この変数を他のタスクまたはテンプレートで使用できます。これにより、タスクを実行してその変数を登録するステップを節約できます。
参照: http://docs.ansible.com/playbooks_variables.html#information-discovered-from-systems-facts
すべてのテンプレートに次のようなものを配置します。
# Placed here by {{ lookup('env','USER') }} using Ansible, {{ ansible_date_time.date }}.
それをテンプレート化すると、次のように表示されます。
# Placed here by staylorx using Ansible, 2017-01-11.
{{ ansible_user_id }}
を使用していて、rootになった場合、その変数は「ルート」を示しており、ほとんどの場合に必要なものではありません。