[variables] ansible을 실행하는 사용자의 이름으로 변수를 얻으려면 어떻게해야합니까?

ansible 스크립트 (예 : tlau)를 실행하는 사용자의 이름을 사용하고 해당 사용자 이름과 현재 날짜 / 시간을 기반으로 원격 시스템에 배포 디렉터리를 만드는 배포 프로세스를 스크립팅하고 있습니다 (예 : tlau-deploy-2014-10 -15-16 : 52).

이것이 가능한 사실 (예 : 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.

(디버그 작업은 여기서 필요하지 않으며 변수의 내용 만 보여줍니다.)


두 번째 옵션은 “검색 플러그인”을 사용하는 것입니다.

{{ lookup('env', 'USER') }}

docs.ansible.com/ansible/playbooks_lookups.html에서 조회 플러그인에 대해 읽어보십시오.


답변

당신이 경우 gather_facts, 플레이 북에 대해 기본적으로 활성화되어있는이 내장라고 세트되는 변수 ansible_user_id작업이로 실행되고 있음을 사용자 이름을 제공한다. 그런 다음 다른 작업 또는 템플릿에서이 변수를 사용할 수 있습니다.{{ ansible_user_id }} . 이렇게하면 해당 변수를 등록하기 위해 작업을 실행하는 단계를 절약 할 수 있습니다.

참조 : https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variables-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 }}하고 내가 루트가 되었다면 그 변수는 내가 대부분의 시간을 원하는 것이 아니라 “루트”를 나타낸다.


답변

로컬 및 원격 시스템의 사용자 이름이 동일하다는 보장이 없기 때문에 원격 시스템에서 사용자 이름을 읽습니다. SSH 구성에서 이름을 변경할 수 있습니다.

- name: Run whoami without become.
  command: whoami
  changed_when: false
  become: false
  register: whoami

- name: Set a fact with the user name.
  set_fact:
    login_user: "{{ whoami.stdout }}"


답변

ansible tower에서 템플릿을 실행하는 사용자를 얻으려면 플레이 북에서이 var {{tower_user_name}}를 사용할 수 있지만 수동 실행에서만 정의됩니다.

tower_user_name :이 작업을 시작한 Tower 사용자의 사용자 이름입니다. 콜백 또는 예약 된 작업에는 사용할 수 없습니다.

이 문서 https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html 확인


답변