web-dev-qa-db-ja.com

ansibleでは、ansibleを実行しているユーザーの名前を持つ変数を取得するにはどうすればよいですか?

Ansibleスクリプトを実行しているユーザーの名前(例:tlau)を取得し、そのユーザー名と現在の日付/時刻(例:tlau-deploy-2014-10)に基づいてリモートシステムにデプロイメントディレクトリを作成するデプロイメントプロセスのスクリプトを作成しています。 -15-16:52)。

これはansibleファクト(例:LOGNAMEまたはSudo_USER)で利用できると思いますが、これらはすべて「root」またはリモートシステムへのsshに使用されるデプロイメントIDに設定されます。それらのどれにもローカルユーザー、つまり現在ansibleプロセスを実行しているユーザーは含まれていません。

Ansibleプロセスを実行しているユーザーの名前を取得するスクリプトを作成して、プレイブックで使用するにはどうすればよいですか?

57
Tessa Lau

ホストシステムのユーザー名を意味する場合、ローカルアクションを実行できると思います。

- 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に含まれます。

(デバッグタスクはここでは必要ありません。変数の内容を示すだけです)

56

Playbookでデフォルトで有効になっているgather_factsには、ansible_user_idという名前の設定された組み込み変数があり、タスクが実行されているユーザー名を提供します。その後、{{ ansible_user_id }}を使用して、この変数を他のタスクまたはテンプレートで使用できます。これにより、タスクを実行してその変数を登録するステップを節約できます。

参照: http://docs.ansible.com/playbooks_variables.html#information-discovered-from-systems-facts

81
Tony Cesaro

すべてのテンプレートに次のようなものを配置します。

# 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になった場合、その変数は「ルート」を示しており、ほとんどの場合に必要なものではありません。

32
staylorx