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


109

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

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

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


2
내가 생각해 본 적이없는 흥미로운 질문입니다. 그러나 당신이 그것을 요구하고 있다는 사실은 당신이 매우 잘못된 방식으로 무언가를하고 있다는 지표입니다.
Antonis Christofides

동의, 나는 @AntonisChristofides 정교한 것
조쉬 엉거

답변:


192

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


2
나는 비슷한 문제에 직면했고 당신의 대답은 그것을 해결했습니다. 감사. 그러나 playbook_dir변수가 문서화되어 있는 곳을 찾을 수 없습니다 . 문서를 알려 주시겠습니까? 또는이 변수에 대해 어떻게 알게되었는지 설명해 주시겠습니까?
slayedbylucifer

3
나는 ansible 코드에서 찾을 : github.com/ansible/ansible/blob/...
Seva의 폴리아 코프

2
또한 모든 변수 가 포함 된 흥미로운 repo github.com/lorin/ansible-quickref 가 있습니다.
Seva Poliakov

46

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

그러나 문서 인용 :

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

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

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

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


2

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

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

$ ansible -m setup hostname

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


Bruce에게 감사합니다. 나는 내가하려는 일을 자세히 설명하기 위해 내 질문을 수정했습니다.
조쉬 엉거

6
절대 로컬 경로는 전혀 의미가 없습니다. 예를 들어 로컬 명령을 실행하거나 ansible 구성에 직접 포함될 수없는 다른 로컬 파일이나 서비스를 쿼리하는 데 사용할 수 있습니다. ansible에 local_action모듈 이 있다는 단순한 사실은 이에 대한 합법적 인 사용 사례가 있음을 의미합니다.
Cray

1

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

---
- 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}}'

위의 솔루션에 따라.


1

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

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

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


7
이 경우 pwd플레이 북 스크립트의 경로를 반환하지 않습니다. 프로세스의 현재 디렉토리 (일반적으로 ansible-playbook)를 반환합니다 . 둘은 동일 할 필요가 없으며 ansible이 호출 된 정확한 방법에 따라 달라집니다.
Cray 2015

5
@Cray가 정확합니다. 선명하게 촬상가, 난 그냥 Ansible 이미 당신을 위해이 변수를 준비 언급하고 싶었 : debug: var=ansible_env.PWD(이 내게 실행하는 디렉토리주는 ansible-playbook내 로컬 컴퓨터에 원격 서버의 홈 디렉토리)
NS 뒤 투아

4
또는 현재 디렉토리는 다음에서 찾을 수 있습니다.{{ lookup('env','PWD') }}
isedwards
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.