Ansible 검색 경로

Ansible 검색 경로 (Search paths)

Ansible은 컨트롤 노드와 원격 노드에서 리소스를 찾기 위해 여러 경로를 검색해요. 절대 경로를 쓰면 가장 확실하지만, 항상 실용적이진 않죠. 이 페이지에서는 Ansible이 상대 경로를 어떻게 해석하는지, 그리고 원하는 리소스를 찾지 못할 때 어떻게 문제를 해결하는지 다룹니다.

출처: 문서

본문

컨트롤 노드에서 Ansible이 리소스를 찾기 위해 검색하는 경로(설정, 모듈, 롤, SSH 키 등을 포함)와, 관리 중인 원격 노드의 리소스 경로를 제어할 수 있어요. 가능하면 절대 경로를 써서 Ansible에 리소스 위치를 알려주는 게 좋습니다. 다만 절대 경로가 항상 실용적이진 않아요. 이 페이지는 Ansible이 상대 검색 경로를 어떻게 해석하는지, 그리고 Ansible이 필요한 리소스를 찾지 못할 때 문제를 해결하는 방법을 다룹니다.

설정 경로 (Config paths)

기본적으로 설정 경로는 설정 파일을 기준으로 해석되어야 해요. 일부 경로는 현재 작업 디렉터리나 플레이북을 기준으로 하며, 그런 경로는 설명에 따로 표기되어 있어요. SSH 키 같은 것은 현재 작업 디렉터리를 기준으로 사용하도록 남겨 두는데, 이는 기본 도구가 사용하는 방식과 동일하게 동작하게 하려는 것입니다.

작업 경로 (Task paths)

작업에서 사용하는 상대 경로는 일반적으로 관리 대상 노드의 원격 파일과 디렉터리를 가리켜요. 다만 lookup 플러그인에 전달하는 경로와, templatecopy 모듈의 src 경로처럼 일부 action 플러그인에서 사용하는 경로는 컨트롤 노드의 로컬 파일과 디렉터리를 가리킵니다.

로컬 상대 경로 해석하기 (Resolving local relative paths)

로컬 파일에 상대 경로를 지정하면, Ansible은 먼저 현재 작업이 속한 롤에서 그 파일을 찾고, 그다음 현재 롤을 포함(include)하거나 의존하는 다른 롤, 그다음 작업이 정의된 파일을 기준으로, 마지막으로 현재 플레이를 기준으로 파일을 찾아요. 그리고 첫 번째로 매칭된 파일을 사용합니다. 이렇게 하면 같은 이름의 파일이 여러 개 있어도, 현재 작업과 가장 가까운 즉 원하는 파일일 가능성이 가장 높은 파일을 찾을 수 있어요.

구체적으로 Ansible은 다음 순서로 파일을 찾습니다:

  • 현재 롤 안에서.
  • 해당하는 하위 디렉터리 files, vars, templates, tasks 중 하나에서 (검색하는 파일 종류에 따라 다름).
  • 롤 디렉터리에서 바로.
  • 1번과 마찬가지로, include_role이나 import_role 또는 롤 의존성으로 현재 롤을 호출한 부모 롤에서. 부모 롤에도 부모 롤이 있다면 그 롤로 같은 단계를 반복합니다.
  • 1번과 마찬가지로, 현재 작업 파일이 있는 디렉터리에서.
  • 1번과 마찬가지로, 현재 플레이 파일이 있는 디렉터리에서.

Ansible은 현재 작업 디렉터리, 즉 Ansible을 실행한 디렉터리에서는 로컬 파일을 검색하지 않아요.

참고 (Note)

  • 현재 작업 디렉터리는 연결 플러그인과 작업이 로컬인지 원격인지에 따라 달라질 수 있어요. 원격 작업에서는 보통 로그인 셸이 사용자를 놓아주는 디렉터리이고, 로컬 작업에서는 Ansible을 실행한 디렉터리 또는 경우에 따라 플레이북 디렉터리입니다.
  • 검색 경로 컨텍스트는 덧붙여지는(가산적) 성격이에요. 즉 Ansible은 파일 경로를 해석할 때 컨텍스트의 "스택"을 사용합니다. 작업의 로컬 상대 경로를 해석할 때, include_role이나 import_role 문으로 작업을 포함한 롤의 컨텍스트가 스택에서 가장 높은 우선순위를 가져요. 작업을 include_taskimport_task 문으로 임포트했다면 Ansible은 임포트한 파일의 컨텍스트를 사용합니다.

검색 경로 문제 해결 (Troubleshooting search paths)

Ansible을 실행하면 ansible_search_path 변수에 검색된 경로가 검색 순서대로 담겨요(하위 디렉터리는 나열하지 않음). -vvvvv 인자로 Ansible을 5단계 상세(verbosity)로 실행하면, tasks 파일을 검색할 때를 제외하고 각 디렉터리를 검색할 때마다 보고해 줍니다.

더 알아보기 (Learn more)

  • Ansible 플레이북 안내서의 다른 페이지들(예: playbooks.html, complex_data_manipulation.html)도 함께 읽어 보면 검색 경로가 실제 플레이북 작성에서 어떻게 쓰이는지 이해하는 데 도움이 돼요.