실행중인 현재 ansible 플레이 북에 대한 절대 경로가있는 ansible 변수가 있습니까?
일부 컨텍스트 :localhost
mysql 도커를 구성하기 위해
ansible 스크립트를 실행 / 만들고 있으며 ansible 스크립트와 관련된 데이터 볼륨을 마운트하고 싶습니다.
예를 들어 저장소를에 체크 아웃 한 ~/branch1/
다음 실행 한다고 가정 해 보겠습니다 . ansible-playbook dev.yml
볼륨을 ~/branch1/.docker_volume/
. 내가 그것을 실행했다면 ~/branch2
볼륨을 ~/branch2/.docker_volume/
.
답변
playbook_dir
변수 를 사용할 수 있습니다 .
답변
당신이 원하는 것을 정확히 담고있는 변수가없는 것 같습니다.
그러나 문서 인용 :
또한
inventory_dir
Ansible의 인벤토리 호스트 파일이있는 디렉토리의 경로 이름은 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 변수에서 사용할 수 있습니다.