[ansible] 현재 실행중인 ansible 플레이 북에 대한 경로가있는 변수?

실행중인 현재 ansible 플레이 북에 대한 절대 경로가있는 ansible 변수가 있습니까?

일부 컨텍스트 :localhost mysql 도커를 구성하기 위해
ansible 스크립트를 실행 / 만들고 있으며 ansible 스크립트와 관련된 데이터 볼륨을 마운트하고 싶습니다.

예를 들어 저장소를에 체크 아웃 한 ~/branch1/다음 실행 한다고 가정 해 보겠습니다 . ansible-playbook dev.yml볼륨을 ~/branch1/.docker_volume/. 내가 그것을 실행했다면 ~/branch2볼륨을 ~/branch2/.docker_volume/.



답변

playbook_dir변수 를 사용할 수 있습니다 .


답변

당신이 원하는 것을 정확히 담고있는 변수가없는 것 같습니다.

그러나 문서 인용 :

또한 inventory_dirAnsible의 인벤토리 호스트 파일이있는 디렉토리의 경로 이름은 Ansible의 인벤토리 호스트 파일을 inventory_file가리키는 경로 이름과 파일 이름입니다.

playbook_dir에는 플레이 북 기본 디렉토리가 포함됩니다.

마지막으로 role_path현재 역할의 경로 이름을 반환합니다 (1.8 이후). 이것은 역할 내에서만 작동합니다.

설정에 따라 이러한 $ pwd솔루션 또는 기반 솔루션으로 충분할 수 있습니다.


답변

불행히도 없습니다. 실제로 절대 경로는 Ansible이 실행되는 방식과 관련하여 약간 무의미하며 잠재적으로 혼란 스럽습니다. 요컨대, 플레이 북을 호출 할 때 Ansible은 각 작업에 대해 작업과 관련된 모듈을 대상 머신의 임시 디렉토리에 물리적으로 복사 한 다음 필요한 매개 변수를 사용하여 모듈을 호출합니다. 따라서 대상 컴퓨터의 절대 경로는 그 안에 몇 개의 임시 파일 만 포함 된 임시 디렉터리 일 뿐이며 전체 플레이 북도 포함하지 않습니다. 또한 대상에 전체 Ansible 디렉터리 트리를 복제하지 않는 한 Ansible 서버에서 파일의 전체 경로를 아는 것은 대상 컴퓨터에서 거의 쓸모가 없습니다.

Ansible에서 정의한 모든 변수를 보려면 다음 명령을 실행 하면됩니다 .

$ ansible -m setup hostname

플레이 북의 절대 경로를 알아야한다고 생각하는 이유는 무엇입니까?


답변

다음과 같은 플레이 북을 사용하여 로컬에서 내 역할을 테스트했습니다.

---
- hosts: localhost
  roles:
     - role: .

그러나 이것은 Ansible v2.2에서 작동하지 않습니다.

앞서 언급 한 솔루션을 디버깅했습니다.

---
- hosts: all
  tasks:
    - name: Find out playbooks path
      shell: pwd
      register: playbook_path_output
    - debug: var=playbook_path_output.stdout

그리고 “현재 작업 디렉토리”가 아닌 내 홈 디렉토리를 생성했습니다.

나는 정착했다

---
- hosts: all
  roles:
    - role: '{{playbook_dir}}'

위의 솔루션에 따라.


답변

이 목적을위한 기본 제공 변수는 없지만 “pwd”명령을 사용하여 플레이 북의 절대 경로를 항상 찾아 변수에 등록 할 수 있습니다.

- name: Find out playbook's path
  shell: pwd
  register: playbook_path_output
- debug: var=playbook_path_output.stdout

이제 경로는 playbook_path_output.stdout 변수에서 사용할 수 있습니다.


답변